chmod

ファイルのアクセス権を変更する

chmod - ファイルのアクセス権を変更する
chmod [ options ] mode file...
POSIX オプション: [-R]
GNU オプション (簡略形式): [-cfvR] [--reference=file] [--help] [--version] [--]
chmod コマンドは指定したそれぞれの file のアクセス権を mode により変更する。変更方法をシンボルで表現するか、もしくは変更後の アクセス権を表すビットパターンを 8 進数で表現したもののいずれかを 使うことができる。 シンボルモードでアクセス権を変更する場合の引数の書式は `[ugoa...][[+-=][rwxXstugo...]...][,...]' である。 シンボルモードで引数にアクセス権の変更を複数指定する場合にはコンマで区切る。 シンボルモードでアクセス権を変更するそれぞれの表現は 0 個もしくは複数の文字 `ugoa' で始まる; これらがファイルに対するどのユーザーのアクセス権を変更するかを決める: ファイルの所有者 (u)、 ファイルと同じグループに属しているが所有者ではない (訳注: 以後グループと表記) (g)、 所有者でもなく、そのファイルと同じグループにも属していない (訳注: 以後その他と表記) (o)、 もしくは全ユーザー (a) を表している。つまり `a' は `ugo' と同じである。 もしこれらのいずれも指定されない場合、`a' が指定されたのと同じ結果となるが、umask に設定された ビット位置は変化しない。 `+' 演算子は各々のファイルの現状のアクセス権に、選択したアクセス権を加える; `-' は削除する; そして `=' は指定したアクセス権だけがそのファイルのアクセス権となる。 文字 `rwxXstugo' は影響を与えるユーザーに対する新しいアクセス権を選択する: 読取り (r)、 書き込み (w)、実行 (またはディレクトリに対するアクセス) (x)、ファイルがディレクトリかもしくは あるユーザーに対してすでに実行アクセス権が設定されている場合のみ実行 (X)、実行時にユーザー もしくはグループ IDを設定する (s)、sticky bit (t)、そのファイルの所有者での現在のアクセス権 は (u)、そのファイルのグループでの現在のアクセス権は (g)、そのファイルのその他のユーザーでの現在 のアクセス権は (o) で表される。 (従って、`chmod g-s file' は set-group-ID (sgid) ビットを削除する。 `chmod ug+s file' は suid そして sgid ビットの両方を設定するが、 `chmod o+s file' は何もしない。) POSIX では `sticky bit' について記述していない。 その名前は本来の意味から来ている: プログラムコードをスワップ上に維持する。 最近は、ディレクトリに設定されている場合、ファイルの所有者とディレクトリの所有者だけが そのディレクトリからファイルを削除できることを意味する。 (全ユーザーが書き込みアクセス権を持つ /tmp のようなディレクトリでこれはごく普通に使われている。) chmod コマンドがシンボリックリンクのアクセス権を変更することは決してない。なぜなら、 chmod システムコールはシンボリックリンクのアクセス権を変更することができないからである。 シンボリックリンクのアクセス権は決して使われることがないため、このことは問題ではない。 しかし、 chmod コマンドは引数にシンボリックリンクが指定された場合、各々についてそれが指しているファイルの アクセス権を変更する。それに対して、 chmod コマンドは再帰的にディレクトリを移動しながら処理している時に見つけたシンボリックリンク は無視する。
-R
ディレクトリやそこに含まれるもののアクセス権を再帰的に変更する。
-c, --changes
実際にアクセス権の変更があった file それぞれについての動作を詳細に表示する。
-f, --silent, --quiet
アクセス権を変更できなかったファイルについてのエラーメッセージを出力しない。
-v, --verbose
全ての file について変更した、もしくはしなかったという動作を詳細に表示する。
-R, --recursive
ディレクトリやそこに含まれるもののアクセス権を再帰的に変更する。
--reference=file
明示的に mode を指示する代わりに、参照用に指定した file のグループを使う。
--help
標準出力に使用方法のメッセージを出力して正常終了する。
--version
標準出力にバージョン情報を出力して正常終了する。
--
オプションリストを終了する。
ファイルのアクセス権は内部的に 16 ビットの整数で保持されている。 シンボルでアクセス権を指定する代わりに、 これから変更するアクセス権の内部表現に対応した 8 進数 (基数 8) を使って指定することができる。 この数値は常に 8 進数として扱われる; C 言語のように数値の先頭に 0 を付加する必要はない。 mode に 0055 と指定するのと 55 と指定するのは同じである。 数値モードによる指定は、シンボルモードで指定するより大抵の場合短くすむが、 アクセス権を絶対値で指定する。 mode の各数字により、以下で示すようなアクセス権のグループを選択する。 左側の省略された数値は 0 として扱われる。 アクセス権を組み合わせるには、 各数字の OR をとるか各数字を合計すればよい。
特別なアクセス権
1000 プログラムコードをスワップに維持 2000 実行時にグループ ID を設定 4000 実行時にユーザー ID を設定
同じ UID のユーザー (u+)
100 実行 200 書き込み 400 読み込み
同じグループ (g+)
10 実行 20 書き込み 40 読み込み
その他のユーザー (o+)
1 実行 2 書き込み 4 読み込み
変数 LANG, LC_ALL, LC_CTYPE, LC_MESSAGES が通常の意味を持つ。
POSIX 1003.2 では -R オプションのみが必須である。その他のオプションを使用すると 互換性がないかもしれない。この標準では 't' の許可ビットについて説明していない。 この標準では chmod が suid や sgid ビットのクリアもしくは設定の拒絶での 一貫性を維持するべきかどうかについてをとり決めていない。たとえば、すべての実行ビットが クリアされる場合に chmod が `s' ビットをどうするかまったくとり決めていない。
ここまでのところでディレクトリに対する `t' ビットの使い方を説明した。 いろいろなシステムでは、他の意味のないモードビットの組合せに特別な意味を与えている。 特に、Linux は System V 系 (System V Interface Definition (SVID) Version 3 を 参照) に倣って、グループ実行許可を持たないファイルの sgid ビットに、 そのファイルが強制ロック (mandatory locking) の対象であることを示させている。 詳細については /usr/src/linux/Documentation/mandatory.txt ファイルを参照。
このページでは fileutils-4.1 パッケージでの chmod コマンドについて説明している。 その他のバージョンでは少し違いがあるかもしれない。 修正や追加は aeb@cwi.nl, aw@mail1.bet1.puv.fi, ragnar@ragnar-hojland.com 宛てにメールで連絡してほしい。 プログラムのバグについては bug-fileutils@gnu.org へ報告してほしい。