Pourquoi / etc / passwd serait-il utilisé chaque fois que quelqu'un exécute la commande `ls -l`?

28

Lisez APUE , soyez curieux:

Le fichier de mot de passe est utilisé chaque fois qu'un utilisateur se connecte à un système UNIX et chaque fois que quelqu'un exécute une ls -lcommande.

Meule
la source
3
Pour info j'essaye strace ls -lplus tard, je vois une openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4déclaration.
Rick
7
Bien sûr, la réalité est plus complexe de nos jours. Ce n'est pas /etc/passwdsur les BSD. Un actif nscdchangera les choses; tout comme le NSS. Notez donc que cette question est basée sur une vision du monde de la 7e édition.
JdeBP
4
@JdeBP Ancient Programming in the Unix Environment , then?
Andrew Henle
@JdeBP Ce n'est pas? J'ai été surpris lorsque vous avez dit cela parce que je pensais que beaucoup de programmes (scripts et binaires) se briseraient qui reposent (peut-être à tort, mais toujours) sur la présence de / etc / passwd.
Peter - Rétablir Monica
Ce n'est pas le cas, car la lecture correcte de cette page de manuel, y compris sa section FICHIERS, le révélera. (-:
JdeBP

Réponses:

50

Le système de fichiers associe directement les valeurs numériques UID (User ID) et GID (Group ID) au fichier, pas le nom d'utilisateur et le nom de groupe (qui sont des chaînes). Ainsi, la ls -lcommande (et toute autre commande qui affiche l'utilisateur et le propriétaire du groupe d'un fichier) doit obtenir les noms d'utilisateur et de groupe quelque part. Le /etc/passwdfichier est l'une de ces sources (probablement la source originale et la plus courante). Le manuel le confirme - de PASSWD (5) (c'est-à-dire la page de manuel du /etc/passwdfichier):

de nombreux utilitaires, comme ls (1), l'utilisent pour mapper les ID utilisateur aux noms d'utilisateur

igal
la source
17
Pour compléter la réponse: POSIX spécifie l'option -npour ls. Cela empêche la traduction des UID et des GID en noms d'utilisateur et noms de groupe. J'ai testé ls -navec GNU core utils ' lset l'option a empêché d'accéder aux deux /etc/passwdet /etc/groupcomme prévu.
pabouk