.png)
in der Datei /etc/passwd
haben wir das sogenannte GECOS fields
(steht für „General Electric Comprehensive Operating System“), das heißt:
username:password:userid:groupid:gecos:home-dir:shell
Dabei GECOS
wird wie folgt unterteilt:
:FullName,RoomAddress,WorkPhone,HomePhone,Others:
Und Others
werden durch beliebig viele Kommas getrennt:
:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:
Auf den man chfn
Seiten ist zu lesen:
Das andere Feld wird zum Speichern von Abrechnungsinformationen verwendet, die von anderen Anwendungen verwendet werden.
Was ist nun für einen Anwendungsentwickler (ich interessiere mich für C language
und system calls
/oder bash script
) der beste Weg, an diese Informationen zu gelangen?
Und wenn man nur die Bash
Umgebung berücksichtigt, da dieser finger
Befehl die others
Felder nicht anzeigen kann (oder zumindest sehe ich nicht, wie), welche anderen Befehle können das? Ich weiß, dass sie sie chfn
nicht nur anzeigen, sondern auch ändern können. Was ist, wenn man sie nur ausgeben soll stdout
?
Antwort1
Die beste Methode, die ich gefunden habe, ist die Verwendung, getent
da diese mit LDAP/NIS oder anderen Methoden nicht lokaler Benutzer funktioniert.
getent passwd $UID| awk -F ":" '{print $5}'
Antwort2
Beispielsweise können Sie in einem Bash-Skript das fünfte Feld der Datei /etc/passwd
mit awk/gawk drucken:
awk -F ":" '{print $5}' /etc/passwd
Die Option -F fs
verwendet fs als Trennzeichen für Eingabefelder (in diesem Fall :
).
Weitere Informationen finden Sie beispielsweise auf der Homepage von GNU awk [1] .
Awk hat die Funktion split()
, einen String aufzuteilen (wobei Sie in diesem Fall das 5. Feld als String und das als Trennzeichen verwenden ,
). Lassen Sie sich von einer anderen Antwort dazu inspirieren [2]... .
Antwort3
Sie können einfach zwei verschachtelte Schnittbefehle verwenden:
- zuerst mit ":" als Feldtrennzeichen, schneiden Sie Feld 1 und 5 ab; und
- zweitens mit "," als Feldtrennzeichen, schneiden Sie die Felder 1 und 5-N ab;