EN JA
CHMOD(1)
CHMOD(1) FreeBSD General Commands Manual CHMOD(1)

名称

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

書式

chmod [ -fhv][ -R [ -H | -L | -P]] mode file ...

解説

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

オプションは、次の通りです:

-f
chmodfile のモードを変更できなかったときに、診断メッセージを表示しませんし、失敗を示す終了値の変更を行いません。
-H
-R オプションが指定されていれば、引数がシンボリックリンクのとき、それをたどって変更します。 (ディレクトリツリー検索中に見つかったシンボリックリンクは、デフォルトではそれ以上追跡しません)
-h
ファイルがシンボリックリンクの場合、リンクの先のファイルの代りにリンク自身のモードを変更します。
-L
-R オプションが指定されていれば、すべてのシンボリックリンクをたどり、リンク先のファイルを変更します。
-P
-R オプションが指定されていても、どのシンボリックリンクもたどりません。これがデフォルトです。
-R
指定されたファイル自身だけではなく、それらをルートとするディレクトリ階層を再帰的に検索してモードを変更します。
-v
chmod を冗長にし、モードが変更されるファイルを表示させます。 -v が複数回指定された場合、ファイルの旧モードと新モードが、 8 進数およびシンボルにて表示されます。

-H, -L, -P オプションは、 -R オプションが指定されていなければ無視されます。また、これらが複数指定されると最後に指定したものが有効になります。

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

終了ステータス

The chmod utility exits 0 on success, and >0 if an error occurs.

モード

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

4000
(setuid ビット) このビットがセットされている実行可能ファイルは、ファイルを所有するユーザ ID に実効ユーザ ID を設定されて実行されます。このビットをセットされているディレクトリは、その中で作成される全てのファイルおよびディレクトリの所有者をディレクトリの所有者に設定することを強制し、作成するプロセスのユーザ ID は、無関係となります。これは、ディレクトリが存在するファイルシステムがこの機能をサポートしている場合に限られます: chmod(2)mount(8)suiddir オプションを参照してください。
2000
(setgid ビット) このビットがセットされている実行可能ファイルは、ファイルを所有するグループ ID に実効グループ ID を設定されて実行されます。
1000
(スティッキビット)。 chmod(2)sticky(7) を参照してください。
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'' は、それぞれユーザ、グループ、それ以外に相当します。 who シンボルの ``a'' は、``ugo'' を指定した場合と同じになります。

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

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

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

+
perm 値が指定されなければ、``+'' は何の作用もありません。 who に値が指定されていないなら、ファイルモード作成マスク ( umask(2) 参照) に対応するビットがクリアされているビットに対して、 perm で指定された各パーミッションビットが、セットされます。そうでなければ、指定された whoperm 値によって表されるモードビットがセットされます。
-
perm 値が指定されていなければ、``-'' は、何の作用もありません。 who シンボルが指定されていなければ、 perm 値は、それぞれの who シンボルの対応するビットに作用し、それを umask でマスクしたビットがクリアされます。 who シンボルが指定されていれば、その perm 値がクリアされます。
=
who シンボルで指定されたモードビットがクリアされます。 who シンボルが指定されていなければ、所有者、グループ、その他の各モードビットがクリアされます。 who シンボルが指定されていなければ、 perm で指定したビットが、所有者、グループ、その他のそれぞれを umask でマスクしたものだけ設定されます。 who シンボルと perm が指定されていれば、その値がそのまま設定されます。

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

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

ディレクトリの ``w'' パーミッションは、ファイルの作成、移動、とそのディレクトリへのコピーを可能とします。ディレクトリ自体の中で作成されたファイルは、グループ ID を引き継ぎます。

使用例

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

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

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

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

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

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

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

互換性

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

規格

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

歴史

chmod コマンドは、 Version 1 AT&T UNIX で登場しました。

バグ

horse の naughty bit のための perm オプションは、ありません。
January 26, 2009 FreeBSD