用户是否需要可执行权限才能运行 du(磁盘使用情况)?

用户是否需要可执行权限才能运行 du(磁盘使用情况)?

我正在观察以下行为,并想知道这是否是预期的。

我正在尝试在.拥有的目录上运行磁盘使用情况 ( du) 。user2test_directoryuser1

如果我更改权限以允许每个人完全访问(使用chmod 777 test_directory),则user1和都user2能够按预期正确查看磁盘使用情况:

在此输入图像描述

但是,如果我限制其他用户的可执行访问权限(使用chmod 776 test_directory),则user2无法运行du并发生权限错误:

在此输入图像描述

此外,在出现错误的情况下,目录显示为 4096 字节大小。

  1. 为什么用户需要可执行权限才能使用 du 请求磁盘使用情况?我天真地期望只需要读取权限(即chmod 774)。其实看起来两个都运行 du (即 )需要读取和执行权限chmod 775

  2. 为什么在这种情况下目录大小默认为 4096 字节?

谢谢!

答案1

如果没有对 的执行/访问( x)权限dir,则无法调用stat()dir/foo.bin也无法看到它有多大。仅具有读取 ( r) 权限后,您只能列出文件名,但一般情况下您获得的只是名称。

在某些系统中,readdir()可能会提供比名称更多的信息,但我不确定是否有任何系统可以提供文件大小。 Linux 文件系统可以给出文件类型,该文件类型在 inode 和目录项的生命周期内永远不会改变。但有些东西不断变化,比如大小很难从文件系统中的目录中获取,其中索引节点与目录列表是分开的。

即使你确实得到了 的大小readdir(),仅仅阅读dir/也不会得到 的大小dir/sub/bar.bin,你需要阅读dir/sub它。如果没有 的访问权限dir,您就不能。

目录的大小只是文件列表的大小,不包括文件本身的大小。所以它并没有告诉你太多。 4 kB 对于 ext4 来说很常见,它只是一个文件系统块,是文件系统需要分配的最小值。与文件相同,您只需x对其所在目录的权限即可获取大小。 (例如,您需要xon才能获得或dir/的大小。)dir/file.txtdir/subdir/

所以是的,您需要读取和访问权限才能有效扫描整个目录树。

也可以看看:执行与读取位。 Linux 中的目录权限如何工作?

相关内容