![ユーザーにdu(ディスク使用量)を実行するには実行権限が必要ですか? [コピー]](https://linux33.com/image/216411/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%ABdu%EF%BC%88%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E4%BD%BF%E7%94%A8%E9%87%8F%EF%BC%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E5%AE%9F%E8%A1%8C%E6%A8%A9%E9%99%90%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
次の動作を観察し、これが予想されるかどうか疑問に思います。
du
所有するディレクトリでディスク使用量()を実行しようとしています。user2
test_directory
user1
chmod 777 test_directory
誰もがフルアクセス(使用)を許可するように権限を変更するとuser1
、user2
予想どおりにディスク使用量を正しく表示できます。
ただし、他のユーザーの実行可能アクセスを制限すると(使用してchmod 776 test_directory
)user2
実行が失敗し、du
権限エラーが発生します。
また、エラーが発生した場合、ディレクトリサイズは4096バイトとして表示されます。
duを使用してディスクの使用を要求するためにユーザーに実行権限が必要なのはなぜですか?私は素直に読み取り権限だけが必要になると予想しました(例
chmod 774
:)。実際にはそうだ両方du(つまり)を実行するには読み取りおよび実行権限が必要ですchmod 775
。この場合、ディレクトリサイズがデフォルトで4096バイトに設定されているのはなぜですか?
ありがとうございます!
答え1
実行/アクセス(x
)権限がないと呼び出せず、dir
サイズstat()
がdir/foo.bin
どれだけ大きいかわかりません。読み取り ( r
) 権限だけでファイル名だけを一覧表示できますが、通常取得できるのは名前だけです。
一部のシステムでは、readdir()
名前より多くの情報を提供できますが、ファイルサイズを提供できるかどうかはわかりません。 Linuxファイルシステムには、inodeおよびディレクトリエントリの存続期間中に絶対に変更されないファイル形式を提供できます。ただし、inodeがディレクトリリストから分離されているファイルシステムのディレクトリからサイズを取得するのが難しいなど、一部の変更は引き続き変わります。
サイズを知っていてもreaddir()
読めるだけではサイズが分からないので読まなければなりdir/
ません。アクセス権がなければできません。dir/sub/bar.bin
dir/sub
dir
ディレクトリのサイズはファイル自体のサイズではなく、ファイルリストのサイズにすぎません。だからそれはあなたに多くを教えてくれません。 4kBはext4に共通で、ファイルシステムブロックにすぎず、ファイルシステムが割り当てる必要がある最小値です。ファイルと同様に、x
サイズを取得するには、そのファイルが存在するディレクトリに対する権限だけが必要です。 (たとえば、またはのサイズをx
取得するにはonが必要です。)dir/
dir/file.txt
dir/subdir/
はい。ディレクトリツリー全体を効果的に検索するには、読み取りとアクセス権が必要です。