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

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

この記事でできるようになること

  • `r=4` `w=2` `x=1` の足し算で `644` や `755` を自分で計算できる
  • `u` `g` `o` `a` と `+` `-` `=` を組み立ててシンボリックモードを書ける
  • 「丸ごと決めるなら数値・足し引きならシンボリック」で使い分けられる

前提知識(先に読むと理解しやすい記事)

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

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

chmod はファイルやディレクトリファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。の権限を変えるコマンドです。指定方法は 2 つあります。数値モード644 のような数字)と シンボリックモードu+x のような記号)です。どちらでも同じ権限を設定できます。

言葉の整理

  • パーミッションファイルやディレクトリに対する「読む・書く・実行する」権限の設定。:そのファイルに誰が何をしてよいかを決めた設定です。「権限」「アクセス権」も同じものを指す別の呼び方です。
  • 数値モード644 のように数字 3 桁で指定する書き方です。「8 進数モード」「絶対モード」と呼ばれることもあります。
  • シンボリックモードu+x のように記号で指定する書き方です。「記号モード」「相対モード」と呼ばれることもあります。

一言でいうと

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

先に安全な試し方を決めておきましょう

chmod はファイルの設定を書きかえるコマンドです。指定を間違えると、次のことが起こります。

  • 権限を減らしすぎた場合:自分でも読めなくなります。Permission denied と出ます
  • 権限を増やしすぎた場合:他の人にも書きかえられる状態になります

どちらも chmod をもう一度実行すれば戻せます。ファイルの中身は消えません。それでも、練習は次の型で進めてください。

  1. 練習用のディレクトリを作り、その中だけで試す(例:mkdir -p ~/chmod-practice && cd ~/chmod-practice
  2. touch demo.txt のように、消えて困らないテスト用ファイルで試す
  3. 変更の前後に ls -l を実行し、何が変わったかを目で確かめる

本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。でも chmod を試せます。実機の設定は変わりません。安心して試してください。

なお仮想ターミナルの chmod は、シンボリックモードを 1 つずつ指定する形に対応しています。chmod u+x,go-w file のようにカンマでまとめる書き方は、実機の Linux で使ってください。

この記事でわかること

  • 数値モード(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 が、毎回呪文に見えます。
ライニー先輩: 先頭の 1 文字は権限ではなく種別だよ。- はファイル、d はディレクトリだね。
ライニー先輩: そのあとを 3 文字ずつのカタマリで読むんだ。最初の rwx が所有者、次の r-x がグループ、最後の r-x がその他だよ。
ライニー先輩: 文字の意味は 3 つだけ。r が読む、w が書く、x が実行できる、ということだね。

3 つの相手の意味

  • 所有者(u:そのファイルを作った本人です。「オーナー」とも呼びます。
  • グループ(g:同じチームとして登録された人たちです。
  • その他(o:上の 2 つに当てはまらない、すべての人です。「other」の頭文字です。
$ ls -l script.sh
-rwxr-xr-x 1 user user 128 Jun  5 10:00 script.sh
位置 相手 記号 この例 意味
1 文字目 種別 - - - はファイル、d はディレクトリ
2〜4 文字目 所有者 u(user) rwx 読み書き実行すべて可
5〜7 文字目 グループ g(group) r-x 読みと実行のみ
8〜10 文字目 その他 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(実行)を与えています。たとえば rw-r--r--644)のファイルに実行すると、rwxr--r-- になります。実行できるのは所有者だけです。

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 と書けます。「所有者に実行を足し、グループとその他から書き込みを外す」を一度に指定できます。

この書き方は実機の Linux で使えます。本サイトの仮想ターミナルでは、chmod u+x filechmod go-w file のように 2 回に分けて実行してください。

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 になるんだ。

各権限の点数を覚えましょう。この 3 つだけです。

権限 点数
r(読み) 4
w(書き) 2
x(実行) 1

3-0. 3 ステップで 644 を組み立てる

数字は暗記しなくても、次の 3 ステップで作れます。

ステップ 1:相手ごとに「与えたい権限」を言葉で書きます。

  • 所有者:読みたい。書きたい
  • グループ:読みたい
  • その他:読みたい

ステップ 2:相手ごとに点数を足します。

  • 所有者:r(4)+ w(2)= 6
  • グループ:r(4)= 4
  • その他:r(4)= 4

ステップ 3:その数字を 所有者・グループ・その他 の順に並べます。

  • 6 と 4 と 4 を並べて 644

1 桁が 1 人分の権限を表します。だから 3 桁で 3 人分になります。

逆向きにもたどれます。7557 は 4+2+1 です。つまり rwx です。5 は 4+1 なので r-x です。

4 が出てきたら r2 が出てきたら w1 が出てきたら x と考えます。組み合わせは足し算で決まります。

数字 内訳 記号 意味
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 を読むときは 1 桁ずつ分解します。7rwx5r-x、最後の 5r-x です。

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(相手を省くと全員が対象になります。ただし umask の影響を受けます。既定の環境では a+x とほぼ同じ結果です)
  • 設定ファイルを標準権限に直す → chmod 644 config.yaml

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

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

5-1. リナの失敗:chmod 444 で自分が書けなくなる

リナ: 「他の人に書きかえられたくない」と思って chmod 444 notes.txt にしました。そのあと編集しようとしたら、自分まで保存できません。
$ chmod 444 notes.txt
$ ls -l notes.txt
-r--r--r-- 1 user user 42 Jun  5 10:20 notes.txt
リナ: えっ、自分のファイルなのに書けないんですか。所有者だけは特別だと思っていました。
ライニー先輩: 所有者にも同じルールが当てはまるんだ。444 は 4+0+0 だから、3 人とも r だけ。所有者の w も消えているんだよ。
リナ: なるほど。4 を選んだ時点で、自分の書き込みまで外していたんですね。
ライニー先輩: そのとおり。所有者だけ読み書きしたいなら 600 だね。6 は 4+2 で rw- だよ。
リナ: 納得しました。数字を書く前に「所有者は何点か」を口に出して確かめます。
$ chmod 600 notes.txt
$ ls -l notes.txt
-rw------- 1 user user 42 Jun  5 10:21 notes.txt

権限を減らしすぎても、ファイルの中身は消えません。chmod をもう一度実行すれば元に戻せます。

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

ディレクトリの x に注意

ディレクトリの x は「中に入れる」権限です。cd できるかどうか、と考えてください。r だけの場合、一覧は見えますが中には入れません。

そのためディレクトリには 755rwxr-xr-x)がよく使われます。

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

  1. ls -l で今の権限を確認する
  2. 「誰に・何が足りない/余分か」を判断する
  3. 足りない分だけ chmod u+x のように最小限を指定する

6. ミニ課題:実際にやってみよう

結論: 数値の計算・シンボリックでの足し引き・両者の一致確認の 3 問で、chmod の基本を手で確かめる。

リナ: 知識は入りました。手を動かして試したいです。
ライニー先輩: いいね、3 問用意したよ。まず練習用のディレクトリとテスト用ファイルを作ろう。消えて困らないファイルで試せば安心だね。
$ mkdir -p ~/chmod-practice && cd ~/chmod-practice
$ touch demo.txt
$ ls -l demo.txt
-rw-r--r-- 1 user user 0 Jun  5 10:10 demo.txt

課題 1: demo.txt を「所有者だけが読み書きできる」状態にしよう。数値モードを使います。

ヒント 1(方向づけ)を見る

相手ごとに点数を足します。所有者は「読み」と「書き」の 2 つです。グループとその他には何も与えません。

何も与えない場合の点数は 0 です。

ヒント 2(コマンド名)を見る

使うのは chmod です。r は 4、w は 2 なので、所有者は 4+2 になります。残り 2 桁は 0 です。

結果の確認には ls -l を使います。

答えを見る
$ chmod 600 demo.txt
$ ls -l demo.txt
-rw------- 1 user user 0 Jun  5 10:11 demo.txt

6 は 4+2 で rw- です。0 は権限なしなので --- になります。

課題 2: demo.txt に、所有者の実行権限だけを足そう。今ある権限は消さずに残します。

ヒント 1(方向づけ)を見る

「今の状態に少しだけ足す」場面です。完成形を丸ごと指定する必要はありません。

足す相手は所有者だけです。

ヒント 2(コマンド名)を見る

使うのは chmod です。相手は u、動作は +、権限は x です。この 3 つを続けて書きます。

答えを見る
$ chmod u+x demo.txt
$ ls -l demo.txt
-rwx------ 1 user user 0 Jun  5 10:12 demo.txt

読みと書きは残ったままです。実行だけが足されました。数値で書くなら 700 と同じ状態です。

課題 3: 同じ rw------- を、シンボリックモードだけで作ろう。今の権限が何であっても、確実にその状態にします。

ヒント 1(方向づけ)を見る

「足す」でも「引く」でもありません。今ある権限を消してから決め直す記号を使います。

まず全員を空にして、そのあと所有者にだけ与える、と 2 段階で考えます。

ヒント 2(コマンド名)を見る

使うのは chmod です。消してから設定する記号は = です。全員は a、所有者は u です。

2 つの指定はカンマで区切って並べられます。

答えを見る
$ chmod a=r demo.txt
$ chmod u=rw demo.txt
$ ls -l demo.txt
-rw-r--r-- 1 user user 0 Jun  5 10:13 demo.txt

1 行目の a=r で全員を読み取りだけにします。2 行目の u=rw で所有者にだけ書き込みを足しています。

= は「今ある権限を消してから設定する」記号でした。だから 2 段階に分けても、途中の状態に引きずられません。

実機の Linux では、次のようにカンマで 1 行にまとめられます。この形なら 600 と同じ rw------- になります。

$ chmod a=,u=rw demo.txt

本サイトの仮想ターミナルは 1 指定ずつの入力に対応しています。

余裕があれば chmod 755 demo.txtchmod u=rwxchmod go=rx の 2 段階も試してみましょう。実機ならカンマでまとめた chmod u=rwx,go=rx demo.txt でも同じ結果になります。

7. 振り返り

リナ: 整理します。r が 4、w が 2、x が 1。相手ごとに足して 3 桁並べるんですね。
ライニー先輩: そのとおり。所有者・グループ・その他の順だよ。
リナ: 444 で自分まで書けなくなったのは、所有者の w を外していたからでした。
ライニー先輩: よく覚えていたね。書きかえる前に ls -l で今の権限を見る。この 1 手間で失敗はほとんど防げるよ。

今日の 3 行まとめ

  1. r=4 w=2 x=1 を足すと数値モードになる。並び順は所有者・グループ・その他
  2. シンボリックモードは「誰に(u/g/o/a)・どうする(+/-/=)・何を(r/w/x)」の 3 点セット
  3. 完成形が決まっているなら数値、今から足し引きするならシンボリックを選ぶ

まとめ表

やりたいこと 数値モード シンボリックモード
一般ファイル 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

シンボリックモード側のカンマ区切りは、実機の Linux 向けの書き方です。本サイトの仮想ターミナルでは 1 指定ずつ実行してください。

覚えておくべき 3 つのポイント

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

次に読む

この記事を共有

次の一手