「Linuxコマンドまとめ」カテゴリでは、Linuxのコマンドについて、基本的な実行例とオプションを分かりやすくまとめます。
「chmod」は、ファイルモードの変更を行うコマンドです。
ファイルの所有者や所有グループとあわせて設定することで、ファイルやディレクトリのパーミッション(アクセス権)を設定できます。
chmodコマンドの基本的な使い方
chmodコマンドの基本書式は、以下の通りです。
chmod [オプション] ファイルモード ファイルパス [...]
chmodコマンドの主なオプション
- -R
- 指定したディレクトリと、それより下にあるファイルやディレクトリのファイルモードをすべて変更(再帰的に変更)します。
- -v
- 処理内容を詳しく出力します。
- -f
- ほとんどのエラーメッセージを出力しません。
- -c
- ファイルモードが変更された場合のみ、詳細を出力します。
- –reference=ファイル
- 指定したファイルと同じモードに設定します。
「ファイルモード」と「パーミッション」
「chmod」コマンドを使うには、「ファイルモード」と「パーミッション」について理解しておく必要があります。
以下のページで詳しく解説しているので、参考にしてください。
chmodコマンドによるパーミッションの設定
chmodコマンドを使ったパーミッションの指定方法には、「テキストによる指定」と「数字による指定」があります。
テキストによるパーミッションの指定
テキストによるパーミッションの指定は、次の書式で実行します。
chmod 対象=パーミッション ファイルパス
「対象」には以下を指定できます。複数の対象を並べて指定することもできます。
- u
- 所有者(user)
- g
- グループ(group)
- o
- その他のユーザー(other)
- a
- 上記すべて(all)
「パーミッション」には以下を指定できます。複数のパーミッションを並べて指定することもできます。
- r
- 読み出し許可
- w
- 書き込み許可
- x
- 実行許可
- X
- 対象がディレクトリなら実行許可
- s
- SETUIDもしくはSETGIDビット
- t
- STICKYビット
たとえば、「testfile」に設定されている「グループ」のパーミッションを「rw-」に変更したいなら、以下のように実行します。
$ chmod g=rw testfile
$ ls -l testfile
-rw-rw-r-- 1 lintaro lintaro 0 8月 1 00:33 testfile
以下は、「testfile」に設定されている「グループ」と「その他のユーザー」のパーミッションを「—」に変更する例です。
$ chmod go= testfile
$ ls -l testfile
-rw------- 1 lintaro lintaro 0 8月 1 00:33 testfile
このように、「=」の後ろに何も書かなければ「—」となります。
テキストによるパーミッションの追加
パーミッションを設定しなおすのではなく、パーミッションを追加するには「=」ではなく「+」を使って以下のように実行します。
chmod 対象+モード ファイルパス
以下は、「testfile.sh」のパーミッションとして、「すべてのユーザー」に「読み出し権限」「実行権限」を追加する例です。
$ chmod a+rx testfile.sh
$ ls -l
-rwxr-xr-x 1 lintaro lintaro 0 8月 1 00:42 testfile.sh
テキストによるパーミッションの削除
パーミッションを削除するには、「–」を使って以下のように実行します。
chmod 対象-モード ファイルパス
以下は、「testfile.sh」のパーミッションから、「他のユーザー」の「実行権限」を削除する例です。
$ chmod o-x testfile.sh
$ ls -l testfile.sh
-rwxr-xr-- 1 lintaro lintaro 0 8月 1 00:42 testfile.sh
数字によるパーミッション指定
数字を使ってパーミッションを指定することもできます。
chmod 数字 ファイルパス
数字は3桁もしくは4桁で指定します。まずは3桁で指定する方法を見ていきましょう。各桁は、次のように所有者、グループ、その他のユーザーのパーミッションを表します。
- 1桁目
- 所有者のパーミッション
- 2桁目
- グループのパーミッション
- 3桁目
- その他のユーザーのパーミッション
各桁の数字は0から7までのいずれかになります。以下に示す、パーミッションごとの数値を足し合わせたものを指定します。
- 4
- 読み出し許可
- 2
- 書き込み許可
- 1
- 実行許可
たとえば、全てを許可するなら「4+2+1」で「7」を指定します。「読み出し許可」と「実行許可」を設定するなら「4+1」で「5」です。
以下は、「testfile」のパーミッションとして、所有者に「読み出し許可(4)」と「書き込み許可(2)」、グループおよびその他のユーザーに「読み出し許可(4)」を設定する例です。
chmod 644 testfile
以下は、「testfile.sh」のパーミッションとして、所有者に全ての権限(7)を、グループおよびその他のユーザーに「読み出し許可(4)」と「実行許可(1)」を設定する例です。
chmod 755 testfile.sh
なお、以上の3桁の前に1桁付け足して、4桁で指定することもできます。この場合、最初の1桁は以下の各数字を足し合わせたものを指定します。
- 4
- SETUID
- 2
- SETGID
- 1
- スティッキービット
複数のファイルやディレクトリのファイルモードを一括して変更する方法
「-R」オプションを使う方法
「-R」オプションを使うことで、引数に指定したディレクトリパス以下のファイルやディレクトリのパーミッションをまとめて(再帰的に)設定できます。
以下は、ディレクトリ「testdir」と、それより下位のファイルやディレクトリのパーミッションとして、「グループ」の「書き込み許可」を追加する例です。
chmod -R g+w testdir/
以下は、ディレクトリ「testdir」と、それより下位のファイルやディレクトリのパーミッションを、ディレクトリならば所有者のパーミッションを「rwx」、グループとその他のユーザーのパーミッションを「r-x」とし、ディレクトリ以外なら所有者のパーミッションを「rw-」、グループとその他のユーザーのパーミッションを「r–」に設定する例です。
chmod -R u=rwX,go=rX testdir/
「find」コマンドを使う方法
findコマンドの「-exec」オプションにchmodを指定する方法もよく使われます。
以下は、ディレクトリ「testdir」以下から名前が「*.sh」に一致するファイルを探し、ファイルモードを「775」つまり「rwxrwxr-x」に設定する例です。
find testdir -type f -name '*.sh' -exec chmod 775 {} +
chmodのヘルプ
使用法: chmod [OPTION]... MODE[,MODE]... FILE... または: chmod [OPTION]... OCTAL-MODE FILE... または: chmod [OPTION]... --reference=RFILE FILE... Change the mode of each FILE to MODE. With --reference, change the mode of each FILE to that of RFILE. -c, --changes verbose と似ているが、変更があるもののみ出力する -f, --silent, --quiet ほとんどのエラーメッセージを抑止する -v, --verbose 各ファイルを処理する毎に診断メッセージを表示する --no-preserve-root '/' を特別扱いしない (既定) --preserve-root '/' に対する再帰的な操作を失敗させる --reference=RFILE MODE 値を指定する代わりに RFILE の MODE を使用する -R, --recursive ファイルとディレクトリを再帰的に変更する --help この使い方を表示して終了する --version バージョン情報を表示して終了する 各 MODE は '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+' の形式です. GNU coreutils online help: <http://www.gnu.org/software/coreutils/> chmod の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。 Full documentation at: <http://www.gnu.org/software/coreutils/chmod> or available locally via: info '(coreutils) chmod invocation'
chmodのマニュアル
CHMOD(1) ユーザーコマンド CHMOD(1) 名前 chmod - ファイルのモードビットを変更する 書式 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 ビットをクリアします。 他にも追加の制限が あり、MODE や RFILE の 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> に連絡してください。 完全 な文書は <http://www.gnu.org/software/coreutils/chmod> にあります。 ローカルでは info '(coreutils) chmod invocation' で参照できます。 作者 作者 David MacKenzie および Jim Meyering。 著作権 Copyright © 2016 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. 関連項目 chmod(2) chmod の完全なマニュアルは Texinfo マニュアルとして整備されている。も し、 info および chmod のプログラムが正しくインストールされているなら ば、コマンド info chmod を使用すると完全なマニュアルを読むことができるはずだ。 GNU coreutils 2016年2月 CHMOD(1)
コメント