ファイルパーミッション(file permissions)の考え方 - rwxとowner/group/otherを直感で掴む

ファイルパーミッション(file permissions)の考え方 - rwxとowner/group/otherを直感で掴む

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

  • rwx と owner / group / other の意味を直感的に読める
  • パーミッション表示(例: rwxr-xr-x)を分解して理解できる

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

パーミッションの文字列が呪文に見えていませんか?

ls -l を打ったら、行頭に -rw-r--r-- みたいな文字列が並んでいて、「これ何の暗号あんごう…?」と固まった経験はないだろうか。これが パーミッションファイルやディレクトリに対する「読む・書く・実行する」権限の設定。(permission) ——ファイルへのアクセス権を表す表示だ。「パーミッション」「アクセス権」「権限けんげん」は、どれも同じものを指す別の呼び方になる。

一見すると呪文じゅもんだが、仕組みはシンプルだ。「誰が」「何をできるか」という2つの軸を並べただけである。この記事では、owner / group / other という3者と、rwx(読み・書き・実行)の組み合わせを、リナとライニー先輩の会話で整理していく。読み終わるころには、-rwxr-xr-- を見て「ああ、こういう権限か」と一目で読めるようになる。

この記事でわかること

1. そもそもパーミッションは何のため?

結論: パーミッションは「誰がこのファイルに何をしてよいか」を決めるルール。勝手に読まれたり壊されたりするのを防ぐための仕組み。

リナ: ライニー先輩、ls -l したときの行の最初にある -rw-r--r-- って何ですか? ずっと見ないふりしてました…
ライニー先輩: それは「パーミッション」だよ。日本語だと「アクセス権」。そのファイルに対して「誰が」「何をしていいか」を決めているんだ。
リナ: 誰が何を、ですか?
ライニー先輩: そう。Linux は一台のマシンを複数の人が共有して使うことを前提に作られている。だから細かい設定が必要になるんだ。「自分のファイルは他人に勝手に書き換えられたくない」「でも読むだけなら許す」——こうした指定ができる仕組みがパーミッションだよ。
リナ: なるほど。鍵のかかり具合みたいなものですね。
ライニー先輩: いいたとえだね。家の玄関は鍵をかけるけれど、郵便受けは誰でも入れられる。ファイルも同じで「どこまで開けておくか」を1つずつ決められるんだ。

パーミッション=「誰が」×「何を」の表

パーミッションは難しそうに見えるが、たった2つの軸でできている。

  • 誰が: owner / group / other の3者
  • 何を: r(読む)/ w(書く)/ x(実行)の3つ

この「3 × 3」の格子こうしさえ掴めば、どんな表示も読み解ける。

2. owner / group / other の3者とは?

結論: パーミッションは3者に分けて設定する。owner(持ち主本人)/ group(同じグループの仲間)/ other(それ以外の全員)。

リナ: まず「誰が」のほうから教えてください。
ライニー先輩: 「誰が」は3つのグループに分かれる。owner(オーナー)、group(グループ)、other(その他)だよ。
リナ: 3人の登場人物がいる感じですか?
ライニー先輩: いいたとえだね。owner はそのファイルを作った本人、つまり持ち主。group はそのファイルに割り当てられた「グループ」に属する人たち。other はそのどちらでもない、残り全員だよ。
リナ: 会社の書類でいうと…?
ライニー先輩: そう、まさにそんな感じ。owner は書類を作った自分、group は同じチームのメンバー、other は社外の人。同じ書類でも「自分は編集可」「チームは閲覧可」「社外は触れない」と分けたいでしょ。それと同じだよ。
区分 読み方 誰のこと
owner オーナー / u ファイルの持ち主本人
group グループ / g ファイルのグループに属するメンバー
other アザー / o 上のどちらでもない残り全員

3者は「u / g / o」と略される

chmod などのコマンドでは owneru(user)、groupgothero と略す。a(all)と書けば3者まとめての意味になる。この略し方は後で chmod u+x のように使うので、頭の片隅に置いておこう。

3. rwx(読む・書く・実行する)の意味は?

結論: r は読む(read)、w は書く・変更する(write)、x は実行する(execute)。この3つの許可を3者それぞれに与える。

リナ: 次は「何を」のほうですね。rwx って書いてあるやつ。
ライニー先輩: そう。3文字それぞれが1つの操作を表している。r は read(読む)、w は write(書く・変更する)、x は execute(実行する)だよ。
リナ: 実行する、っていうのは?
ライニー先輩: プログラムやスクリプトを「動かす」権限のことだね。たとえば script.sh を実行したいなら、そのファイルに x が付いていないと動かせない。逆に、ただのメモ帳ファイルに x は普通いらない。
リナ: 読む・書く・動かす。3つだけなら覚えられそう。
記号 英語 意味
r read 中身を読む / 一覧を見る
w write 中身を変更する / 追加・削除
x execute 実行する / 中に入る

権限が無いところは - で埋める

rwx のうち許可されていないものは、その位置が -(ハイフン)で表示される。たとえば r-- なら「読むだけOK、書く・実行はNG」。rw- なら「読み書きOK、実行はNG」。- は「ここの権限は無い」という空席のしるしだと思えばいい。

4. ls -l の先頭10文字はどう読む?

結論: 先頭の10文字は「1文字(種類)+ owner の rwx + group の rwx + other の rwx」。3文字ずつ区切って読む。

リナ: いよいよ本題です。-rw-r--r-- を読めるようになりたい!
ライニー先輩: よし、分解してみよう。ちなみに ls -l-l は「オプション」——コマンドの動きを変える追加の指定だよ。ハイフンで始まるのが目印で、-l は long(くわしく)の頭文字なんだ。
リナ: なるほど、詳しく出してほしいときに付けるんですね。
ライニー先輩: そう。この10文字は、最初の1文字とそのあとの「3文字 × 3ブロック」でできているんだ。
リナ: 3文字ずつ区切るんですね。
ライニー先輩: そう。最初の1文字はファイルの種類(- なら普通のファイル、d ならディレクトリ)。残りの9文字を3つに割ると、左から owner の権限・group の権限・other の権限になる。さっきの「誰が × 何を」の格子そのものだよ。

-rw-r--r-- を区切って読むと、こうなる。

-  rw-  r--  r--
↑   ↑    ↑    ↑
種類 owner group other
  • 先頭 -: 普通のファイル(d ならディレクトリ)
  • rw-: owner は 読みr 書きw 実行なし-
  • r--: group は 読みr のみ
  • r--: other も 読みr のみ

-rw-r--r-- を種類・owner・group・other に区切り、3者と rwx の格子に置き換えた図。owner は r と w が許可、group と other は r のみ許可で、それ以外は不許可

図1: 同じ -rw-r--r-- を「誰が × 何を」の格子に置き換えたもの。緑の文字が許可されている操作、- は許可されていない操作だ。図中の type は本文の「種類」にあたる。

つまり「持ち主は読み書きできるが、それ以外の人は読むだけ」という、設定ファイルなどでよく見る権限だ。

実際に確認してみよう。

ls -l memo.txt
-rw-r--r-- 1 lina lina 42 Jun  6 10:00 memo.txt

10文字の読み方テンプレート

  1. 1文字目: -(ファイル)か d(ディレクトリ)か
  2. 2〜4文字目: owner(持ち主)の rwx
  3. 5〜7文字目: group(グループ)の rwx
  4. 8〜10文字目: other(その他)の rwx

迷ったら「種類・自分・仲間・他人」と唱えながら3文字ずつ区切ろう。

ls -l の3〜4列目もセットで見る

権限の文字列のあとに出てくる lina lina の部分が、その owner 名と group 名だ。-rw-r--r-- が「誰にとっての権限か」は、この所有者しょゆうしゃ・グループ表示と合わせて初めて意味を持つ。権限文字列だけでなく、隣の名前も一緒に見るクセをつけよう。

5. ファイルとディレクトリで rwx の意味は変わる?

結論: 変わる。ディレクトリでは r=中身を一覧、w=ファイルの追加削除、x=中に入る(cd できる)を意味する。

リナ: ディレクトリにも rwx が付いてますけど、ファイルと同じ意味ですか?
ライニー先輩: いいところに気づいたね。実はすこし意味が変わるんだ。ディレクトリは「ファイルを入れる箱」だから、操作の対象が「箱そのもの」になる。
リナ: 箱に対する読む・書く・実行…?
ライニー先輩: 順番に言うと、r は「箱の中のファイル名を一覧できる」、w は「箱にファイルを足したり消したりできる」、x は「箱の中に入れる(cd できる)」だよ。
リナ: x が「実行」じゃなくて「中に入る」になるんですね。
ライニー先輩: そこがつまずきポイント。ディレクトリに x が無いと、たとえ中身があっても cd で入れないし、その中のファイルにもアクセスできない。だからディレクトリには x が付いていることが多いんだ。
権限 ファイルでは ディレクトリでは
r 中身を読む 中のファイル名を一覧する
w 中身を書き換える ファイルを追加・削除する
x プログラムを実行する 中に入る(cd)・中身へアクセス

ディレクトリの x を消すと「中身があるのに入れない」事故になる

ディレクトリの wx とセットで初めて働く。w だけ付けても、中に入れないのでファイルは作れない。

ディレクトリから x を外すと、Permission deniedcd できなくなる。「ファイルはあるはずなのに開けない」というトラブルの原因は、ディレクトリ側の x 不足であることが多い。詳しくは Permission denied の直し方 を参照。

chmod 777 は「全員に何でも許す」設定なので避ける

エラーを早く消したくて chmod 777 を打つ例をネットでよく見かける。これは危ない近道だ。

  1. 何が起きるか: owner / group / other の全員に読み・書き・実行のすべてを許す。他人に書き換えられても Linux は止めてくれない
  2. 安全な選び方: ファイルは 644、スクリプトやディレクトリは 755 から始める。足りなければ chmod u+x のように、要る分だけ足す
  3. 安心してほしいこと: 本サイトの仮想ターミナル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。は学習用だ。あなたのパソコンは壊れない。777 を打ってしまう失敗も、ここで先に試しておけばいい

6. 755 や 644 みたいな数字は何?

結論: rwx を数字に置き換えた表記。r=4 w=2 x=1 を足して、owner・group・other の順に3桁で書いたもの。

リナ: chmod 755 とか 644 っていう数字も見るんですけど、これは何ですか?
ライニー先輩: それは rwx を数字で表したものだよ。同じ権限を、文字じゃなく数字で短く書いているだけ。
リナ: どう変換するんですか?
ライニー先輩: それぞれの権限に点数を付けるんだ。r は4点、w は2点、x は1点。許可されている権限の点数を足すと、その桁の数字になる。
リナ: たとえば rwx なら…?
ライニー先輩: 4 + 2 + 1 = 7。rw- なら 4 + 2 = 6。r-- なら 4 だね。これを owner・group・other の順に3つ並べると 644 みたいな3桁になる。
rwx 計算 数字
rwx 4 + 2 + 1 7
rw- 4 + 2 6
r-x 4 + 1 5
r-- 4 4
--- 0 0

だから 644rw-r--r--(owner=6・group=4・other=4)、755rwxr-xr-x(owner=7・group=5・other=5)を意味する。

chmod 644 memo.txt
ls -l memo.txt
-rw-r--r-- 1 lina lina 42 Jun  6 10:00 memo.txt

よく使う2つだけ先に覚えればいい

  • 644rw-r--r--): 普通のファイル。持ち主は読み書き、他は読むだけ
  • 755rwxr-xr-x): スクリプトやディレクトリ。持ち主は全部、他は読む+実行(=入る)

この2つで日常の大半をカバーできる。数字と記号の細かい使い分けは chmod の数字表記と記号表記 で深掘りできる。

7. 手を動かして確かめるには?

結論: ブラウザ上のターミナルで ls -lchmod を実際に打つのが、いちばん速い定着方法。

リナ: 頭では分かった気がするんですけど、まだ自信がないです…
ライニー先輩: パーミッションは「見て覚える」より「変えて確かめる」のが早い。chmod で権限を変えて、ls -l で表示がどう変わるか目で追うと、一度で理解できるよ。
リナ: 自分の環境で壊したら怖くないですか?
ライニー先輩: 練習用のファイルを作ってやれば大丈夫。それも不安なら、ブラウザで試せる練習場を使うといい。
ls -l script.sh
chmod u+x script.sh
ls -l script.sh
-rw-r--r-- 1 lina lina 18 Jun  6 10:05 script.sh
-rwxr--r-- 1 lina lina 18 Jun  6 10:05 script.sh

1行目と2行目を見比べると、u+x(owner に実行権を追加)で rw-rwx に変わったのが分かる。

Penguin Gym Linux のターミナルls -lchmod を何度も打って、表示がどう変化するかを目で確かめよう。「数字を変える → 文字列が変わる」を体感すると、パーミッションは一気に怖くなくなる。

リナ、スクリプトが動かない

結論: x が付いていないファイルは実行できない。Permission deniedls -lx があるかを確かめるサイン。

ライニー先輩: 試す前に、練習用のスクリプトを1つ作っておこう。
echo 'echo "Hello, Penguin Gym"' > hello.sh
ライニー先輩: 動かすときは ./hello.sh と書く。先頭の ./ は「今いる場所のこのファイル」という意味だよ。
リナ: では動かしてみます。./hello.sh っと…あれ、断られました。
./hello.sh
bash: ./hello.sh: Permission denied
リナ: 中身は正しく書いたはずなのに、どうしてでしょう?
ライニー先輩: 書いた中身ではなく、権限のほうが足りないんだ。ls -l で今の権限を見てみよう。
ls -l hello.sh
-rw-r--r-- 1 lina lina 32 Jun  6 10:20 hello.sh
リナ: rw- です。あっ、x がありません。
ライニー先輩: そこが原因。実行するには owner に x が要る。chmod u+x で足してみよう。
chmod u+x hello.sh
./hello.sh
Hello, Penguin Gym
リナ: 動きました。Permission denied を見たら、まず ls -lx を確認すればいいんですね。
ライニー先輩: そのとおり。エラーは「権限が足りない」というお知らせなんだ。読み方が分かれば、もう怖くないよ。

ミニ課題

結論: この記事で出てきた ls -lchmod を実際に打って、表示の変化を目で確かめよう。

ライニー先輩: 学んだことを自分の手で確かめてみよう。3 つの課題を用意したよ。まず練習用のファイルを 2 つ作っておこう。
touch memo.txt
echo 'echo "Hello, Penguin Gym"' > script.sh

課題1: ファイルの権限を表示しよう

やること: memo.txt の権限を、先頭の10文字が見える形で出そう。

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

一覧を出すコマンドに、くわしく出すオプションを付ける。long(長い)の頭文字だよ。

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

ls -l を使うよ。

答えを見る
ls -l memo.txt
-rw-r--r-- 1 lina lina 42 Jun  6 10:00 memo.txt

課題2: owner に実行の許可を足そう

やること: script.sh の owner に x を追加して、表示が変わったか確かめよう。

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

権限を変えるコマンドに「誰に・何を・足す」を渡す。owner の略記は u だったね。

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

chmod u+x を使い、そのあと ls -l で確認するよ。

答えを見る
chmod u+x script.sh
ls -l script.sh
-rwxr--r-- 1 lina lina 18 Jun  6 10:05 script.sh

課題3: 数字表記で 644 に戻そう

やること: script.sh を「持ち主は読み書き、他は読むだけ」に戻そう。

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

r=4 w=2 x=1 を足して3桁で書く。持ち主は 4+2、他の2者は 4 だけだよ。

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

chmod 644 を使うよ。

答えを見る
chmod 644 script.sh
ls -l script.sh
-rw-r--r-- 1 lina lina 18 Jun  6 10:06 script.sh

振り返り

結論: パーミッションは「誰が × 何を」の3×3の格子。ls -l の10文字を3文字ずつ区切れば読める。

リナ: つまり ls -l の10文字は、種類・自分・仲間・他人の順に区切って読めばいいんですね。
ライニー先輩: そのとおり。そして x は、ファイルなら「実行」、ディレクトリなら「中に入る」に変わるところだけ気をつけよう。
リナ: 数字の 644755 も、r=4 w=2 x=1 の足し算だと分かりました。
ライニー先輩: それだけ押さえれば、ふだんの大半はカバーできる。あとは chmod で変えて ls -l で確かめる、を繰り返すだけだよ。

今日の3行まとめ

結論: 「誰が × 何を」の格子・10文字の区切り方・数字表記の3点で、パーミッションは読み書きできる。

  1. パーミッションは「誰が」×「何を」の3×3の格子 - owner / group / otherr / w / x を当てはめる
  2. ls -l の先頭10文字は「種類+owner+group+other」 - 3文字ずつ区切って読む。ディレクトリの x は「中に入る」
  3. 数字表記は r=4 w=2 x=1 の足し算 - まず 644(普通のファイル)と 755(スクリプト・ディレクトリ)を覚える

次に読む

この記事を共有

次の一手