[Linux] ディレクトリのアクセス権限(パーミッション)

ディレクトリにもファイルと同様にアクセス権限があります。
ファイルの権限は「読み」、「書き」、「実行」とわかりやすいです。
しかし、ディレクトリの権限は、意外と忘れてたりしませんか?
ファイルとディレクトリでは権限の意味が異なるので注意してください。
 

ディレクトリのアクセス権限

ディレクトリ権限 説明
r そのディレクトリ内に、どのファイルがあるのか参照できる。
w そのディレクトリ内で、ファイルの追加、削除、リネームができる。
x そのディレクトリ内のファイルにアクセスできる。

 
Read権限は、ディレクトリの中を「見る」権限ですね。これがないと、lsコマンドや検索でひっかけることができません。
Write権限は、ディレクトリ内にファイルを作ったり、削除する場合に必要になります。
Execute権限が、多少わかりづらいでしょうか?Execute権限は、ファイルを「使う」場合に必要になります。
※ファイルの内容を見たり、実行したり。
 

例1

r--

read権限だけだとファイルにアクセスできません。

  • ディレクトリの中を「見る」ことだけはできます。
  • ファイルの中を見たり、使うことはできません。

 

$ mkdir readonly_dir
$ echo 'test text.' > readonly_dir/test.txt
$ chmod 400 readonly_dir/
$ ls -l
合計 4
dr-------- 2 maint maint 4096  2月 14 11:40 readonly_dir
$
$ cd readonly_dir/
-bash: cd: readonly_dir/: 許可がありません
$
$ ls readonly_dir/
ls: 'readonly_dir/test.txt' にアクセスできません: 許可がありません
test.txt
$
$ cat readonly_dir/test.txt
cat: readonly_dir/test.txt: 許可がありません

 

例2

--x

execute権限だけの場合、ファイルを使うことはできます。ただし、ファイルのフルパスを知っている必要があります。

  • Execute権限があるので、ディレクトリに「cd」はできます。
  • ただし、Read権限がないので、「ls」等でファイル名を調べることはできません。
  • パス、ファイル名を知っていれば、Execute権限があるので、ファイルを使うことはできます。
    ※使うファイル自体にも、権限が必要です。

 

$ chmod 100 readonly_dir/
$ ls -l
合計 4
d--x------ 2 maint maint 4096  2月 14 11:40 readonly_dir
$
$ cd readonly_dir/
$
$ ls
ls: ディレクトリ '.' を開くことが出来ません: 許可がありません
$
$ cat test.txt
test text.
$
$ cd ..
$ cat readonly_dir/test.txt
test text.

 
他の人にファイルを共有したり、逆に隠したりしたいときは、ディレクトリの権限に注意してみてください。
以上、ディレクトリのアクセス権限(パーミッション)の紹介でした。