chmod 入門 - 数値モードとシンボリックモードを使い分ける
chmod の「2つの書き方」ってなに?
chmod を調べたら chmod 644 って書いてる記事と chmod u+x って書いてる記事があって…どっちが正解なんですか?chmod には書き方が 2 種類あるんだ。数字で一気に指定する「数値モード」と、u+x みたいに記号で指定する「シンボリックモード」。同じことを別の言い方で書いてるだけ。chmod はファイルやディレクトリの権限(パーミッション)を変えるコマンドです。指定方法には 数値モード(644 のような数字)と シンボリックモード(u+x のような記号)の 2 つがあり、どちらでも同じ権限を設定できます。
一言でいうと
- 数値モード → 権限を「丸ごと一発」で決めたいとき(
chmod 644 file) - シンボリックモード → 「今ある権限に少しだけ足し引き」したいとき(
chmod u+x file)
この記事でわかること
- 数値モード(
644・755)とシンボリックモード(u+x・go-w)が同じ権限を表すことが分かる r=4・w=2・x=1の足し算で数値モードを自分で計算できるu/g/o/aと+/-/=でシンボリックモードを組み立てられる- 「丸ごと決める」「足し引きする」で 2 つを使い分けられる
chmod 777のような事故を避ける安全な型が身につく
1. まず共通の土台:rwx と 3 つの相手
結論: 権限は「読む r・書く w・実行 x」を「所有者 u・グループ g・その他 o」の 3 者それぞれに与える仕組み。数値もシンボリックもこれを表しているだけ。
ls -l で出てくる rwxr-xr-x みたいなの、毎回呪文に見えます…rwx が所有者、次の r-x がグループ、最後の r-x がその他。r が読む、w が書く、x が実行できる、ってこと。$ ls -l script.sh
-rwxr-xr-x 1 user user 128 Jun 5 10:00 script.sh
| 位置 | 相手 | 記号 | この例 | 意味 |
|---|---|---|---|---|
| 1〜3 文字目 | 所有者 | u(user) |
rwx |
読み書き実行すべて可 |
| 4〜6 文字目 | グループ | g(group) |
r-x |
読みと実行のみ |
| 7〜9 文字目 | その他 | o(other) |
r-x |
読みと実行のみ |
a(all)は「u + g + o の全員」をまとめて指す記号です。あとで使います。
2. シンボリックモード:足し引きで考える
結論: シンボリックモードは「誰に(u/g/o/a)・どうする(+/-/=)・何を(r/w/x)」の 3 点セット。今の権限を起点に足し引きするので意図が明確。
シンボリックモードは次の 3 つを組み合わせます。
| 要素 | 記号 | 意味 |
|---|---|---|
| 誰に | u / g / o / a |
所有者 / グループ / その他 / 全員 |
| どうする | + / - / = |
追加 / 削除 / 設定(完全上書き) |
| 何を | r / w / x |
読み / 書き / 実行 |
2-1. 実行権限を所有者に追加する
$ chmod u+x script.sh
u(所有者)に +(追加)で x(実行)。これで自分だけ実行できるようになります。
2-2. グループとその他から書き込みを奪う
$ chmod go-w secret.txt
g と o(グループとその他)から -(削除)で w(書き込み)。複数の相手をまとめて指定できます。
2-3. 全員を読み取り専用にする(= の威力)
$ chmod a=r notes.txt
a(全員)に =(設定)で r だけ。= は「今ある権限を消してから設定」するので、書き込みや実行が残っていても確実に「読みだけ」になります。
+ と = ってどう違うんですか?+r は「今の権限に読みを足す」。=r は「読みだけにする(他は消す)」。たとえば実行権限を確実に外したいときは = が便利だよ。複数指定はカンマで区切れます。chmod u+x,go-w file のように「所有者に実行を足し、グループとその他から書き込みを外す」を一度に書けます。
3. 数値モード:r=4 w=2 x=1 の足し算
結論: 数値モードは r=4・w=2・x=1 を足した「1 桁の数字」を、所有者・グループ・その他の順に 3 桁並べる。
644は所有者 rw・他は r。
644 の 6 ってどこから来たの?r が 4 点、w が 2 点、x が 1 点。これを足すだけ。rw- なら 4+2=6、r-- なら 4。だから所有者 6・グループ 4・その他 4 で 644 になる。各権限の点数を覚えましょう。
| 権限 | 点数 |
|---|---|
r(読み) |
4 |
w(書き) |
2 |
x(実行) |
1 |
1 桁が 1 人分の権限を表し、それを 所有者・グループ・その他 の順に 3 桁並べます。
| 数字 | 内訳 | 記号 | 意味 |
|---|---|---|---|
| 7 | 4+2+1 | rwx |
全部 |
| 6 | 4+2 | rw- |
読み書き |
| 5 | 4+1 | r-x |
読みと実行 |
| 4 | 4 | r-- |
読みのみ |
| 0 | 0 | --- |
権限なし |
3-1. よく使う数値の組み合わせ
$ chmod 644 notes.txt # rw-r--r-- 一般的なファイル $ chmod 755 script.sh # rwxr-xr-x 実行可能なスクリプト・ディレクトリ $ chmod 600 id_rsa # rw------- 秘密鍵など本人だけ
| 数値 | 記号 | よくある用途 |
|---|---|---|
644 |
rw-r--r-- |
通常のファイル(所有者だけ編集可) |
755 |
rwxr-xr-x |
スクリプト・ディレクトリ |
600 |
rw------- |
秘密鍵・パスワードファイル |
700 |
rwx------ |
本人専用ディレクトリ |
逆算のコツ:755 を読むときは「7=rwx, 5=r-x, 5=r-x」と 1 桁ずつ分解します。r=4 w=2 x=1 を覚えていれば、記号と数字を自由に行き来できます。
4. どっちを使う? 使い分けの型
結論: 「権限を丸ごと決める」なら数値、「今の状態から少し足し引き」ならシンボリック。意図が伝わる方を選ぶ。
| やりたいこと | おすすめ | 例 |
|---|---|---|
| 権限を完成形で一括設定 | 数値 | chmod 644 file |
| 今の権限に追加・削除 | シンボリック | chmod u+x file |
| 他の権限を壊さず足し引き | シンボリック | chmod g+w file |
| 秘密鍵を本人専用に固定 | 数値 | chmod 600 id_rsa |
| 全員から実行権限だけ外す | シンボリック | chmod a-x file |
実務での目安
- スクリプトに実行権限を付けるだけ →
chmod +x script.sh(a+xと同じ) - 設定ファイルを標準権限に直す →
chmod 644 config.yaml
5. よくある事故と安全な型
結論:
chmod 777は「全員になんでも許可」で危険。必要な権限だけを最小限に与えるのが安全な型。
やりがちな事故:chmod 777
$ chmod 777 file # rwxrwxrwx = 誰でも読み書き実行できる
「Permission denied が消えるから」と 777 にするのは最悪のパターン。その他(other)にまで書き込みと実行を許してしまい、セキュリティホールになります。
777 にしたら動いたから OK かと思ってました…ls -l で今の権限を見て、足りないものだけ足すのが正解。たとえば自分が実行できないだけなら chmod u+x で十分。777 はほぼ出番がないよ。ディレクトリの x に注意
ディレクトリの x は「中に入れる(cd できる)」権限です。r だけだと一覧は見えても入れません。ディレクトリには 755(rwxr-xr-x)がよく使われます。
安全な型は次の 3 ステップです。
ls -lで今の権限を確認する- 「誰に・何が足りない/余分か」を判断する
- 足りない分だけ
chmod u+xのように最小限を指定する
6. 実践課題(5分)
結論: 同じ権限を数値とシンボリックの両方で設定し、
ls -lで結果が一致することを確かめると定着する。
$ touch demo.txt $ ls -l demo.txt $ chmod 600 demo.txt $ ls -l demo.txt
-rw------- 1 user user 0 Jun 5 10:10 demo.txt
次に、同じ rw------- をシンボリックモードで作ってみましょう。
$ chmod a=,u=rw demo.txt $ ls -l demo.txt
-rw------- 1 user user 0 Jun 5 10:11 demo.txt
確認ポイント:
600とa=,u=rwが同じrw-------になることを確認できるr=4 w=2 x=1の足し算で6 = rwを説明できる
余裕があれば chmod 755 demo.txt と chmod u=rwx,go=rx demo.txt も同じ結果になるか試してみましょう。
まとめ
| やりたいこと | 数値モード | シンボリックモード |
|---|---|---|
| 一般ファイル | chmod 644 file |
chmod u=rw,go=r file |
| 実行スクリプト | chmod 755 file |
chmod u=rwx,go=rx file |
| 実行権限を足す | (丸ごと指定が必要) | chmod u+x file |
| 書き込みを外す | (丸ごと指定が必要) | chmod go-w file |
| 秘密鍵 | chmod 600 file |
chmod a=,u=rw file |
覚えておくべき 3 つのポイント
- r=4 w=2 x=1:足し算で数値モードが読める・書ける
- u/g/o/a と +/-/=:シンボリックモードは「誰に・どうする・何を」
- 完成形なら数値、足し引きならシンボリック:目的で選ぶ