こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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 | シンボリックリンク |
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) |
---|---|---|
4 | r | 読み取り |
2 | w | 書き込み |
1 | x | 実行 |
また「所有者」と「所有グループ」と「その他」などの権限設定の対象と、それに対応する桁は決まっています。
ユーザー・グループ | 何桁目 |
---|---|
所有者 | 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!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!
参考・引用
- chmodとは何? わかりやすく解説 Weblio辞書
- Linuxの権限確認と変更(chmod)(超初心者向け)
- Linuxコマンド chmod(ファイルやディレクトリのアクセス権を変更する)
- アクセス権(パーミッション)の変更 – chmod
- 超簡単、Linuxの権限設定!ファイルとディレクトリの権限を確認or変更するには?(chmod)