Next: Random sources, Previous: Signal specifications, Up: Common options [Contents][Index]
chown
, chgrp
, chroot
, id
といったコマンドでは、引数として owner や group
を渡す際に名前で指定しても、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 では使用できない。