CHMOD(1)

名称
chmod - ファイルのモードを変更する

書式
chmod [ -fv -R [-H | -L | -P]] mode file ...

解説
chmod は指定されたファイルのモードを mode で指定したものに変更します。

オプションとして以下のものがあります:

-H  -R オプションが指定されていれば、引数がシンボリックリンクのとき、それを たどって変更します。 (ディレクトリツリー探索中に見つかったシンボリックリンクは、デフォルトでは それ以上追跡しません)

-L  -R オプションが指定されていれば、すべてのシンボリックリンクをたどり、 リンク先のファイルを変更します。

-P  -R オプションが指定されていても、どのシンボリックリンクもたどりません。 これがデフォルトです。

-R  指定されたファイル自身だけではなく、それらをルートとする ディレクトリ階層を再帰的に検索してモードを変更します。

-f  chmod が file のモードを変更できなかった場合に、診断メッセージを表示しません。

-v  chmod を冗長にし、モードが変更されるファイルを表示させます。

シンボリックリンクはモードを持たないので、 -H または -L オプションが指定されていなければ、シンボリックリンクに対する chmod 実行結果は常に真となり、何も変えません。 -H, -L, -P オプションは、 -R オプションが指定されていなければ無視されます。また、これらが 複数指定されると最後に指定したものが有効になります。

ファイルのモードの変更はそのファイルの所有者とスーパユーザだけにしか 許されていません。

診断

モード
モードには、数値を用いた絶対値指定と、シンボルによる指定があります。 数値指定では、以下の値を ``or'' で組み合わせた 8 進数を用います:

4000
    (set-user-ID-on-execution ビット) このビットがセットされている実行可能ファイルは、 ファイルを所有するユーザ ID に実効ユーザ ID を設定されて実行されます。 set-user-id ビットをセットされているディレクトリは、 その中で作成される全てのファイルおよびディレクトリの所有者を ディレクトリの所有者に設定することを強制し、 作成するプロセスのユーザ ID は無関係となります。 これは、ディレクトリが存在するファイルシステムが この機能をサポートしている場合に限られます: chmod(2) と mount(8) の suiddir オプションを参照してください。
2000
    (set-group-ID-on-execution ビット) このビットがセットされている実行可能ファイルは、 ファイルを所有するグループ ID に実効グループ ID を設定されて実行されます。
1000
    (スティッキービット) ディレクトリに設定した時には、 非特権ユーザは、所有するファイルのみ削除およびリネーム可能となり、 ディレクトリのパーミッションは無関係となります。 FreeBSD では、実行可能ファイルに設定されたスティッキービットは無視され、 ディレクトリにのみ設定可能です ( sticky(8) 参照)。
0400
    所有者の読み込みを許可。
0200
    所有者の書き込みを許可。
0100
    ファイルの場合、所有者の実行を許可。 ディレクトリの場合、所有者の検索を許可。
0040
    グループのメンバの読み込みを許可。
0020
    グループのメンバの書き込みを許可。
0010
    ファイルの場合、グループのメンバの実行を許可。 ディレクトリの場合、グループのメンバの検索を許可。
0004
    他者の読み込みを許可。
0002
    他者の書き込みを許可。
0001
    ファイルの場合、他者の実行を許可。 ディレクトリの場合、他者の検索を許可。

例えば、所有者に読み込み・書き込み・実行を許可し、 グループのメンバに読み込み・実行を許可し、 他者に読み込み・実行を許可し、 set-uid と set-gid を指定しない絶対値指定のモードは、 755 (400+200+100+040+010+004+001) となります。

シンボルによる指定は以下の文法に従います。

    mode         ::= clause [, clause ...]
    clause       ::= [who ...] [action ...] action
    action       ::= op [perm ...]
    who          ::= a | u | g | o
    op           ::= + | - | =
    perm         ::= r | s | t | w | x | X | u | g | o

who シンボルの ``u'', ``g'', ``o'' はそれぞれユーザ、グループ、それ以外に 相当します。``a'' シンボルは ``ugo'' を指定した場合と同じになります。

perm シンボルはモードの各ビットを以下のように表現します。

r   読み込み許可ビット
s   実行時 setuid および実行時 setgid ビット
t   sticky ビット
w   書き込み許可ビット
x   実行/検索 許可ビット
X   対象がディレクトリであるか、変更前のモードで誰かの実行/検索許可ビット が立っている場合に、実行/検索許可ビットがセットされます。 perm シンボルでの ``X'' の指定は、 op シンボルを ``+''で連結する時のみ意味があり、他の場合は無視されます。
u   元の、ファイルの所有者許可ビット
g   元の、ファイルのグループ許可ビット
o   元の、ファイルの所有者とグループ以外の許可ビット

op シンボルの働きは以下のようになります

+   perm 値が指定されなければ、``+'' は何の作用もありません。 who シンボルが指定されていなければ、 perm 値はそれぞれの who シンボルの対応するビットに作用し、それを umask で マスクしたビットがセットされます。 who シンボルが指定されていれば、その perm 値が設定されます。

-   perm 値が指定されていなければ、``-'' は何の作用もありません。 who シンボルが指定されていなければ、 perm 値はそれぞれの who シンボルの対応するビットに作用し、それを umask で マスクしたビットがクリアされます。 who シンボルが指定されていれば、その perm 値がクリアされます。

=   who シンボルで指定されたモードビットがクリアされます。who シンボルが指定 されていなければ、所有者、グループ、その他の各モードビットがクリアされ ます。 who シンボルが指定されていなければ、 perm で指定したビットが、所有者、グループ、その他のそれぞれを umask で マスクしたものだけ設定されます。 who シンボルと perm が指定されていれば、その値がそのまま設定されます。

各 clause では、モードビットを操作するためのオペレーションを 1 つ以上記述しなけ ればなりません。そして各オペレーションは記述した順番で適用されます。

所有者とグループ以外の ``o'' のみに対して、``s'' や ``t'' の組み合わせの perm 値が指定されても無視されます。

使用例
644 ファイルを誰にでも読めるようにして、ファイルの所有者のみ書き込み可能に します。

go-w
    ファイルの所有者以外の書き込みを禁止します。

=rw,+X
    umask でマスクされていないビットの読み書きを許可しますが、実行許可は 現在設定されているものを保持します。

+X  誰かが実行／検索可能なファイルやディレクトリならば、すべてのユーザが 実行／検索できるファイルやディレクトリとします。

755
u=rwx,go=rx
u=rwx,go=u-w
    誰にでも読み込みと実行ができて、所有者のみ書き込み可能になるようにしま す。

go= グループやその他のユーザにいかなる許可も与えません。

g=u-w
    グループビットをユーザビットと同じにしますが、グループの書き込みは禁止 します。

バグ
naughty bit のための perm オプションがありません。

互換性
-v オプションは非標準であり、スクリプト中の使用は非推奨です。

関連項目
chflags(1), install(1), chmod(2), stat(2), umask(2), fts(3), setmode(3), symlink(7), chown(8), mount(8), sticky(8)

規格
chmod ユーティリティは、規格にない perm シンボルの “t” を除いては p1003.2 互換になるように作られています。

歴史
chmod コマンドは AT&T UNIX から導入されました．