【chmodコマンド】ファイル・ディレクトリの権限(パーミッション)の確認と変更方法を初心者にもわかるように解説

chmod

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、Linuxコマンドの1つであるchmodコマンドの使い方(ファイル・ディレクトリの権限の確認と変更)について解説していきます。

chmodコマンドとは?

chmodコマンドとは「change mode」の略で、ファイルやディレクトリの権限を変更するのに使用されるLinuxコマンドです。

chmod(change mode、チェンジモード)は、

UNIXおよびUNIX系オペレーティングシステムにおけるシェルコマンドの一種である。

ファイルやディレクトリのファイルモード(ファイルパーミッションなど)を変更するのに使われる。

引用元: chmodとは何? わかりやすく解説 Weblio辞書

LinuxOSやMacOSで「permission denied」(アクセス拒否)のエラーが発生する場合は、

ファイルやディレクトリのファイルやディレクトリの読み・書き・実行のいずれかのPermission(パーミッション)を解放することで、パーミッション・エラーを解決できることがほとんどです。

ファイル・ディレクトリの権限(パーミッション)の確認方法と読み方

それでは、まずファイル・ディレクトリの権限(パーミッション)の確認方法と読み方について解説します。

ファイルやディレクトリの権限(パーミッション)は「ls」コマンドで確認することができます。

「 ls -l 」または「 ls -al 」で実行すると、次のように情報が表示されます。

ls -al

# 実行結果
drwxr-xr-x   7 robotama  staff    224  9  8 00:55 .npm
drwxr-xr-x   5 robotama  staff    160 12  1  2021 .pyenv
-rw-r--r--   1 robotama  staff     67  8  3  2021 .gitconfig

ファイル・ディレクトリの権限(パーミッション)を確認するときに注目してほしいのは、

この実行結果の「 drwxr-xr-x 」などの先頭の部分です。

この文字列は、必ず10文字で、それぞれ次のような意味を持っています。

最初の1文字目はファイル種別を表しています。

2文字目から4文字目はファイルの所有者に対する権限設定を表し、

5文字目から7文字目はファイルの所有グループに対する権限設定を表し、

8文字目から10文字目はその他に対する権限設定を表しています。

上記のような『文字の場所ごとの意味』を表にすると、次のようになります。

文字の場所意味
1文字目ファイル種別
2~4文字目までの3文字「所有者」の権限設定
5~7文字目までの3文字「所有グループ」の権限設定
8~10文字までの3文字「その他」に対する権限設定
【 文字の場所ごとの意味・識別表 】

それぞれこの後、解説していきます。

最初の1文字目で、ファイル種別の識別をする

まず最初の1文字目で、ファイルかディレクトリかなどの識別をします。

1文字目が「 – 」だったらファイル、「 d 」だったらディレクトリ、「 l 」だったらシンボリックリンクを表しています。

種別意味
ファイル
dディレクトリ
lシンボリックリンク
【 1行目のファイル種別の識別表 】

2~10文字目の権限(パーミッション)設定を識別する

2~10文字目までの9文字は、「所有者」と「所有グループ」と「その他」に対する権限設定になります。

上記の3つのカテゴリーに対して「r」(read: 読み取り)「w」(write: 書き込み)「x」(execution: 実行)について、

それぞれ許可するかどうかを設定することができます。

そして、先述のとおり、2~4文字目は「所有者」、5~7文字目は「所有グループ」、8~10文字目は「その他」に対する権限設定の情報となっています。

また、これらは「 rwx 」の順に並んでおり、権限が許可されていない場合は、「 – 」で表示されるようになっています。

2~10文字目での「 – 」は、1文字目の「 – 」とは違う意味になるので注意が必要です。

1文字目の「 – 」はファイルを意味します。

権限の設定項目(mode)意味
r読み取り許可
w書き込み許可
x実行許可
拒否(権限なし)
【 権限(パーミッション)設定の識別表 】

ファイル・ディレクトリの権限情報を実際に読み解く

これらの基本を理解した上で、最初に説明したファイル・ディレクトリの権限情報を確認していきましょう。

ls -al

# 実行結果
drwxr-xr-x   7 robotama  staff    224  9  8 00:55 .npm
drwxr-xr-x   5 robotama  staff    160 12  1  2021 .pyenv
-rw-r--r--   1 robotama  staff     67  8  3  2021 .gitconfig

上記の場合、「 drwxr-xr-x 」と「 -rw-r–r– 」の2つの権限設定の状態を確認できます。

「 drwxr-xr-x 」の権限設定を読み解く

1行目は「 d 」なので「ファイル種別」が「ディレクトリ」であり、

2-4行目は「 rwx 」 なので「所有者」には「読み取り」と「書き込み」と「実行」の権限があり、

5-7行目は「 r-x 」なので「所有グループ」には「読み取り」と「実行」の権限があり、

8-10行目は「 r-x 」なので「その他」には「読み取り」と「実行」の権限がある。

と言うことが読み解けます。

「 -rw-r–r– 」の権限設定を読み解く

1行目は「 – 」なので「ファイル種別」が「ファイル」であり、

2-4行目は「 rw- 」なので「所有者」には「読み取り」と「書き込み」の権限があり、

5-7行目は「 r– 」なので「所有グループ」には「読み取り」の権限だけがあり、

8-10行目は「 r– 」なので「その他」には「読み取り」の権限だけがある。

と言うことが読み解けます。

chmodコマンドでファイル・ディレクトリの権限(パーミッション)を変更する

ファイル・ディレクトリの権限設定の読み方が理解できたところで、

次にchmodコマンドによる権限(パーミッション)の変更について見ていきましょう。

chmodコマンドで権限(パーミッション)を変更するには、数値またはアルファベットのどちらかで変更内容を指定します。

数値で指定して権限(パーミッション)を変更する

数値で権限(パーミッション)を指定する場合、数字はどの権限を表すかが決まっているので、

必要な権限分の数値を設定するようにします。

数字と権限設定の関係は、次のとおりです。

mode(数字)mode(アルファベット)権限(mode)
4r読み取り
2w書き込み
1x実行
【 数字とアルファベットの関係表 】

また「所有者」と「所有グループ」と「その他」などの権限設定の対象と、それに対応する桁は決まっています。

ユーザー・グループ何桁目
所有者1桁目
所有グループ2桁目
その他3桁目
【 権限設定の対象と対応する桁 】

数値で指定する基本形は、次のような形になります。

chmod 数値 対象ファイル名

例えば、すべてのユーザー・グループ(対象)に対して権限をすべて解放する場合は、「 chmod 777 fileName.txt 」とします。

他に所有者だけすべての権限を持っており、それ以外はreadonlyにする場合は「 chmod 744 fileName.txt 」とします。

それでは、実際にchmodコマンドの数値指定による権限の解放をCode上で見ていきましょう。

ls -al

### 実行結果 ###
-rw-r--r--    1 robotama  staff   8891 10 10 13:14 chmod.txt

#「w」は所有者にのみ開放されており「x」はどのユーザーにも開放されていない。

# すべてのユーザー・グループに対してすべての権限を解放する
chmod 777 chmod.txt

ls -al

### 実行結果 ###
-rwxrwxrwx    1 yukimuramanase  staff   8908 10 10 16:59 chmod.txt

# すべての権限が開放された!

アルファベットで指定して権限(パーミッション)を変更する

アルファベットで権限(パーミッション)を指定する場合、

「変更を適用するユーザー・グループ」,「変更方法」,「変更する権限の内容」をそれぞれ指定して、

ファイル・ディレクトリの権限を変更します。

「変更を適用するユーザー・グループ」については、次のアルファベットを使って指定します。

アルファベット意味
uユーザー
gグループ
oその他
aすべて
【 変更対象(ユーザー・グループ) 】

「変更方法」については、次のような記号で指定します。

気をつけるべき点は、「 = 」は既存の権限設定からすべて上書きするものであり、「 + 」は既存の設定に追加するものである点です。

変更方法意味
=指定した権限にする(既存の権限設定からすべて上書きする)
+指定した権限を追加する(既存の設定に追加する)
指定した権限を削除する(既存の設定から削除する)
【 権限を変更する方法 】

「変更する権限の内容」については、先述した次の3つになります。

権限の設定項目(mode)意味
r読み取り許可
w書き込み許可
x実行許可
【 権限(パーミッション)設定】

そして、アルファベットで指定する基本形は、次のような形になります。

chmod 変更対象(ユーザー・グループ) 変更方法 変更する権限内容 対象ファイル・ディレクトリ

例えば、所有グループに対してすべての権限を解放する場合は、「 chmod g=rwx chmod.txt 」とします。

それでは、実際にchmodコマンドのアルファベットによる権限の解放をCode上で見ていきましょう。

ls -al

### 実行結果 ###
-rwxrwxrwx    1 robotama  staff   8908 10 10 16:59 chmod.txt

# すべてのユーザー・グループに対して、readOnlyにする
chmod a=r chmod.txt

ls -al

### 実行結果 ###
-r--r--r--    1 robotama  staff   8908 10 10 16:59 chmod.txt

# すべてのユーザー・グループがreadOnlyとなった!

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

参考・引用

  1. chmodとは何? わかりやすく解説 Weblio辞書
  2. Linuxの権限確認と変更(chmod)(超初心者向け)
  3. Linuxコマンド chmod(ファイルやディレクトリのアクセス権を変更する)
  4. アクセス権(パーミッション)の変更 – chmod
  5. 超簡単、Linuxの権限設定!ファイルとディレクトリの権限を確認or変更するには?(chmod)

Linux関連書籍

最近の投稿