为什么每次有人执行`ls -l`命令时都会使用/etc/passwd?

Ric*_*ick 28 ls passwd

APUE阅读,只是感到好奇:

每次用户登录 UNIX 系统和每次有人执行ls -l命令时都会使用密码文件。

iga*_*gal 50

文件系统直接将数字 UID(用户 ID)和 GID(组 ID)值与文件相关联,而不是用户名和组名(它们是字符串)。因此该ls -l命令(以及任何其他显示文件的用户和组所有者的命令)需要从某处获取用户和组名。该/etc/passwd文件就是这样一种来源(可能是原始和最常见的来源)。手册证实了这一点 - 来自PASSWD (5)(即/etc/passwd文件的手册页):

许多实用程序,例如 ls(1) 使用它来将用户 ID 映射到用户名

  • 补充答案:POSIX 为 `ls` 指定了选项 `-n`。这可以防止将 UID 和 GID 转换为用户名和组名。我已经用 GNU 核心实用程序的 `ls` 测试了 `ls -n`,并且该选项阻止了对 `/etc/passwd` 和 `/etc/group` 的访问。 (17认同)