Por que o / etc / passwd seria usado toda vez que alguém executa o comando `ls -l`?

28

Leia no APUE , apenas fique curioso:

O arquivo de senha é usado toda vez que um usuário efetua login no sistema UNIX e toda vez que alguém executa um ls -lcomando.

Rick
fonte
3
Para sua informação, eu tento strace ls -lmais tarde, vejo uma openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4declaração.
Rick
7
Claro, a realidade é mais complexa hoje em dia. Não está /etc/passwdnos BSDs. Um ativo nscdmudará as coisas; assim como o NSS. Portanto, observe que essa pergunta se baseia em uma visão de mundo da 7ª Edição.
JdeBP 8/03
4
@JdeBP Programação antiga no ambiente Unix , então?
Andrew Henle
@JdeBP Não é? Fiquei surpreso quando você disse isso porque achava que muitos programas (scripts e binários) seriam interrompidos, os quais dependem (talvez de maneira errada, mas ainda assim) da presença de / etc / passwd.
Peter - Restabelece Monica
Não é, como a leitura apropriada da página do manual, incluindo sua seção FILES, será revelada. (-:
JdeBP 11/03

Respostas:

50

O sistema de arquivos associa diretamente os valores numéricos de UID (ID do usuário) e GID (ID do grupo) ao arquivo, não o nome do usuário e o nome do grupo (que são cadeias). Portanto, o ls -lcomando (e qualquer outro comando que exibe o usuário e o proprietário do grupo de um arquivo) precisa obter o nome do usuário e do grupo de algum lugar. O /etc/passwdarquivo é uma dessas fontes (provavelmente a fonte original e a mais comum). O manual confirma isso - de PASSWD (5) (ou seja, a página de manual do /etc/passwdarquivo):

muitos utilitários, como ls (1), usam-no para mapear IDs de usuário para nomes de usuário

igal
fonte
17
Para complementar a resposta: POSIX especifica a opção -npara ls. Isso impede a conversão de UIDs e GIDs em nomes de usuários e nomes de grupos. Eu testei ls -ncom o GNU core utils ' lse a opção impediu o acesso a ambos /etc/passwde /etc/groupconforme o esperado.
pabouk 8/03