chmod 入門 - 数値モードとシンボリックモードを使い分ける

chmod 入門 - 数値モードとシンボリックモードを使い分ける

chmod の「2つの書き方」ってなに?

リナ: ライニー先輩、chmod を調べたら chmod 644 って書いてる記事と chmod u+x って書いてる記事があって…どっちが正解なんですか?
ライニー先輩: どっちも正解だよ。chmod には書き方が 2 種類あるんだ。数字で一気に指定する「数値モード」と、u+x みたいに記号で指定する「シンボリックモード」。同じことを別の言い方で書いてるだけ。
リナ: えっ、じゃあ覚えるのは 2 倍…?
ライニー先輩: 大丈夫。仕組みが分かれば、むしろ「使い分けると楽」って気づくよ。今日はその使い分けを一緒に見ていこう。

chmod はファイルやディレクトリの権限(パーミッション)を変えるコマンドです。指定方法には 数値モード644 のような数字)と シンボリックモードu+x のような記号)の 2 つがあり、どちらでも同じ権限を設定できます。

一言でいうと

  • 数値モード → 権限を「丸ごと一発」で決めたいとき(chmod 644 file
  • シンボリックモード → 「今ある権限に少しだけ足し引き」したいとき(chmod u+x file

この記事でわかること

  • 数値モード(644755)とシンボリックモード(u+xgo-w)が同じ権限を表すことが分かる
  • r=4w=2x=1 の足し算で数値モードを自分で計算できる
  • u/g/o/a+/-/= でシンボリックモードを組み立てられる
  • 「丸ごと決める」「足し引きする」で 2 つを使い分けられる
  • chmod 777 のような事故を避ける安全な型が身につく

1. まず共通の土台:rwx と 3 つの相手

結論: 権限は「読む r・書く w・実行 x」を「所有者 u・グループ g・その他 o」の 3 者それぞれに与える仕組み。数値もシンボリックもこれを表しているだけ。

リナ: そもそも ls -l で出てくる rwxr-xr-x みたいなの、毎回呪文に見えます…
ライニー先輩: あれは 3 文字ずつのカタマリで読むんだ。最初の 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

go(グループとその他)から -(削除)で 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。

リナ: 数字の方はどうやって決まるんですか? 6446 ってどこから来たの?
ライニー先輩: 各権限に点数がついてるんだ。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.sha+x と同じ)
  • 設定ファイルを標準権限に直す → chmod 644 config.yaml

5. よくある事故と安全な型

結論: chmod 777 は「全員になんでも許可」で危険。必要な権限だけを最小限に与えるのが安全な型。

リナ: つい 777 にしたら動いたから OK かと思ってました…
ライニー先輩: 動くけど「全開放」だからね。まずは ls -l で今の権限を見て、足りないものだけ足すのが正解。たとえば自分が実行できないだけなら chmod u+x で十分。777 はほぼ出番がないよ。

ディレクトリの x に注意

ディレクトリの x は「中に入れる(cd できる)」権限です。r だけだと一覧は見えても入れません。ディレクトリには 755rwxr-xr-x)がよく使われます。

安全な型は次の 3 ステップです。

  1. ls -l で今の権限を確認する
  2. 「誰に・何が足りない/余分か」を判断する
  3. 足りない分だけ 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

確認ポイント

  • 600a=,u=rw が同じ rw------- になることを確認できる
  • r=4 w=2 x=1 の足し算で 6 = rw を説明できる

余裕があれば chmod 755 demo.txtchmod 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 つのポイント

  1. r=4 w=2 x=1:足し算で数値モードが読める・書ける
  2. u/g/o/a と +/-/=:シンボリックモードは「誰に・どうする・何を」
  3. 完成形なら数値、足し引きならシンボリック:目的で選ぶ

次に読む