許可ビットを含むディレクトリがあります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()権限が必要です。そして、あなたはそれを持っていません。