29

Read from APUE, just feel curious:

The password file is used every time a user logs in to a UNIX system and every time someone executes an ls -l command.

5
  • 3
    FYI I try strace ls -l later on, I see a openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 statement.
    – Rick
    Commented Mar 8, 2019 at 6:47
  • 7
    Of course, reality is more complex nowadays. It's not /etc/passwd on the BSDs. An active nscd will change things; as will the NSS. So note that this question is based upon a 7th Edition worldview.
    – JdeBP
    Commented Mar 8, 2019 at 7:55
  • 4
    @JdeBP Ancient Programming in the Unix Environment, then? Commented Mar 8, 2019 at 13:22
  • @JdeBP It isn't? I wa surprised when you said that because I'd think that a lot of programs (scripts and binaries) would break which rely (perhaps wrongly, but still) on the presence of /etc/passwd. Commented Mar 9, 2019 at 12:02
  • It isn't, as reading that manual page properly, including its FILES section, will reveal. (-:
    – JdeBP
    Commented Mar 11, 2019 at 12:39

1 Answer 1

50

The file-system directly associates the numerical UID (User ID) and GID (Group ID) values with the file, not the user name and group name (which are strings). So the ls -l command (and any other command that displays the user and group owner of a file) need to get the user and group names from somewhere. The /etc/passwd file is one such source (probably the original and most common source). The manual bears this out - from PASSWD (5) (i.e. the man page for the /etc/passwd file):

many utilities, like ls(1) use it to map user IDs to usernames

1
  • 17
    To complement the answer: POSIX specifies option -n for ls. This prevents translation of UIDs and GIDs to usernames and group names. I have tested ls -n with GNU core utils' ls and the option prevented accessing both /etc/passwd and /etc/group as expected. Commented Mar 8, 2019 at 8:54

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .