はじめに
Linuxを触り始めた頃に誰もが一度はつまずくのが「パーミッション(権限)」です。rwx
= 読み取り(Read)、書き込み(Write)、実行(eXecute)…と暗記はできても、「実際にどう効いてくるのか」 がややこしいんですよね。
僕自身ワードの意味だけで、
-
「実行権限があるとファイルを削除できる」
-
「読み取り権限があればディレクトリを移動できる」
…みたいな勘違いをしていました。
この記事では、そういった「よくある誤解」を整理しながら、パーミッションを理解するためのTipsをまとめます。
rwx の基本
まず大前提。パーミッションは「ファイル」と「ディレクトリ」で意味が違います。
ファイルの場合
-
r (read) … ファイルの中身を読む
-
w (write) … ファイルの中身を変更する
-
x (execute) … ファイルをプログラムとして実行する
ディレクトリの場合
-
r (read) … ディレクトリの中に「何があるか」を見る(ls可能)
-
w (write) … ディレクトリ内でファイル作成・削除・名前変更ができる
-
x (execute) … ディレクトリに「入れる」(cdで移動できる)、中のファイルにアクセスできる
ここでポイントは「ディレクトリのwは中身のファイルに影響する」ということです。
よくある勘違いと実際の動き
① 実行権限があるとファイル削除できる?
→ 違います!
ファイルの削除可否は「そのファイル自身のw」ではなく「親ディレクトリのw」に依存します。
例:
この場合、file.txt
に w がなくても、ディレクトリ testdir
に w があれば削除できちゃいます。
つまり「削除」はファイル内容ではなく、ディレクトリの管理権限の話なんです。
② 読み取り権限があればディレクトリに移動できる?
→ これも違います!
見に行くからrかなと思ってました!
ですが、ディレクトリに移動できるかどうかは「x(実行権限)」に依存します。
-
r がある … lsで中身を見られる
-
x がある … cdで入れる
なので r
だけあって x
がないと、中身の一覧は見えるけど中には入れない、という不思議な状態になります。
③ ファイルに x があるけど r がない場合は?
→ 実行できるけど中身は読めない、という状態です。
たとえばバイナリプログラムなどでよくあります。
「実行はできるけどソースを見せない」みたいな制御ですね。
まとめ
Linuxのパーミッションは「ファイル」と「ディレクトリ」で意味が違うため、慣れないうちはごちゃごちゃになります。
僕が昔やっていた勘違いを整理すると:
-
実行権限があるからといって削除できるわけじゃない(親ディレクトリのw次第)
-
読み取り権限があってもディレクトリに入れるとは限らない(xが必要)
こういった細かい違いを押さえておくと、パーミッション関連のトラブルで「なぜこれができない?」と迷子にならなくなります。
コメント