chmod(1) ファイルのモードビットを変更する

書式

chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...

説明

このマニュアルページでは GNU バージョンの chmod について説明しています。 chmod は指定されたファイルのモードビット (mode bits) を mode に基いて変更します。 mode は、変更内容の記号表現 (記号モード)か、新しく設定するモードビットの ビットパターンを表す 8 進数 (数値モード) のどちらかで指定します。

記号モードの書式は [ugoa...][[+-=][perms...]...] です。 perms には、rwxXst のうち 0 個以上の文字か、 ugo のいずれか 1 文字を指定します。 コンマで区切って、複数の記号表現を指定することができます。

ugoa の組み合わせで、そのファイルに対するユーザのアクセス権限を制御します。 それぞれ、ファイルの所有者のユーザ (u)、ファイルのグループに属する 所有者以外のユーザ (g)、ファイルのグループに属さない他のユーザ (o)、 全てのユーザ (a) を意味します。 ugoa のどれも指定されなかった場合、a が指定されたのと同じ効果を 持ちますが、umask でセットされているビットは変更されません。

+ 演算子は、各ファイルの現在のファイルモードビットに 指定されたファイルモードビットを追加します。 - を指定すると、指定されたファイルモードビットが削除されます。 = を指定すると、指定されたファイルモードビットが追加され、 指定されていないビットが削除されます。 ただし、指定されていないビットのうち、ディレクトリの set-user-ID と set-group-ID は影響を受けません。

文字 rwxXst で設定対象のユーザのファイルモードビットを選択します: 読み出し許可 (r)、書き込み許可 (w)、 実行許可 (もしくはディレクトリの検索許可) (x)、 ファイルがディレクトリの場合もしくはファイルが 実行許可/検索許可 (ただし、ファイルがディレクトリの場合か、 あるユーザに対してすでに実行許可がある場合のみ) (X)、 実行時にユーザ ID もしくはグループ ID を設定する (s)、 削除制限 (restricted deletion) フラグもしくはスティッキービット (t)。 これらの文字を一つ以上指定する代わりに、 文字 ugo のいずれか一つだけを指定することもできます: ファイルを所有するユーザに付与されたアクセス許可 (u)、 ファイルのグループの所有者以外のメンバーに付与されたアクセス許可 (g)、 前記のどちらでもないユーザに付与されたアクセス許可 (o)。

数値モードでは 1 桁から 4 桁の 8 進数 (0-7) で指定します。 その値は、ビットを値 4, 2, 1 に対応させたものを加算することで得られます。 省略された桁は先頭にある 0 とみなされます。 1 桁目では、set-user-ID (4)、set-group-ID (2)、削除制限/スティッキー (1) といった属性を指定します。 2 桁目では、ファイルを所有するユーザに対するアクセス許可を指定します: 読み出し許可 (4)、書き込み許可 (2)、実行許可 (1)。 3 桁目ではファイルのグループの所有者以外のメンバーに対するアクセス許可を 指定します: 値は 2 桁目と同じ。 4 桁目ではファイルのグループに属さないユーザに対するアクセス許可を 指定します: 値は 2 桁目と同じ。

chmod はシンボリックリンクのアクセス許可を変更することはありません。 chmod システムコールがシンボリックリンクのアクセス許可を変更できないからです。 シンボリックリンクのアクセス許可が使われることは決してないため、 これは問題にはなりません。 しかし、chmod は、コマンドラインで列挙されたシンボリックリンク それぞれについて、シンボリックリンクが指しているファイルのアクセス許可を 変更します。その一方で、chmod は再帰的にディレクトリを辿っている途中で 見つけたシンボリックリンクは無視します。

SETUID ビットと SETGID ビット

chmod は、ファイルのグループ ID がユーザの実効グループ ID とも ユーザの追加グループ ID とも一致せず、 ユーザが適切な特権を持っていない場合は、 通常のファイルの set-group-ID ビットをクリアします。 他にも追加の制限があり、MODERFILE の set-user-ID ビットや set-group-ID ビットが無視される場合があります。どのような動作になるかは 裏で呼び出される chmod システムコールのポリシーや機能に依存します。 疑わしい点がある場合は、動作しているシステムの動作を確認して下さい。

chmod は、明示的に指定した場合を除き、ディレクトリの set-user-ID ビットと set-group-ID ビットを保持します。 これらのビットの設定や解除を行うには、 記号モードで u+s and g-s のように指定します。 また、数値モードで対応するビットを指定することでビットの設定ができます (解除はできません)。

削除制限フラグとスティッキービット

削除制限フラグ (restricted deletion flag) とスティッキービット (sticky bit) は 1 ビットの情報で、ファイル種別によりその意味が変わります。 ディレクトリの場合、このビットがセットされていると、 非特権ユーザは、自分が所有者のファイルやディレクトリ以外は そのディレクトリにあるファイルの削除や名前変更ができなくなります。 この機能はディレクトリの 削除制限フラグ と呼ばれ、 /tmp などの誰でも書き込みできるディレクトリでは一般的に使われています。 いくつかの古いシステムでは、通常のファイルでこのビットが設定されている場合、 そのプログラムのテキストイメージがスワップデバイス上に保持され、 実行時により早くファイルがロードできるようになります。 この機能は スティッキービット と呼ばれます。

オプション

各 FILE のモードを MODE に変更します。 --reference を指定した場合は、各 FILE のモードを RFILE のものに変更する。

-c, --changes
verbose モードと同様だが、変更が行われた場合にのみ出力する
-f, --silent, --quiet
ほとんどのエラーメッセージの出力を抑制する
-v, --verbose
処理した各ファイルについて診断メッセージを出力する
--no-preserve-root
'/' を特別扱いしない (デフォルト)
--preserve-root
'/' に対する再帰的な操作を失敗させる
--reference=RFILE
MODE の値ではなく RFILE のモードを使用する
-R, --recursive
ファイルとディレクトリを再帰的に変更する
--help
この使い方を表示して終了する
--version
バージョン情報を表示して終了する

各 MODE は '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+' の形式です。

GNU coreutils のオンラインヘルプ: <http://www.gnu.org/software/coreutils/> chmod の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。 完全な文書を参照する場合は info coreutils 'chmod invocation' を実行してください。

作者

作者 David MacKenzie および Jim Meyering。

著作権

Copyright © 2013 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.