chmod 777 <ファイル名/ディレクトリ名>
というコマンドが権限を付与するコマンドであることは初心者のエンジニアの方もご存知かもしれません。
ですが、この777
という数字、具体的にどういう意味なのか、はっきりと理解できていますでしょうか。
「全権限を付与するということは知っている、、、」という方(過去の自分)向けに、Linuxの権限の意味についてまとめました。
パーミッション(権限)について
ls -l
というコマンドを叩くと下記のようにディレクトリ内のファイルを確認することができます。
drwxr-xr-x 2 toshiokun staff 64 3 5 09:25 dir1
-rw-r--r-- 1 toshiokun staff 0 3 5 09:25 file1
-rw-r--r-- 1 toshiokun staff 0 3 5 09:25 file2
右側のdir1
file1
file2
はそれぞれディレクトリ名とファイル名を指していますが、左側のdrwxr-xr-x
は「何のことやら」となっている方もいるかと思います。
実はこのdrwxr-xr-x
の部分が「誰に何の権限を渡しているのか」というパーミッションを表している表記になります。
Linux内のパーミッション(権限)の定義について
パーミッション(権限)には下記のような概念が存在します。
- 誰に
- オーナー
- グループ
- その他のユーザー
- 何に対して
- ファイル
- ディレクトリ
- どの権限を渡すか
- read(読み取り)権限
- write(書き取り)権限
- execute(実行)権限
それぞれについて詳細を説明していきます。
オーナーとグループ(誰に権限を渡すのか)について
ファイルとディレクトリにはそれぞれ「オーナー」と「グループ」が存在します。
「オーナー」は文字通り、対象の所有者のことを指します。
「グループ」についてですが、Linuxのユーザーは「グループ」という単位でひとくくりにすることができます。
ファイルとディレクトリは、オーナーとは別に、グループという単位で与える権限を定義することができるのです。
groups <user_name>
権限の意味について
権限には「読み取り権限」「書き取り権限」「実行権限」がありますが、権限の意味は「ファイルに対して」と「ディレクトリに対して」で意味が少し異なるので注意が必要です。
ファイル | ディレクトリ | |
---|---|---|
read(読み取り)権限 | ファイルの中身を閲覧できる | ディレクトリ内に配置されているファイル一覧を取得できる |
write(書き取り)権限 | ファイルの中身を編集できる | ディレクトリ内に配置されているファイルを作成/削除できる |
execute(実行)権限 | ファイルの中身を実行できる(シェルスクリプト等の場合有効) | ディレクトリをカレントディレクトリにできる |
権限の表記について
上記の定義を踏まえて、drwxr-xr-x
という表記は、「誰に」「何に対して」「どの権限を渡すか」という権限の内容を簡潔に表しているものになります。
drwxr-xr-x
の部分は下記のように意味を分解できます。
d | rwx | r-x | r-x |
---|---|---|---|
対象が「ディレクトリ」か、「ファイル」か | オーナーのパーミッション | グループのパーミッション | その他のユーザーのパーミッション |
対象の表示
-
d
と表示される場合- ディレクトリを指す
-
-
と表示される場合- ファイルを指す
パーミッションの表示
-
r
と表示される場合- read(読み取り)権限があることを指す
-
w
と表示される場合- write(書き取り)権限があることを指す
-
x
と表示される場合- execute(実行)権限があることを指す
-
-
と表示される場合- 該当の権限がないことを指す
つまりdrwxr-xr-x
は何を指している?
上記のことを踏まえると、drwxr-xr-x
は
- 何に対して
- ディレクトリである
dir1
に対して
- ディレクトリである
- 誰に
- オーナーに
- 「読み取り権限」「書き取り権限」「実行権限」を渡す
- グループに
- 「読み取り権限」「実行権限」を渡す
- その他のユーザーに
- 「読み取り権限」「実行権限」を渡す
- オーナーに
ということを意味することになります。
chmod 777 <ファイル名/ディレクトリ名>
というコマンドについて
最後に、導入で話をしたchmod 777 <ファイル名/ディレクトリ名>
というコマンドの777
について説明をして、この記事を終わりたいと思います。
777
は
7 | 7 | 7 |
---|---|---|
オーナーのパーミッション | グループのパーミッション | その他のユーザーのパーミッション |
と、それぞれの数字が、「オーナーのパーミッション」「グループのパーミッション」「その他のユーザーのパーミッション」を表しています。
7はrwx
の別表記だと言い換えてもいいでしょう。
この数字は、下記のように2進数ごとに権限を割り当て、足し合わせた数値で表現することで、渡す権限を表現しています。
4 | 2 | 1 |
---|---|---|
read(読み取り)権限 | write(書き取り)権限 | execute(実行)権限 |
7 = 4(読み取り権限) + 2(書き取り権限) + 1(実行権限)
5 = 4(読み取り権限) + 1(実行権限)
3 = 2(書き取り権限) + 1(実行権限)
なので
-
chmod 777
なら、すべてのユーザーに「読み取り権限」「書き取り権限」「実行権限」を渡す -
chmod 755
なら、オーナーに「読み取り権限」「書き取り権限」「実行権限」を渡し、オーナー以外のユーザーには「読み取り権限」「実行権限」を渡す
という意味になります。
まとめ
今回はchmod 777 <ファイル名/ディレクトリ名>
というコマンドの解説をしました。
このコマンドは本番環境などでアプリケーションの運用をするときだけでなく、ローカル環境の構築でも使用することも多いと思います。
何となくコマンドを叩いていた方がしっかりと意味を理解して、使いこなすことができる手助けになれば幸いです。