ls -l で出てくる rwxr-xr-x と、chmod 755 の「755」。この2つが同じものを指していると、しばらく腹落ちしていませんでした。
数字は数字、記号は記号として別々に暗記していたので、毎回「どっちがどっちだっけ」と調べ直していたんです。
一度「数字は rwx の足し算」だと分かってからは調べる回数が激減しました。同じところで詰まる人向けに、その整理を残しておきます。
パーミッションは「3者 × 3権限」の表
Linux のファイル権限は、所有者(user)・グループ(group)・その他(other) の3者それぞれに、読み取り(r)・書き込み(w)・実行(x) を割り当てる仕組みです。
ls -l を打つと、行の先頭にこの権限が並びます。
$ ls -l
-rwxr-xr-x 1 kamome staff 1024 Jul 4 10:00 deploy.sh
drwxr-xr-x 2 kamome staff 4096 Jul 4 10:00 logs
先頭の1文字はファイル種別で、- が通常ファイル、d がディレクトリを表します。
残りの9文字を3文字ずつ区切ると、左から順に所有者・グループ・その他の権限。
たとえば rwxr-xr-x なら、所有者は rwx(全部)、グループは r-x(読みと実行)、その他も r-x、という読み方です。
数字は r=4 / w=2 / x=1 の足し算

ここで chmod 755 の数字が効いてくるのです。
各権限には重みがあって、r=4・w=2・x=1 と決まっています。
1桁ぶん(1者ぶん)の権限を、この3つの足し算で表すわけです。
rwx = 4+2+1 = 7
rw- = 4+2 = 6
r-x = 4 +1 = 5
r-- = 4 = 4
だから 755 は「所有者7(rwx)/グループ5(r-x)/その他5(r-x)」となり、rwxr-xr-x と一致します。
644 なら「6(rw-)/4(r–)/4(r–)」で、rw-r--r-- になりました。
よく使う値をいくつか覚えておくと、ほとんどの場面はこれで足ります。
- 755:スクリプトやディレクトリ(本人は全権、他者は読み+実行)
- 644:通常ファイル(本人は読み書き、他者は読みだけ)
- 600:他人に一切見せたくないファイル(鍵ファイルなど)
- 700:本人専用のディレクトリ
記号でも指定できる(u/g/o/a と +/-/=)
数字とは別に、記号で「差分だけ」変える書き方もあります。
対象は u(所有者)・g(グループ)・o(その他)・a(全員)、操作は +(追加)・-(削除)・=(その通りにセット)です。
chmod u+x deploy.sh # 所有者に実行権を追加
chmod go-w report.txt # グループとその他から書き込みを外す
chmod a+r public.html # 全員に読み取りを付与
数字が9個の権限をまとめて上書きするのに対して、記号は今の状態を活かしつつ一部だけ足し引きします。
「実行権だけ足したい」といった場面では、記号のほうが事故りにくいです。
-R(再帰)には落とし穴がある
ディレクトリ以下をまとめて変えたいとき、chmod -R を使いたくなります。
ところが chmod -R 755 ./project のように打つと、中の通常ファイルにまで実行権(x)が付いてしまうんです。
ファイルは644、ディレクトリは755にしたい、というのが普通なので、両者を分けて指定するのが安全でした。
# ディレクトリだけ 755
find ./project -type d -exec chmod 755 {} +
# ファイルだけ 644
find ./project -type f -exec chmod 644 {} +
chmod -R 777 は「全員に全権限」なので、公開ディレクトリでは特に避けたいところです。
権限で迷ったら、まず「本当にその他(other)に書き込みが必要か」を疑うと、たいていの事故は防げます。
最後に
chmod の数字は、r=4・w=2・x=1 の足し算だと分かってしまえば怖くありません。
755と644さえ体に入れておけば、あとは必要なときに足し算するだけ。
以上です。









コメントを残す