
Ich baue einen Spielzeug-Systemmonitor, für den ich mehrere Dateien aus analysiere /proc
. Unter anderem analysiere ich die uid
für jeden Prozess aus /proc/$pid/status
. Später ordnet ich die UID des Prozesses dem Benutzernamen zu, den ich aus analysiert habe /etc/passwd
. Aber in einigen seltenen Fällen stürzt mein Programm ab, weil es den Benutzernamen nicht finden kann. Muss ich auch andere Dateien analysieren, um eine vollständige Zuordnung von UID zu Benutzername zu erhalten?
Antwort1
Linux unterstützt modulare Kontodatenbanken. Zusätzlich zur „files“-Datenbank (/etc/passwd) können Benutzerkonten in SSSD, in BDB, in einer Netzwerkdatenbank (LDAP, YP, NIS, Hesiod, Active Directory, SQL) gespeichert oder sogar dynamisch vom Datenbankmodul selbst generiert werden (systemd DynamicUsers).
Damit dies funktioniert, sollten SieniemalsAnalysieren Sie /etc/passwd und andere Dateien direkt (es sei denn, Sie erstellen speziell ein Tool zur lokalen Benutzerverwaltung).
Sie sollten die von libc bereitgestellten Funktionen verwenden, wiegetpwuid()odergetgrgid()um Benutzernamen und UIDs nachzuschlagen. Von Shellskripten aus sollten Sie die getent
- oder id
CLI-Tools verwenden, um Nachschlagevorgänge durchzuführen.
Generell sollte es auch nie zu einem Absturz kommen, wenn die Zuordnung fehlschlägt, da es möglich ist, dass das Konto gelöscht wurde oder dass der Prozess zu einem Container gehört, der einen eigenen UID-Bereich hat. Zeigen Sie in diesem Fall einfach die UID an.