> Linux Reviews > man >

chmod


  1. chmod.1.man
  2. chmod.2.man


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

名前
書式
説明
POSIX オプション
GNU オプション
GNU 標準オプション
数値モード
環境変数
準拠
非標準モード
注意

This document was created by man2html using the manual pages.
Time: 17:38:11 GMT, October 23, 2013

2. chmod.2.man

Manpage of CHMOD

CHMOD

Section: Linux Programmer's Manual (2)
Updated: 2010-09-26
Index Return to Main Contents
 

名前

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

書式

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);
int fchmod(int fd, mode_t mode);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

fchmod():

_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
|| /* glibc 2.12 以降: */ _POSIX_C_SOURCE >= 200809L
 

説明

これらのシステムコールはファイルのアクセス許可 (permission) を変更する。 システムコール間の違いは、ファイルの指定の仕方だけである。
*
chmod() は、 path で指定されたパス名を持つファイルの許可を変更する。 path がシンボリック・リンクの場合は、リンクの展開が行われる。
*
fchmod() は、オープンされたファイルディスクリプタ fd により参照されるファイルの許可を変更する。

新しいファイル許可は mode で指定される。 mode は、以下に示す値の 0 個以上の OR (論理和) をとって作成される ビットマスクである。

S_ISUID (04000)
set-user-ID (execve(2) 時にプロセスの実効ユーザ ID にセットされる)
S_ISGID (02000)
set-group-ID (以下の場合に (execve(2) 実行時にプロセスの実効グループ ID にセットされる、 強制ロック (mandatory locking) を行う (fcntl(2) の説明を参照)、 新しいファイルのグループとして親ディレクトリと同じものを使う (chown(2) と (mkdir(2) の説明を参照)
S_ISVTX (01000)
スティッキー・ビット (sticky bit) (削除制限フラグ、 unlink(2) の説明を参照)
S_IRUSR (00400)
所有者による読み取り
S_IWUSR (00200)
所有者による書き込み
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(7) も見よ)。
EFAULT
path が割り当てられたアドレス空間外を指している。
EIO
I/O エラーが発生した。
ELOOP
path を解決する際に遭遇したシンボリック・リンクが多過ぎる。
ENAMETOOLONG
path が長過ぎる。
ENOENT
ファイルが存在しない。
ENOMEM
カーネルに十分なメモリがない。
ENOTDIR
パス名の構成要素がディレクトリではない。
EPERM
実効 UID がファイルの所有者と一致せず、プロセスに特権がない (Linux では CAP_FOWNER ケーパビリティを持たない)。
EROFS
ファイルが読み込み専用 (read only) のファイル・システム上にある。

fchmod() で一般的なエラーを挙げる:

EBADF
ファイル・ディスクリプター fd が有効でない。
EIO
上記を参照。
EPERM
上記を参照。
EROFS
上記を参照。
 

準拠

4.4BSD, SVr4, POSIX.1-2001.  

関連項目

chown(2), execve(2), fchmodat(2), open(2), stat(2), path_resolution(7)


 

Index

名前
書式
説明
返り値
エラー
準拠
関連項目

This document was created by man2html using the manual pages.
Time: 17:38:11 GMT, October 23, 2013

SVENSKA - cs - da - SVENSKA - SVENSKA - SVENSKA - nl - pl - ro - SVENSKA