「ls」が動作しても「許可拒否」エラーが発生しますか? [コピー]

「ls」が動作しても「許可拒否」エラーが発生しますか? [コピー]

許可ビットを含むディレクトリがありますr

dr-------- 3 robert robert 4096 2017-12-17 03:47 dir

このディレクトリには2つのファイルとディレクトリがあります。

file 1.txt  file 2.txt  subdir

ls dirアカウントでコマンドを実行すると、robertディレクトリの内容の横にエラーメッセージが表示されます。

ls: cannot access dir/file 1.txt: Permission denied
ls: cannot access dir/file 2.txt: Permission denied
ls: cannot access dir/subdir: Permission denied
file 1.txt  file 2.txt  subdir

lsディレクトリの内容は正常に表示されますが、エラーが表示されるのはなぜですか?

答え1

lsディレクトリ自体からreaddir()(または)を呼び出すことは、ディレクトリを「読み込む」のと同じです。一部のUnixでは、ディレクトリがファイルであるかのように実際getdents()の呼び出しでこれを実装すると思います。read()これはディレクトリへの読み取りアクセス権があるため機能しますが、ファイル名のみを提供します。

それ以外にも、lsファイルの種類を探していることがよくあります(他の種類を別の色で表示したり、後ろにスラッシュやアスタリスクを追加するなどls -F)。ただし、検索タイプには通常、stat()ファイル自体への呼び出しが必要であり、+x実際にファイルを開くために必要なのと同じ方法でディレクトリに対するaccess()権限が必要です。そして、あなたはそれを持っていません。

関連情報