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


14

ディレクトリ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

重複は質問に答えません。それは、私があなたができないことを示すことをあなたができることを意味します。@ccornの答えは完璧です。
wrgrs

うわー、魚の事は(最初に)失われた情報のかなり重要な部分です。
スティーブンキット

はい、あなたは正しいです、私はそれを追加する必要がありますが、同じことがbashでも起こるalias ls='ls -G'と思われます。
wrgrs

私のために。MacOSを使用していますか?ここに別の質問があるかもしれません。編集:うん、Linuxで異なる動作をする。
wrgrs

回答:


8

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ファイルシステムでは、ディレクトリは単に(名前、iノード番号)のペアのリストでした。iノード番号は、ファイルメタデータの残りが保存されるファイルシステムのiノードテーブルへのインデックスとして使用される整数です。

rディレクトリのアクセス許可により、ディレクトリ内の名前を一覧表示できますが、inodeテーブルに格納されている情報、つまり、ファイルタイプ、ファイル長、ファイルアクセス許可などの取得、またはファイルを開くことはできません。そのためxには、ディレクトリに対する権限が必要です。

理由はここにありls -lls -Fls色分けされた出力などをせずに失敗するx許可単なるは一方で、ls成功します。

x許可だけでは、そのディレクトリ内の明示的な名前を与えられているiノードのアクセスを可能にxそのiノードとディレクトリエントリのメタデータのアクセスを検索することができます:

$ 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/c付与されている必要がありx許可を。

当然のことながら、ディレクトリエントリを作成するには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
$

ウィキペディアには、ファイルシステムのアクセス許可に関する記事の概要があります


すごい。/bin/ls d内容を表示します。ありがとう!
wrgrs

OK、それは再定義の問題でした(-Gメタデータ、したがってxパーマを必要とするカラー化された出力の場合)。したがって、とで私の準備をunalias lsunset CLICOLORます。unset -f lsそのような関数定義も削除するように追加する必要がありました。編集済み。
ccorn

その他のwiki リソース
loxaxs

4

ディレクトリを読み取るには、そのディレクトリに移動できる必要もあります(xビット)。したがって、何らかの方法でディレクトリにアクセスできるようにするには、少なくともrxが必要です。


2
いいえ、あなたはしません。ディレクトリが実行可能でない場合でも、ディレクトリ内のファイルls一覧表示できるはずです。
スティーブンキット

読み取り許可をオフのままにすることができます。これにより、ファイルにアクセスできるようになりますが、ディレクトリの内容を一覧表示することはできません。
クサラナンダ

@Kusalananda-良い点、確かに私は時々これを使用しています。
-Soruk

@Stephen Kitt-たぶんそれはSHOULDですが、実装はそうではないということです。
-Soruk

1
@Soruk、それで質問は残ります:なぜそうしないのですか?
スティーブンキット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.