火曜日, 3月 29, 2005

Linux ファイルのパーミッション

今日、見慣れないものを見てしまいました。

----------------------------------------------------
# ls -la /etc/dnscache/supervise/
total 12
drwx--S--- 2 root root 4096 Mar 24 01:57 .
drwxr-sr-t 6 root root 4096 Dec 8 17:13 ..
prw------- 1 root root 0 Dec 8 17:13 control
-rw------- 1 root root 0 Dec 8 17:13 lock
prw------- 1 root root 0 Dec 8 17:13 ok
-rw-r--r-- 1 root root 18 Mar 24 01:57 status
----------------------------------------------------

こんな感じ。なんだ「p」って??

調べてみたら名前つきパイプ(FIFO)のことでした。なるほど。
せっかくなのでまとめて調べてみようかと思ったけど、これがよくわかりません。
いまのところ想像がつくのは、
b ブロックデバイス
c キャラクタデバイス
d ディレクトリ
l シンボリックリンク
p 名前つきパイプ
くらいです。知ってる人いたら教えてください。

わからないことはしょうがないので、パーミッションについて書くことにします。
。。。と思ったけど、なんかバカバカしくなってきたのでやめました。

わかりにくいところでは、sやtでしょうか。

sはファイルの所有者、またはグループの実行権限でそのファイルを実行できることを意味します。それぞれset-user-ID (suid,setuid)、set-group-ID (sgid,setgid)ビットなんていいます。
ここで疑問が生まれます。もともとの所有者(またはグループ)に実行権限がなかったらどうなるんだ?
Linuxではこういう場合はSと大文字で表示されます。そしてこれがsgidだった場合にはこのファイルは強制ロックの対象になります。
強制ロックはカーネルが行うもので、ロックをかけたもの以外はたとえrootでも外すことができません。もしロックをかけたプロセスが外さずに終了する、無限ループに陥る、なんてことになるともはや誰もそのファイルにアクセスできなくなるわけです。埋蔵金の場所をだれにも教えないまま死んでしまったために、あとになってあっちこっち掘り返して大騒ぎな徳川家みたいになるわけですね。
そんなことになったら大変なのでなんとなく敷居が高そうです。イメージとしては、「このクソッタレの書いた協調性のないプログラムのせいで俺のエレガントなプログラムが動かないじゃないか!こうなったら強制ロックだ!!」みたいな感じでしょうか。なんか意外と低俗ですね。

話を戻して、tはsticky bitと呼ばれます。プログラムをスワップ上に保持するらしいけど、どんなときに使うのかあんまりピンときません。これももともと実行権がない場合には大文字のTになります。とくに意味はないです。
そのかわり今度は、ディレクトリの場合に別の意味を持ちます。
このディレクトリ内に作られたファイルはディレクトリの所有者かそのファイルの所有者以外、削除できません。一家団欒の食事で、弟のおかずを食べようとした兄貴の頭を殴る母親、残した野菜はわたしが始末、って感じでしょうか。悪くないですね。

まあ、互換性を考えたり、無駄を省くよう考えたりした結果なんだと思います。
でも、組み合わせによって想像もつかない効果を発揮するわけで、このsとかtはあんまり好きじゃない設計です。1ビットでも削ってやろうっていう昔のにおいがします。
こういう部分が残っていると、なかなかWindowsの代わりに使おうって、ならないんじゃないかな、って気がします。

0 件のコメント: