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 のように記号で指定する「シンボリックモード」だね。同じことを別の言い方で書いているだけだよ。chmod はファイルやディレクトリファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。の権限を変えるコマンドです。指定方法は 2 つあります。数値モード(644 のような数字)と シンボリックモード(u+x のような記号)です。どちらでも同じ権限を設定できます。
言葉の整理
- パーミッションファイルやディレクトリに対する「読む・書く・実行する」権限の設定。:そのファイルに誰が何をしてよいかを決めた設定です。「権限」「アクセス権」も同じものを指す別の呼び方です。
- 数値モード:
644のように数字 3 桁で指定する書き方です。「8 進数モード」「絶対モード」と呼ばれることもあります。 - シンボリックモード:
u+xのように記号で指定する書き方です。「記号モード」「相対モード」と呼ばれることもあります。
一言でいうと
- 数値モード → 権限を「丸ごと一発」で決めたいとき(
chmod 644 file) - シンボリックモード → 「今ある権限に少しだけ足し引き」したいとき(
chmod u+x file)
先に安全な試し方を決めておきましょう
chmod はファイルの設定を書きかえるコマンドです。指定を間違えると、次のことが起こります。
- 権限を減らしすぎた場合:自分でも読めなくなります。
Permission deniedと出ます - 権限を増やしすぎた場合:他の人にも書きかえられる状態になります
どちらも chmod をもう一度実行すれば戻せます。ファイルの中身は消えません。それでも、練習は次の型で進めてください。
- 練習用のディレクトリを作り、その中だけで試す(例:
mkdir -p ~/chmod-practice && cd ~/chmod-practice) touch demo.txtのように、消えて困らないテスト用ファイルで試す- 変更の前後に
ls -lを実行し、何が変わったかを目で確かめる
本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。でも chmod を試せます。実機の設定は変わりません。安心して試してください。
なお仮想ターミナルの chmod は、シンボリックモードを 1 つずつ指定する形に対応しています。chmod u+x,go-w file のようにカンマでまとめる書き方は、実機の Linux で使ってください。
この記事でわかること
- 数値モード(
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 が、毎回呪文に見えます。- はファイル、d はディレクトリだね。rwx が所有者、次の r-x がグループ、最後の r-x がその他だよ。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
g と o(グループとその他)から -(削除)で w(書き込み)を外しています。このように複数の相手をまとめて指定できます。
2-3. 全員を読み取り専用にする(= の威力)
$ chmod a=r notes.txt
a(全員)に =(設定)で r だけを与えています。= は「今ある権限を消してから設定」します。 そのため、書き込みや実行が残っていても確実に「読みだけ」になります。
+ と = は、どう違うんですか?+r は「今の権限に読みを足す」だよ。=r は「読みだけにする」で、他は消える。= が便利だね。複数の指定はカンマで区切れます。たとえば chmod u+x,go-w file と書けます。「所有者に実行を足し、グループとその他から書き込みを外す」を一度に指定できます。
この書き方は実機の Linux で使えます。本サイトの仮想ターミナルでは、chmod u+x file と chmod go-w file のように 2 回に分けて実行してください。
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 だね。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 人分になります。
逆向きにもたどれます。755 の 7 は 4+2+1 です。つまり rwx です。5 は 4+1 なので r-x です。
4 が出てきたら r、2 が出てきたら w、1 が出てきたら 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 桁ずつ分解します。7 は rwx、5 は r-x、最後の 5 も r-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は「全員になんでも許可」で危険。必要な権限だけを最小限に与えるのが安全な型。
やりがちな事故:chmod 777
$ chmod 777 file # rwxrwxrwx = 誰でも読み書き実行できる
「Permission denied が消えるから」という理由で 777 にするのは最悪のパターンです。その他(other)にまで書き込みと実行を許してしまいます。これはセキュリティホールになります。
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 だけの場合、一覧は見えますが中には入れません。
そのためディレクトリには 755(rwxr-xr-x)がよく使われます。
安全な型は次の 3 ステップです。
ls -lで今の権限を確認する- 「誰に・何が足りない/余分か」を判断する
- 足りない分だけ
chmod u+xのように最小限を指定する
6. ミニ課題:実際にやってみよう
結論: 数値の計算・シンボリックでの足し引き・両者の一致確認の 3 問で、chmod の基本を手で確かめる。
$ 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.txt と chmod u=rwx → chmod go=rx の 2 段階も試してみましょう。実機ならカンマでまとめた chmod u=rwx,go=rx demo.txt でも同じ結果になります。
7. 振り返り
r が 4、w が 2、x が 1。相手ごとに足して 3 桁並べるんですね。444 で自分まで書けなくなったのは、所有者の w を外していたからでした。ls -l で今の権限を見る。この 1 手間で失敗はほとんど防げるよ。片づけには rm を使います。ここだけ扱いが違います
rm で消したファイルは、GUI と違ってゴミ箱に行きません。その場で完全に消えます。元には戻せません。
-r:ディレクトリを中身ごと消します-i:1 つずつ「消してよいか」を聞きます
-i を付けると、対象ごとに確認が表示されます。消してよければ y を入力して Enter を押します。やめるときは n を入力します。
消す前に、必ず ls でパスファイルやディレクトリの場所を表す文字列。と中身を目で確かめてください。
$ cd ~ $ ls ~/chmod-practice $ rm -ri ~/chmod-practice
本サイトの仮想ターミナルは学習用です。ここで実行しても、あなたのパソコンのファイルは消えません。安心して試してください。
今日の 3 行まとめ
r=4w=2x=1を足すと数値モードになる。並び順は所有者・グループ・その他- シンボリックモードは「誰に(
u/g/o/a)・どうする(+/-/=)・何を(r/w/x)」の 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 つのポイント
- r=4 w=2 x=1:足し算で数値モードが読める・書ける
- u/g/o/a と +/-/=:シンボリックモードは「誰に・どうする・何を」
- 完成形なら数値、足し引きならシンボリック:目的で選ぶ