Warum sollte / etc / passwd jedes Mal verwendet werden, wenn jemand den Befehl `ls -l` ausführt?

28

Lesen Sie aus APUE , fühlen Sie sich einfach neugierig:

Die Kennwortdatei wird jedes Mal verwendet, wenn sich ein Benutzer bei einem UNIX-System anmeldet und wenn jemand einen ls -lBefehl ausführt .

Rick
quelle
3
Zu Ihrer Information, ich versuche es strace ls -lspäter, ich sehe eine openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4Aussage.
Rick
7
Natürlich ist die Realität heutzutage komplexer. Es liegt nicht /etc/passwdan den BSDs. Ein Aktiver nscdwird Dinge verändern; wie wird die NSS. Beachten Sie also, dass diese Frage auf einer Weltanschauung der 7. Ausgabe basiert.
JdeBP
4
@JdeBP Alte Programmierung in der Unix-Umgebung ?
Andrew Henle
@JdeBP Ist es nicht? Ich war überrascht, als Sie das sagten, weil ich denke, dass viele Programme (Skripte und Binärdateien) kaputt gehen würden, die (vielleicht falsch, aber immer noch) auf die Anwesenheit von / etc / passwd angewiesen sind.
Peter - Setzen Sie Monica
Dies ist nicht der Fall, da das ordnungsgemäße Lesen dieser Handbuchseite, einschließlich des Abschnitts DATEIEN, Aufschluss geben wird. (-:
JdeBP

Antworten:

50

Das Dateisystem ordnet der Datei direkt die numerischen Werte für UID (Benutzer-ID) und GID (Gruppen-ID) zu, nicht den Benutzernamen und den Gruppennamen (die Zeichenfolgen sind). Der ls -lBefehl (und jeder andere Befehl, der den Benutzer und den Gruppeneigentümer einer Datei anzeigt) muss also die Benutzer- und Gruppennamen von irgendwoher abrufen. Die /etc/passwdDatei ist eine solche Quelle (wahrscheinlich die ursprüngliche und häufigste Quelle). Das Handbuch zeigt dies - aus PASSWD (5) (dh die Manpage für die /etc/passwdDatei):

Viele Dienstprogramme wie ls (1) verwenden es, um Benutzernamen Benutzer-IDs zuzuordnen

igal
quelle
17
Zur Ergänzung der Antwort: POSIX gibt die Option -nfür an ls. Dies verhindert die Übersetzung von UIDs und GIDs in Benutzernamen und Gruppennamen. Ich habe ls -nmit GNU-Kern-Utils getestet lsund die Option hat den Zugriff auf beide /etc/passwdund /etc/groupwie erwartet verhindert.
Pabouk