chmod
1. chmod.1.man
Manpage of CHMOD
CHMOD
Section: User Commands (1)Updated: 18 June 2002
Index Return to Main Contents
名前
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 コマンドは再帰的にディレクトリを移動しながら処理している時に見つけたシンボリックリンク は無視する。
POSIX オプション
- -R
- ディレクトリやそこに含まれるもののアクセス権を再帰的に変更する。
GNU オプション
- -c, --changes
- 実際にアクセス権の変更があった file それぞれについての動作を詳細に表示する。
- -f, --silent, --quiet
- アクセス権を変更できなかったファイルについてのエラーメッセージを出力しない。
- -v, --verbose
- 全ての file について変更した、もしくはしなかったという動作を詳細に表示する。
- -R, --recursive
- ディレクトリやそこに含まれるもののアクセス権を再帰的に変更する。
- --reference=file
- 明示的に mode を指示する代わりに、参照用に指定した file のグループを使う。
GNU 標準オプション
- --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 へ報告してほしい。
Index
This document was created by man2html using the manual pages.
Time: 11:41:29 GMT, February 18, 2010
2. chmod.2.man
Manpage of CHMOD
CHMOD
Section: Linux Programmer's Manual (2)Updated: 2004-06-23
Index Return to Main Contents
名前
chmod, fchmod - ファイルのモードを変更する書式
#include <sys/types.h>#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
説明
path で与えられたファイル、 または fildes で参照されるファイルのモードを変更する。モードは、次の各モードの or をとったもので指定する:
-
- S_ISUID
- 04000 実行時のセット・ユーザー・ID (set user ID)
- S_ISGID
- 02000 実行時のセット・グループ・ID (set group ID)
- S_ISVTX
- 01000 スティッキー (sticky) ビット
- S_IRUSR
- 00400 所有者 (owner) による読み取り (read)
- S_IWUSR
- 00200 所有者による書き込み (write)
- S_IXUSR
- 00100 所有者による実行 (execute) / 検索 (search)
- S_IRGRP
- 00040 グループによる読み取り
- S_IWGRP
- 00020 グループによる書き込み
- S_IXGRP
- 00010 グループによる実行 / 検索
- S_IROTH
- 00004 他人 (others) による読み取り
- S_IWOTH
- 00002 他人による書き込み
- S_IXOTH
- 00001 他人による実行 / 検索
呼び出したプロセスの実効 (effective) UID がファイルの所有者と一致するか、 そのプロセスが特権を持たなければならない (Linux では CAP_FOWNER ケーパビリティ (capability) を持たなければならない)。
呼び出したプロセスに特権がなく (Linux では CAP_FSETID ケーパビリティがなく)、かつファイルのグループ ID が プロセスの実効グループ ID または補助的なグループ ID にマッチしない場合、 S_ISGID ビットはオフにされるが、これによってエラーが返されることはない。
安全のための処置として、 ファイル・システムによっては、ファイルの書き込みを行う時に セット・ユーザー ID とセット・グループ ID ビットと実行ビットが オフにされることがある。 (Linux では、書き込みプロセスが CAP_FSETID ケーパビリティを持っていない場合に、これが起こる。) ファイル・システムの中には、スーパー・ユーザーだけが 特別の意味を持つスティッキー・ビットを設定できるものがある。 スティッキー・ビットとディレクトリに対する セット・ユーザー (グループ)・ID ビットについては、 stat(2) を見よ。
NFS ファイルシステム上では、パーミッションを制限すると、 既にオープンされているファイルに対してすぐに影響が及ぶ。 これはアクセス制御がサーバー上で行われているが、 オープンされているファイルはクライアント側で管理されているためである。 クライアント側でファイル属性のキャッシュが有効になっている場合に、 パーミッションの制限を緩くすると、 他のクライアントに情報が伝わるのが遅れるかもしれない。
返り値
成功すると、0 を返す。失敗すると、-1を返し、 errno に適切な値を設定する。エラー
ファイル・システムによっては他のエラーを返す場合がある。 chmod() で一般的なエラーを以下に挙げる。- EACCES
- パス名の構成要素に検索許可がない (path_resolution(2) も見よ)。
- EFAULT
- path が割り当てられたアドレス空間外を指している。
- EIO
- I/O エラーが発生した。
- ELOOP
- path を解決する際に遭遇したシンボリック・リンクが多過ぎる。
- ENAMETOOLONG
- path が長過ぎる。
- ENOENT
- ファイルが存在しない。
- ENOMEM
- カーネルに十分なメモリがない。
- ENOTDIR
- パス名の構成要素がディレクトリではない。
- EPERM
- 実効 UID がファイルの所有者と一致せず、プロセスに特権がない (Linux では CAP_FOWNER ケーパビリティを持たない)。
- EROFS
- ファイルが読み込み専用 (read only) のファイル・システム上にある。
fchmod() で一般的なエラーを挙げる:
- EBADF
- ファイル・ディスクリプター fildes が有効でない。
- EIO
- 上記を参照。
- EPERM
- 上記を参照。
- EROFS
- 上記を参照。
準拠
4.4BSD, SVr4, POSIX.1-2001.関連項目
chown(2), fchmodat(2), open(2), path_resolution(2), execve(2), stat(2)
Index
This document was created by man2html using the manual pages.
Time: 11:41:30 GMT, February 18, 2010




