UNIX Q&A集
UNIXを使用した時のQ&Aについてまとめてあります。
このQ&Aは、実際に発生した質問とその回答を掲載しています。
Q.CGIで、root権限を必要とするコマンドを動かしたいのですが?
CGIは、webmasterユーザで動作するため、root権限を必要とするコマンドが使用できません。
A.setuid関数とsetuidビットを使うことで可能です。
以下に、root_commandというroot権限を必要とするコマンドを、suid_commandという名前で、一般ユーザが実行できるようにする方法を説明します。
まず、setuid関数を使用して、cプログラムを作成します。
unix> vi suid_command
main()
{
setuid(0);
setgid(0);
system("./root_command");
}
これをコンパイルします。
unix> cc -o suid_command suid_command.c
ルート権限で以下のコマンドを実行します。
所有者をrootに変更し、setuidビットを立てます。
unix> su
unix(root)> chown root suid_command
unix(root)> chmod +s suid_command (chmod a=rsx suid_command)
unix(root)> ls -l
-r-sr-s--- 1 root ash-g 31866 Apr 11 21:18 suid_command*
-r-x------ 1 root ash-g 317870 Apr 11 18:18 root_command*
これで、同一グループ(ash-g)に属する一般ユーザが、root_commandを実行できるようになります。
Q.ハイフン(-)で始まるファイルを、削除したいのですが?
気がつかないうちに、ハイフンで始まるファイルができていました。しかし、rmコマンドで、削除しようとしても、パラメータエラーとなり削除できません。
A.以下の2つの方法で削除できます。
ハイフンで始まる場合は、シェルのパラメータの区切り記号とみなされてしまいます。
- ディレクトリを付ける方法
ですから、ディレクトリ名を追加すると、ハイフンで始まらないため削除できます。
unix> rm ./-filename
- 2つのハイフン(--)を使う方法
2つのハイフンは、パラメータの終わりを示します。ですから、その後だと、ハイフンを使ったファイル名が使用できます。
unix> rm -- -filename
Q.2台のUNIXマシンで、対話できないでしょうか?
電話がなかったり、電話が通じにくい場合など、EWSやUPを使用して情報をやりとりする場合があります。
このような場合に、UNIXのネットワークを利用して情報のやりとりができれば便利なのですが。
A.writeコマンドを使用すれば可能です。
サーバとなるUNIXマシンを決めて、そこにtelnetでログインします。
write ユーザ名
と入力すれば、相手のウィンドウにメッセージを送れます。
送信用と受信用に2つウィンドウを開くとより便利です。
また、同一ユーザが2人ログインしていたり、2つ以上のウィンドウを開いていた場合は、
write ユーザ名 ターミナル名
と入力します。whoコマンドで、ターミナル名を調べることができます。
以下に入力例を示します。
unix> who
joe pts/1 9月30日 11時00分
joe pts/2 9月30日 12時00分
unix> write joe pts/2
相手が端末の前にいない場合は、
「CTRL+G」と「リターン」
を入力すると、相手の端末のBEEP音を鳴らすことができます。
Q.ファイルの日付を変更できないでしょうか?
A.touchコマンドを使用すれば可能です。
形式は、touch mmddhhmm[yy] filesです。
以下に入力例を示します。
unix> touch 09301100 *.html
Q.1週間以上前のファイルをまとめて削除したいのですが、どうすればいいでしょうか?
A.findコマンドを使用すれば簡単です。
形式は、find 検索開始ディレクトリ名 -mtime +日数 -exec 実行するコマンド です。
以下にカレントディレクトリ配下の1週間以上前のファイルを削除する場合の入力例を示します。
unix> find . -mtime +7 -exec rm {} \;