¿Por qué se usaría / etc / passwd cada vez que alguien ejecuta el comando `ls -l`?

28

Lea desde APUE , solo sienta curiosidad:

El archivo de contraseña se usa cada vez que un usuario inicia sesión en un sistema UNIX y cada vez que alguien ejecuta un ls -lcomando.

Almiar
fuente
3
FYI lo intento strace ls -lmás tarde, veo una openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4declaración.
Rick
77
Por supuesto, la realidad es más compleja hoy en día. No está /etc/passwden los BSD. Un activo nscdcambiará las cosas; como lo hará el NSS. Tenga en cuenta que esta pregunta se basa en una cosmovisión de la 7ª Edición.
JdeBP
44
@JdeBP Programación antigua en el entorno Unix , entonces?
Andrew Henle
@JdeBP ¿ No es así? Me sorprendió cuando dijiste eso porque pensaría que se romperían muchos programas (scripts y binarios) que dependen (tal vez erróneamente, pero aún) de la presencia de / etc / passwd.
Peter - Restablece a Monica el
No lo es, como lo revelará la página del manual correctamente, incluida su sección de ARCHIVOS. (-:
JdeBP

Respuestas:

50

El sistema de archivos asocia directamente los valores numéricos de UID (ID de usuario) y GID (ID de grupo) con el archivo, no el nombre de usuario y el nombre del grupo (que son cadenas). Por lo tanto, el ls -lcomando (y cualquier otro comando que muestre el usuario y el propietario del grupo de un archivo) debe obtener los nombres de usuario y grupo de alguna parte. El /etc/passwdarchivo es una de esas fuentes (probablemente la fuente original y más común). El manual lo confirma: de PASSWD (5) (es decir, la página del manual del /etc/passwdarchivo):

muchas utilidades, como ls (1) lo usan para asignar ID de usuario a nombres de usuario

igal
fuente
17
Para complementar la respuesta: POSIX especifica la opción -npara ls. Esto evita la traducción de UID y GID a nombres de usuario y nombres de grupo. He probado ls -ncon GNU core utils ' lsy la opción evitó el acceso a ambos /etc/passwdy /etc/groupcomo se esperaba.
Pabouk