読み取り権限を持つディレクトリを一覧表示できないのはなぜですか?

読み取り権限を持つディレクトリを一覧表示できないのはなぜですか?

その中にディレクトリdとファイルを作成しました。fその後、自分自身にディレクトリに対する読み取り権限のみを与えました。私はこれがファイルをリストできることを意味することを理解しています(例:ここ)、しかし私はできません。

will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x   3 will  wheel  102  4 Oct 08:30 .
drwxrwxrwt  16 root  wheel  544  4 Oct 08:30 ..
dr--------   3 will  wheel  102  4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>

書き込みおよび実行権限を変更すると、ファイルを表示できます。

will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions> 

なぜこれですか?私はMacOSを使用しています。

編集:@ccornの答えを見ると、私は魚を使っていて、type ls次のものを提供します。

will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
    command ls -G $argv
end

ベストアンサー1

lsあまりにも多くを試さないようにいくつかの準備:

$ unalias ls 2>/dev/null
$ unset -f ls
$ unset CLICOLOR

ディレクトリ権限デモr:

$ ls -ld d
dr--------  3 ccorn  ccorn  102  4 Okt 14:35 d
$ ls d
f
$ ls -l d
ls: f: Permission denied
$ ls -F d
ls: f: Permission denied

従来のUnixファイルシステムでは、ディレクトリは(名前、inode番号)ペアのリストにすぎません。 inode番号は、残りのファイルメタデータが格納されているファイルシステムのinodeテーブルへのインデックスとして使用される整数です。

ディレクトリ権限のr許可リスト名前はありますが、inodeテーブルに格納されている情報(ファイルの種類、ファイルの長さ、ファイルの権限などを取得したり、ファイルを開くなど)にはアクセスしません。これを行うには、xディレクトリに対する権限が必要です。

そのためls -l、、ls -Flsで区切られた出力などは許可なく失敗xしてただls成功します。

このx権限はinodeアクセスのみを許可します。つまり、ディレクトリに明示的な名前が与えられたら、xそのinodeを見つけてディレクトリエントリのメタデータにアクセスできます。

$ chmod 100 d
$ ls -l d/f
-rw-r--r--  1 ccorn  ccorn  0  4 Okt 14:35 d/f
$ ls d
ls: d: Permission denied

したがって、ファイルを開い/a/b/c/fたりそのメタデータをリストしたりするには、ディレクトリに権限を付与する必要があります//a/a/b/a/b/cx

当然、ディレクトリエントリを作成するには、次wx権限が必要です。

$ chmod 100 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 200 d
$ touch d/g
touch: d/g: Permission denied
$ chmod 300 d
$ touch d/g
$

Wikipediaには記事に簡単な概要があります。ファイルシステム権限

おすすめ記事