Next: , Previous: Signal specifications, Up: Common options   [Contents][Index]


2.6 chown, chgrp, chroot, id: ユーザ名かユーザ ID かを明確にする

chown, chgrp, chroot, id といったコマンドでは、引数として ownergroup を渡す際に名前で指定しても、ID 番号で指定してもよい。 この指定法が曖昧であることは明らかである。 もし、ユーザ名やグループ名が数字の連続だったら、どうだろう? 1 コマンドはそれをユーザ名と解釈すべきだろうか? ID 番号と解釈すべきだろうか? POSIX では、「こうしたコマンドは、指定された文字列をまず名前として解決することを試み、 それに失敗した場合のみ、ID 番号として解釈しようとすること」と規定している。 この規定では、ユーザが引数として ID 番号、たとえば 42 を指定しようとすると、 面倒な話になる。42 というユーザ名が存在し、それにユーザ ID 番号として別の数字、 たとえば 1000 が割り当てられているといったややこしい状況でも、 うまく処理できなければならないとすると、厄介なことになるのだ。 単に chown 42 F を実行したのでは、ファイル F の所有者の ID 番号が 1000 になってしまう。これはユーザが意図した動作ではない。

GNU の chown, chgrp, chroot,id は、この問題に対する回避策を用意している。この回避策を使用すると、 データベースの検索を省略するので、処理速度が著しく向上することがあるというおまけまで付く。 ユーザやグループに ID 番号を指定する際には、 その前に ‘+’ を付けさえすればよいのだ。 そうすることで、整数として解釈するように強制できるのである。

chown +42 F
chgrp +$numeric_group_id another-file
chown +0:+0 /

+’ が前に付く各文字列に対しては、ユーザ名の検索プロセスが省略される。 何故なら、‘+’ を含む文字列が有効なユーザ名やグループ名であることは絶対にないからだ。 この書き方は、よく使われているたいていの Unix システムで使用できるが、Solaris 10 では使用できない。


Footnotes

(1)

環境によっては、ユーザ名に数字を使うのは、よくあることである。