Verwenden von "ls", um den tatsächlichen Namen der Dateieigentümer anzuzeigen

574
root

Unix-Benutzer können ihre echten Namen in angeben /etc/passwd/. Der fingerBefehl kann die echten Namen anzeigen. Können ls -ldiese echten Namen der Dateieigentümer neben den Dateien angezeigt werden?

Wenn lsdies nicht direkt möglich ist, wie kann dann die Ausgabe von ls -lthrough am besten durchgeleitet werden finger, um dieses Ergebnis zu erzielen? Klingt nach einem Job für awk- ls -l | fingerals Nachschlagetabelle zum Überschreiben der dritten Spalte von ls -l.

(Zugehörige Frage für den Fall, dass sich die echten Namen nicht in, fingersondern in einer Nachschlagetabelle befinden: Ersetzung von Text in der Nachschlagetabelle in Bash )

0
Warum stellen Sie zwei getrennte Fragen? Es sieht so aus, als würden Sie versuchen, ein Problem zu lösen, und Sie haben an zwei Ansätze gedacht. Vergleichen Sie [XY-Problem] (https://meta.stackexchange.com/a/66378/355310). Wäre es in Ordnung, wenn Sie einmal nach X gefragt hätten? und nur erwähnt, dass Sie denken, dass Y1 oder Y2 helfen würde. Die beste Lösung ist vielleicht irgendein Y3, das noch keiner von uns kennt. Warum also die zwei Fragen? Kamil Maciorowski vor 5 Jahren 1
Zwei Fragen, weil es sich um zwei verschiedene Einstellungen handelt. In einer Einstellung sind die Namen in "finger" verfügbar (und möglicherweise kann "ls" auf diese Informationen zugreifen). In der anderen Frage befinden sich die echten Namen in einer Datei, aber nicht in "Finger". root vor 5 Jahren 0
[Warum * nicht "ls" parsen?] (Http://unix.stackexchange.com/questions/128985/why-not-parse-ls) Das sollten Sie nicht versuchen: `ls -l | awk 'BEGIN } {$ 3 = map [$ 3]} 1'` Ich gehe davon aus, dass die dritte Spalte Ihres `ls -l'-Befehls den Benutzer enthält. Cyrus vor 5 Jahren 1
Wie oben erwähnt, parsen Sie nicht die Ausgabe von 'ls' (es ist für Leute, nicht für Maschinen) ... zusätzlich ist 'finger' nicht wirklich dafür gedacht ... bevorzugen Sie so etwas wie 'getent passwd $ { USER} `. Um es noch schlimmer zu machen, glaube ich nicht, dass das vierte Feld von passwd standardisiert ist ... siehe [GECOS] (https://en.wikipedia.org/wiki/Gecos_field) Attie vor 5 Jahren 0

1 Antwort auf die Frage

0
Fanatique

Sie können lsals @Cyrus analysieren, der in den Kommentaren erwähnt wird. Ich schlage jedoch ein einfaches Skript vor, das Sie als ausführbare Datei erstellen können:

while read -r line do user=`echo "$line" | awk ''` name=`getent passwd "$user" | cut -d ':' -f 5 | cut -d ',' -f 1` echo $line | sed "s/$user/$name/" done < <(ls -lh | tail -n +2) 

Die userVariable ruft den Benutzernamen des Eigentümers ab (aus der 3. Spalte der ls-Ausgabe), nameerhält den tatsächlichen Namen dieses Benutzernamens, und in der Ausgabe von lsersetzen wir einfach den Benutzernamen durch den echten Namen sed.

Ich habe es fingerin meinem Beispiel nicht verwendet, da das Parsing der /etc/passwdDatei weniger fehleranfällig ist und Sie auch kein externes Werkzeug benötigen. ( fingerist nicht standardmäßig unter Debian / Ubuntu installiert)

Beispielausgabe:

-rwxr-xr-x 1 Pavlin Nikolov fanatique 41 Aug 29 15:13 cpu.sh -rwxr-xr-x 1 Pavlin Nikolov fanatique 193 Aug 28 11:36 httpingwrap.sh -rwxr-xr-x 1 Pavlin Nikolov fanatique 3.8K Aug 14 15:36 imgconv.py -rwxr-xr-x 1 Pavlin Nikolov fanatique 504 Oct 19 16:04 lsp -rwxr-xr-x 1 Pavlin Nikolov fanatique 77 Aug 28 14:24 mg -rwxrwxrwx 1 Pavlin Nikolov fanatique 386 Sep 14 15:02 mon-install.sh -rwxr-xr-x 1 Pavlin Nikolov fanatique 589 Sep 11 11:55 ping-wrapper.py 

Beachten Sie, dass dies nicht die am besten aussehende Ausgabe ist, da sie nicht perfekt ausgerichtet ist, aber dennoch funktionieren sollte.

[Warum * nicht "ls" (und was tun stattdessen)?] (Https://unix.stackexchange.com/questions/128985/why-not-parse-ls-and-what-do-to-instead) ) ... `ls -lh | tail -n + 2 ist nur der Anfang ... Sie sollten _ - minimum_uid-gid verwenden, wenn Sie versuchen :-) Attie vor 5 Jahren 0