【 chmod 】 ファイルモードを変更する 【 Linuxコマンドまとめ 】 | Linux Fan

【 chmod 】 ファイルモードを変更する 【 Linuxコマンドまとめ 】

2018年8月2日

「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)