Der „andere“ Finger (GECOS-Felder unter /etc/passwd)

Der „andere“ Finger (GECOS-Felder unter /etc/passwd)

in der Datei /etc/passwdhaben 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 GECOSwird wie folgt unterteilt:

:FullName,RoomAddress,WorkPhone,HomePhone,Others:

Und Otherswerden durch beliebig viele Kommas getrennt:

:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:

Auf den man chfnSeiten 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 languageund system calls/oder bash script) der beste Weg, an diese Informationen zu gelangen?

Und wenn man nur die BashUmgebung berücksichtigt, da dieser fingerBefehl die othersFelder nicht anzeigen kann (oder zumindest sehe ich nicht, wie), welche anderen Befehle können das? Ich weiß, dass sie sie chfnnicht 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, getentda 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/passwdmit awk/gawk drucken:

awk -F ":" '{print $5}' /etc/passwd

Die Option -F fsverwendet 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;

verwandte Informationen