[UNIXコマンド]chmodコマンドの基本を理解する

先生

ファイルやディレクトリに対する権限(パーミッション/アクセス権)の変更ができるchmodコマンドについて紹介します。

「chmod」コマンドとは

chmodコマンドは、LinuxやmacOSなどのUnix系OSでファイルやディレクトリに対する権限(パーミッション/アクセス権)を変更するコマンドです。

chmodコマンドの使い方まとめ

先にまとめます。

# -- 基本的な使い方 --
# ファイルやディレクトリの権限を変更する
chmod <権限> <ファイルパスorディレクトリパス>

# 権限を確認する
ls -l <ファイルパスorディレクトリパスor無し>

# 権限変更:記号による指定例

chmod u+x <ファイルパスorディレクトリパス>

chmod g-w <ファイルパスorディレクトリパス>

chmod o=r <ファイルパスorディレクトリパス>

chmod a+r <ファイルパスorディレクトリパス>

chmod u=rwx,g=r,o=r <ファイルパスorディレクトリパス>

# 権限変更:数字による指定例
chmod 742 <ファイルパスorディレクトリパス>

# -- オプション --
# サブディレクトリ配下を再帰的に変更
chmod -R <権限> <ディレクトリパス>

# 変更内容を表示
chmod -v <権限> <ファイルパスorディレクトリパス>

# 変更があったファイルのみ変更内容を表示
chmod -c <権限> <ファイルパスorディレクトリパス>

chmodコマンドの基本的な使い方

chmodコマンドでは、ファイル・ディレクトリの権限変更ができます。

# ファイルやディレクトリの権限を変更する
chmod <権限> <ファイルパスorディレクトリパス>

実行例

root@localhost:~$ chmod 754 file1.txt
root@localhost:~$

以降で権限について説明します。

権限とは

読み取り、書き込み、実行の権限のことを主に指します。適切に設定することで、想定外にファイル内容が変更されるなど事象を防ぐことができます。

またディレクトリやファイルには、権限の他に所有者と所有グループも設定されます。この所有者と所有グループ、その他のユーザーに対して権限を設定することができます。

所有者と所有グループについては、chownコマンドで変更ができます。詳細は別の記事で紹介します。

権限の確認方法

権限の設定はlsコマンドの-lオプションで見ることができます。

# 権限を確認する
ls -l <ファイルパスorディレクトリパスor無し>

実行例

root@localhost:~$ ls -l
total 3004
drwxr-xr-x 2 root root    4096 Mar 30 02:02 dir1
-rwxr-xr-- 1 root root 3072000 Mar 29 13:15 file1.txt
root@localhost:~$

「rwxr-xr-x」の部分が権限を示すところです。各記号は下記の意味です。

記号意味備考
r読み取り権限、「-」の場合、読み取り権限なし「read」の「r」
w書き込み権限、「-」の場合、読み取り権限なし「write」の「w」
x実行権限、「-」の場合、読み取り権限なし「execute」の「x」

また、各位置にも下記のような意味があります。

左からの桁番目意味
1桁目所有者の読み取り権限
2桁目所有者の書き込み権限
3桁目所有者の実行権限
4桁目所有グループの読み取り権限
5桁目所有グループの書き込み権限
6桁目所有グループの実行権限
7桁目その他ユーザの読み取り権限
8桁目その他ユーザの書き込み権限
9桁目その他ユーザの実行権限

つまり、記号と位置を見れば、どのユーザーに対してどの権限が付与されているかがわかります。

例えば「rwxr-xr–」は、

  • 所有者:読み取り・書き込み・実行の権限あり
  • 所有グループ:読み取り・実行の権限あり
  • その他ユーザー:読み取りの権限あり

となります。

これらの権限は基本的には記号での指定と数字での指定の2つの方法で設定することできます。

記号による指定方法

記号での指定例です。

# 所有者に実行権限を追加
chmod u+x <ファイルパスorディレクトリパス>

# 所有グループから書き込み権限を削除
chmod g-w <ファイルパスorディレクトリパス>

# その他ユーザを読み取り権限のみに変更
chmod o=r <ファイルパスorディレクトリパス>

# 所有者・所有グループ・その他ユーザ全てに読み込み権限を追加
chmod a+r <ファイルパスorディレクトリパス>

# 所有者に全ての権限を付与し、所有グループとその他ユーザは読み取り権限のみに変更
chmod u=rwx,g=r,o=r <ファイルパスorディレクトリパス>

rwx以外の記号は下記のような意味を持ちます。

記号意味備考
u所有者「user」の「u」
g所有グループ「group」の「g」
oその他ユーザ「other」の「o」
a全てのユーザ(所有者・所有グループ・その他ユーザ)「all」の「a」
+指定した権限の追加
指定した権限の削除
=指定した権限のみに変更

数字による指定方法

数字での指定例です。

# 所有者以外に書き込み権限を付与しない
chmod 755 <ファイルパスorディレクトリパス>

# 全てのユーザーに実行権限を付与せず、所有者以外は読み取り権限のみ付与する
chmod 644 <ファイルパスorディレクトリパス>

# 所有者に全権限、所有グループに読み取り権限・実行権限、その他ユーザに読み取り権限のみを付与する
chmod 754 <ファイルパスorディレクトリパス>

# 所有者に読み込み・実行権限を付与し、所有者以外のユーザにはどの権限も付与しない
chmod 600 <ファイルパスorディレクトリパス>

3つの数字に対する定義があり、それを加算することで権限を表現しています。

数字意味
4読み取り権限
2書き込み権限
1実行権限

加算すると下記の例のような意味になります。

数字例意味
7 (=4+2+1)全権限
6 (=4+2)読み取り権限+書き込み権限
5 (=4+1)読み取り権限+実行権限

また3桁で表現されていますが、それぞれ誰に対する権限なのかを表現しています。

左からの桁番目意味
1桁目所有者
2桁目所有グループ
3桁目その他ユーザ

つまり、数字と位置によって権限を表現しています。

chmodコマンドのオプション

いくつか便利なオプションがあります。

オプション詳細
-Rサブディレクトリ配下を再帰的に変更する
-v詳細を表示する
-c変更があったもののみ詳細を表示する

以降で各オプションの使い方について紹介します。

-R:再帰的に変更

サブディレクトリがある場合、その配下のファイルやディレクトリに対して再帰的に権限を変更します。

# サブディレクトリ配下を再帰的に変更
chmod -R <権限> <ディレクトリパス>

実行例

root@localhost:~$ ls -lR --->権限変更前の状態を確認
.:
total 3004
drwxrwxrwx 3 root root    4096 Apr  1 16:49 dir1
-rwxrwxrwx 1 root root 3072000 Mar 29 13:15 file1.txt

./dir1:
total 3004
drwxrwxrwx 2 root root    4096 Apr  1 16:50 dir2
-rwxrwxrwx 1 root root 3072000 Mar 29 13:15 file2.txt

./dir1/dir2:
total 3000
-rwxrwxrwx 1 root root 3072000 Mar 29 13:15 file3.txt
root@localhost:~$ 
root@localhost:~$ chmod -R 755 ./
root@localhost:~$ 
root@localhost:~$ ls -lR --->権限変更後の状態を確認
.:
total 3004
drwxr-xr-x 3 root root    4096 Apr  1 16:49 dir1
-rwxr-xr-x 1 root root 3072000 Mar 29 13:15 file1.txt

./dir1:
total 3004
drwxr-xr-x 2 root root    4096 Apr  1 16:50 dir2
-rwxr-xr-x 1 root root 3072000 Mar 29 13:15 file2.txt

./dir1/dir2:
total 3000
-rwxr-xr-x 1 root root 3072000 Mar 29 13:15 file3.txt
root@localhost:~$ 

-v:詳細情報を表示

コマンド実行時に変更した情報を表示させることができます。

操作ログを残したい時などには使っていきましょう。

# 変更内容を表示
chmod -v <権限> <ファイルパスorディレクトリパス>

使用例

root@localhost:~$ chmod -v 744 file1.txt 
mode of 'file1.txt' changed from 0755 (rwxr-xr-x) to 0744 (rwxr--r--)
root@localhost:~$

-c:詳細情報を表示

権限が変更された対象の詳細情報を表示します。

-vオプションと同様に、操作ログを残したい時などには使っていきましょう。

# 変更があったファイルのみ変更内容を表示
chmod -c <権限> <ファイルパスorディレクトリパス>

使用例

root@localhost:~$ ls -lR
.:
total 3004
drwxr-xr-x 3 root root    4096 Apr  1 16:49 dir1
-rwxrwxrwx 1 root root 3072000 Mar 29 13:15 file1.txt

./dir1:
total 3004
drwxrwxrwx 2 root root    4096 Apr  1 16:50 dir2
-rwxrwxrwx 1 root root 3072000 Mar 29 13:15 file2.txt

./dir1/dir2:
total 3000
-rwxr-xr-x 1 root root 3072000 Mar 29 13:15 file3.txt
root@localhost:~$ 
root@localhost:~$ chmod -cR 755 ./
mode of './dir1/dir2' changed from 0777 (rwxrwxrwx) to 0755 (rwxr-xr-x)
mode of './dir1/file2.txt' changed from 0777 (rwxrwxrwx) to 0755 (rwxr-xr-x)
mode of './file1.txt' changed from 0777 (rwxrwxrwx) to 0755 (rwxr-xr-x)
root@localhost:~$ 

まとめ

以上です。今回はchmodコマンドの基本的な使用方法と権限について紹介しました。

途中で出てきた所有者・所有グループの変更ができるchownコマンドについては別の記事で紹介します。