Ich füge das zusammen, aber es ist scheiße: (z. B. magische Zahlen drin, Textanalyse ... boo!)
%Vor%Was ist der richtige Weg, dies zu tun?
Einige Unix-Systeme verwenden nicht /etc/passwd
oder Benutzer, die dort nicht angegeben sind. Sie sollten getent passwd
anstelle von /etc/passwd
verwenden.
Mein System hat auch Benutzer, die deaktiviert sind und sich nicht mehr einloggen können, wenn ihr Login-Befehl auf /bin/false
oder /usr/sbin/nologin
gesetzt ist. Sie möchten sie wahrscheinlich auch ausschließen.
Hier ist, was für mich funktioniert, einschließlich arheops awk Befehl und ansgar's Code, um das Minimum und Maximum von login.defs
zu erhalten:
Extrahieren Sie die minimalen und maximalen Benutzer-IDs aus /etc/login.defs
und wählen Sie dann die Benutzer mit IDs zwischen diesen Rändern aus /etc/passwd
:
Hier ist ein weiterer Ansatz, der nur ein externes Programm, getent
(vorgeschlagen von @AnsgarWiechers) hervorbringt, so dass sowohl lokale als auch vernetzte passwd-Datenbanken verwendet werden. Dieser reduziert die Anzahl der Gabeln auf nur eine für getent
selbst. Seine Portabilität ist jedoch etwas eingeschränkt, da es bash4 erfordert.
Sie versuchen also nur, eine Liste aller Benutzer von / etc / passwd zu erhalten? Wenn dem so ist, glaube ich, dass dies eine einfachere Lösung wäre:
%Vor%Bearbeiten:
Wenn Sie nur eine Liste von benutzerdefinierten Benutzern (nicht die Systembenutzer) haben möchten, können Sie eine der folgenden verwenden:
%Vor%^ Dies setzt voraus, dass Ihr System 1000 und mehr für UID und GID für benutzerdefinierte Benutzer verwendet
%Vor%^ Dies setzt voraus, dass jeder benutzerdefinierte Benutzer ein Home-Verzeichnis hat.
Andere Lösungen hängen von ausführlicheren Kriterien und Ihren Systemeinstellungen ab.
Hier ist eine Vereinfachung von @ StephenOstermillers Antwort, die es mit nur zwei Prozessen erledigt. Ich denke, es ist auch einfacher zu lesen (vorausgesetzt, Sie sind vertraut mit der awk NR==FNR
idiom).
Die verschiedenen Split-Muster in den beiden Eingängen sind ein bisschen Warzen; vielleicht könntest du das irgendwie eleganter beheben.