'x'実行ビットセットなしでディレクトリ内容を読み取る

'x'実行ビットセットなしでディレクトリ内容を読み取る

ディレクトリ内の他のすべてのユーザーに対する「x」実行権限と書き込み権限を削除しました。 /u/permtst/テスト/ビット/。ディレクトリの詳細は、ユーザー:permtstとグループ:permtstです。

permtst@localhost(nyc):~/test/bits> ls -la
total 8
drwxrw-r-- 2 permtst permtst 4096 Aug  3 12:51 .
drwxrwsr-x 8 permtst permtst 4096 Aug  3 11:52 ..
-rw-rw-r-- 1 permtst permtst    0 Aug  3 11:56 test_file
-rw-rw-r-- 1 permtst permtst    0 Aug  3 11:56 test_file2

ユーザーモタマリ属していないライセンステストグループ。

~から他の人読み取り権限がある場合、ディレクトリーのlsはディレクトリー内のファイルのリストを提供する必要があります。ただし、次の内容が表示された場合は、No Access が印刷され、ファイルのリストも期待どおりに印刷されます。

私の質問はエラーが印刷される理由です。ls: cannot access '/u/permtst/test/bits/test_file': Permission denied

motamari@localhost:~% ls /u/permtst/test/bits/
ls: cannot access '/u/permtst/test/bits/test_file': Permission denied
ls: cannot access '/u/permtst/test/bits/test_file2': Permission denied
test_file  test_file2

答え1

rディレクトリにないと、実際にファイル名を一覧表示できますが、ファイルを呼び出すことができないため(*)xファイルに関するその他の情報を取得できません。stat()

-Fまたは、などの短いリストの場合でもファイルの種類を決定する必要があるオプションで始まる場合、--colorエラーメッセージと動作はGNU lsが正確に表示するのと同じです。lsオプションのある項目にエイリアスを追加した可能性がありますalias ls\lsを使用するかプログラムを実行すると、エイリアスを無視できます/bin/ls。を使用する-lと、非常に混乱して見える一連の疑問符も得られます。

$ mkdir dir; touch dir/file.txt; chmod a-x dir;
$ ls dir
ls: cannot access 'dir/file.txt': Permission denied
file.txt
$ \ls dir
file.txt
$ ls -l dir
ls: cannot access 'dir/file.txt': Permission denied
total 0
-????????? ? ? ? ?            ? file.txt
$ alias ls
alias ls='ls -vF --color=auto'

ただし、動作は実装によって異なります。たとえば、Busybox はエラーを見落とし、リストを印刷しません (ここでは ORlsも使用しません )。-F--color

$ busybox ls dir
ls: dir/file.txt: Permission denied

(*一部のシステムではファイル形式も提供していますが、ここではreaddir()なぜこれが十分でないのかわかりませんls。)

関連情報