Answers:
文件系统直接将数字UID(用户ID)和GID(组ID)值与文件关联,而不是与用户名和组名(字符串)关联。因此,该ls -l
命令(以及显示文件的用户和组所有者的任何其他命令)都需要从某个位置获取用户名和组名。该/etc/passwd
文件就是这样的一种来源(可能是原始且最常见的来源)。手册对此进行了说明-从PASSWD(5)(即/etc/passwd
文件的手册页)中进行了说明:
许多实用程序,例如ls(1)都使用它来将用户ID映射到用户名
-n
的ls
。这样可以防止将UID和GID转换为用户名和组名。我已经ls -n
使用GNU core utils 进行了测试,ls
并且该选项阻止了两者的访问,/etc/passwd
并且无法/etc/group
按预期进行访问。
strace ls -l
,我看到一条openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
声明。