Wie kann ich alle von mir erstellten Benutzer auflisten? Ich habe es versucht cat /etc/passwd
und es listet nur eine Menge Sachen auf.
quelle
Wie kann ich alle von mir erstellten Benutzer auflisten? Ich habe es versucht cat /etc/passwd
und es listet nur eine Menge Sachen auf.
Menschliche Benutzer haben UIDs ab 1000, sodass Sie diese Tatsache verwenden können, um die Nicht-Menschen herauszufiltern:
cut -d: -f1,3 /etc/passwd | egrep ':[0-9]{4}$' | cut -d: -f1
Dies schneidet das erste (Benutzername) und dritte (UID) durch Doppelpunkte getrennte Feld ab /etc/passwd
, filtert nach den resultierenden Zeilen, die mit einem Doppelpunkt und vier Ziffern enden, schneidet dann das erste (Benutzername) Feld ab und hinterlässt eine Liste von Benutzer mit UIDs zwischen 1000 und 9999.
Wenn Sie mehr als neuntausend Benutzer auf Ihrem System haben, nobody
schlägt dies fehl - es ist jedoch erforderlich, das Ergebnis auf vierstellige UIDs zu beschränken, um nicht zu fangen (UID 65534).
Das macht so ziemlich das, was die akzeptierte Antwort macht, nur in einem Befehl statt in drei:
awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
Und dank Karel in den Kommentaren wird der nobody
User auch herausgefiltert.
Ich persönlich benutze gerne nur:
Zugegebenermaßen ist dies keine Liste der Benutzer, sondern eine Liste ihrer Home-Verzeichnisse. Derzeit vorhandene Benutzer auf dem System verfügen über
/home
Basisverzeichnisse. Möglicherweise werden jedoch auch die Basisverzeichnisse früherer Benutzer angezeigt, die entfernt wurden.Dies funktioniert für meine Zwecke und möglicherweise auch für Ihre. Wenn Sie beispielsweise ein Benutzerkonto löschen möchten, das nicht mehr vorhanden ist (
nonexistent-user
), führen Sie den Befehl ausEs wird Ihnen lediglich mitgeteilt, dass dieser Benutzer nicht existiert.
quelle
/home
externes Basisverzeichnis hat (das nicht mit einem Symbol verknüpft ist/home
), als dass ein menschlicher Benutzer eine UID von unter 1000 hat (schließlich ist dies die häufigste Methode, um die Auflistung eines Display-Managers zu verhindern einen Benutzer auf dem Anmeldebildschirm (was manchmal für einen menschlichen Benutzer gemacht werden kann). Der einzige, relativ geringfügige Nachteil besteht darin, dass erlost+found
auf Systemen mit separaten/home
Partitionen aufgeführt wird.useradd --no-create-home username
?useradd --no-create-home
Basisverzeichnis könnte bereits vorhanden sein oder kurz danach erstellt werden -, aber diels /home
Methode funktioniert in diesen Fällen einwandfrei .Während es wie eine klare Idee scheinen mag, gibt es tatsächlich Mehrdeutigkeiten in der Bedeutung des menschlichen Benutzers . Ist ein Benutzerkonto absichtlich vor dem Anmeldebildschirm verborgen, weil es nur für spezielle Zwecke (aber von Menschen) als menschlicher Benutzer verwendet wird? Wie wäre es mit dem
ubuntu
Benutzer (UID 999) auf der Live-CD? Und Gastkonten in Ubuntu werden sofort erstellt und nach dem Abmelden gelöscht. sind sie menschliche Benutzer? Weitere Beispiele könnten ausgearbeitet werden.Daher ist es angemessen, dass mehrere, nicht äquivalente Antworten gegeben wurden. Saige Hamblins Lösung für das Laufen
ls /home
ist das, was die Leute tatsächlich tun, und wenn Sie kein Skript schreiben, sollten Sie das wahrscheinlich nur verwenden.Herstellung
ls /home
robusterAber vielleicht haben Sie Benutzer, die entfernt wurden, in denen jedoch noch private Verzeichnisse vorhanden sind
/home
, und Sie müssen vermeiden, sie aufzulisten. Oder Sie müssen aus einem anderen Grund sicherstellen, dass nur die Einträge aufgeführt werden/home
, die den tatsächlichen Konten entsprechen.In diesem Fall empfiehlt vorbei ich die Namen von allem , was in
/home
zugetent
(zum Abrufen derpasswd
Einträge der Nutzer mit diesen Namen), dann Isolat und Anzeige nur den Benutzernamen Feld (mitgrep
,sed
oderawk
, wie pro Ihre Präferenz). Jeder von diesen wird tun:Dies sollte gut funktionieren, da Sie keine Benutzerkonten mit Leerzeichen oder Steuerzeichen im Namen haben sollten. kann nicht, ohne Ubuntu neu zu konfigurieren, um es zu erlauben ; und wenn Sie dies tun, haben Sie größere Probleme. Daher sind die üblichen Probleme beim Parsen
ls
nicht anwendbar. Aber auch wenn es hier wirklich in Ordnung ist, wenn Sie Befehlssubstitutionen alsls
ästhetisch unangenehm oder nur als schlechte Angewohnheit ansehen, können Sie Folgendes bevorzugen:Diese unterstützen auch keine Leerzeichen oder Steuerzeichen. Ich biete sie nur an, weil sie
$(ls /home)
falsch aussieht, auch wenn sie richtig ist, und so viele Benutzer in die falsche Richtung reibt. In den meisten Situationen gibt es gute Gründe, das Parsen zu vermeidenls
, und in diesen Situationen ist das Parsenbasename -a
normalerweise nur geringfügig weniger schlecht. In dieser Situation sind beide Zeichen jedoch in Ordnung , da die Anzahl der in Benutzernamen vorkommenden Zeichen begrenzt ist .Erklärung, Vor- und Nachteile
Ich benutze es
getent
hauptsächlich, weil es Benutzernamen als Argumente akzeptiert, um seine Ausgabe einzuschränken, aber auch, weil es etwas universeller ist als/etc/passwd
direkt zu untersuchen , falls Authentifizierungsmöglichkeiten und die Passwortdatenbank von Netzwerkdiensten bereitgestellt werden.Diese Methode hat den zusätzlichen Vorteil,
ls /home
dass sie auf Systemen mit einer separaten/home
Partitionlost+found
normalerweise in der Ausgabe von angezeigt wirdls /home
.lost+found
wird nur angezeigt, wenn zufällig ein Benutzer (menschlich oder nicht) angerufen wirdlost+found
, was unwahrscheinlich ist.ls /home
ist das in Ordnung - Sie wissen, dass Sie keinen menschlichen Benutzer haben, der angerufen wirdlost+found
.In seltenen Fällen führt diese Methode (in einer der oben genannten Varianten) zu einer unbefriedigenden Ausgabe:
/home
oder gar nicht vorhanden ist, bedeutet dies, dass das Konto keinen menschlichen Benutzer darstellt. Diese Methode listet nur Benutzer auf, in denen sich ein Verzeichnis mit demselben Namen befindet/home
./home
dem Home - Verzeichnis nicht eigentlich niemandes sind, und sie zufällig die gleichen Namen wie ein bestehenden nicht-menschlichen Benutzer haben - oder aus Worten bestehen durch Leerzeichen getrennt, ein oder mehrere davon haben den gleichen Namen als vorhandener nichtmenschlicher Benutzer - dann können einige nichtmenschliche Benutzer in die Ausgabe einbezogen werden.(Diese Methode kann mit einer Schleife und separaten
getent
Aufrufen implementiert werden , sodass die Wortteilung keine falschen Ausgaben erzeugt. Die Komplexität ist jedoch nicht gewährleistet. Grundsätzlich/home
gilt diese Methode , wenn Sie sie nicht als Speicherort für die privaten Verzeichnisse der Benutzer verwenden keine zuverlässige Ausgabe erzeugen.)Vereinfachen der UID-Überprüfung
Wenn Sie sich für eine Methode entscheiden, die Benutzer-IDs überprüft, um sicherzustellen, dass sie für Konten, die Menschen darstellen, im wahrscheinlichen Bereich liegen, wie in der akzeptierten Antwort oder der Antwort von Oli , dann schlage ich dies der Kürze halber vor:
Dies verwendet einen regulären Perl-Ausdruck (
-P
), um Folgendes anzuzeigen :^
), die kein:
s ([^:]+
) enthält - dies ist das erste Feld, ebenso:
wie das Feldtrennzeichen inpasswd
(?=
)
) das Passwortfeldx
- es sollte immer so seinx
, da in Ubuntu Passwort-Hashes in dershadow
Datenbank gespeichert werden, nicht in der weltlesbarenpasswd
Datenbank:\d{4}:
).Dies ist somit eine deutlich kürzere und etwas einfachere Variante der Technik in der akzeptierten Antwort . (Die dort beschriebene Technik funktioniert auch einwandfrei und hat den Vorteil, dass sie auf Nicht-GNU / Linux-Systeme portierbar ist,
grep
die nicht unterstützt werden-P
.)Überprüfung des "menschlichen" UID-Bereichs
Wenn Sie sehr hohe UIDs berücksichtigen und
nobody
explizit nachsehen möchten , können Sie die Methode in Olis Antwort verwenden . Möglicherweise möchten Sie jedoch überlegen, ob Benutzer mit sehr hohen UIDs tatsächlich als Benutzer angenommen werden sollten oder ob es wahrscheinlicher ist, dass es sich bei ihnen um einen anderen nicht-menschlichen Spezialbenutzer handelt (z. B.nobody
). In der Praxis sind solche Benutzer - abgesehennobody
davon - ungewöhnlich, so dass dies in Wirklichkeit ein Urteilsspruch von Ihrer Seite ist.Ein möglicher Kompromiss besteht darin, Benutzer in dem Bereich von UIDs aufzulisten , die tatsächlich neu erstellten Nicht-Systembenutzern zugewiesen werden. Sie können dies überprüfen in
adduser.conf
:Es gibt zwei Möglichkeiten, Benutzer aufzulisten, deren UIDs zwischen 1000 und 29999 liegen:
quelle
basename
ist hässlich. Es ist nicht besser alsls
. Der Hauptgrund, den wir nicht analysieren, ist, dass es sich um eine Arbeit handelt, die mit anderen Werkzeugen viel sicherer und sauberer erledigt werden kann, nicht mit Stil. In diesem Fall wird die Schale:cd /home; getent passwd *
.ls
normalerweise um Stil geht. Der zweite Aufzählungspunkt über "unbefriedigende Ausgabe" behandelte das Problem, aber er erscheint in einem späteren Abschnitt. Ich habe umformuliert, um zu verdeutlichen, warum das Parsen in dieser Situationls
angemessen ist . Obwohl eine nehmen Form oft Anzeichen für einen solidere Ansatz habe ich es vermieden , um nicht die Leser zu führen , den Inhalt zu glauben , Verzeichnisse, mit seltsamen Eintragungen nicht zu echten Benutzern entsprechen, könnte noch irgendwie auf als Leitfaden herangezogen werden, was Benutzer existieren.cd /home; getent passwd *
/home
TL; DR : Nur menschliche Benutzer haben SystemAccount = false
Eine andere Möglichkeit besteht darin, die Ausgabe von unter Ignorierung von root aufzulisten
ls /var/lib/AccountsService/users/ | grep -v root
. Jetzt gibt es eine Besonderheit - gdm, ein Begrüßungs- / Anmeldebildschirm (oder formal Desktop Manager) wird ebenfalls als Benutzer aufgeführt. Aus der Auflistung können wir also nicht ersehen, ob GDM ein Mensch ist oder nicht.Ein effizienterer und korrekterer Ansatz besteht darin, die Dateien in diesem Ordner zu durchsuchen und herauszufinden, welche Benutzer als solche aufgeführt sind
SystemAccount=false
. Das schafft der Einzeiler-Balggrep SystemAccount=false /var/lib/AccountsService/users/* | awk -F '/' '{gsub(":","/");print $6}'
quelle
mini.iso
und ohne Display Manager oder X11) ein Benutzerkonto -/var/lib/AccountsService/users
ist aber ein leeres Verzeichnis. Ich gehe davon aus, dass dies bei einer sofort einsatzbereiten Ubuntu Server-Installation ebenfalls nicht funktioniert. Wenn dies funktioniert, geschieht dies außerdem unter einer einigermaßen restriktiven Vorstellung, was ein Benutzerkonto "menschlich" macht: Wenn ein Benutzer mituseradd
oder ohne erstellt wird--system
, wird keine Datei in erstelltAccountsService/users
.Als Mitglied der
/home
Gruppe überwache ich ein Netzwerksystem, das LDAP verwendet, und habe Home-Verzeichnisse außerhalb und UIDs (aufgrund eines Skriptfehlers) in Millionenhöhe. Keine der aktuellen Antworten funktioniert daher. Der Test, der für mich funktioniert, überprüft, ob der Benutzer eine gültige Login-Shell hat. Eine gültige Shell ist eine, die in aufgeführt ist/etc/shells
. Die einfachste Form:Die Datei kann Kommentare (oder leere Zeilen) enthalten, so dass Sie diese möglicherweise herausfiltern müssen:
quelle
root
(was wahrscheinlich nicht als menschlicher Benutzer angesehen werden sollte, da Menschen in der Regel vorübergehend und für bestimmte Zwecke root werden, anstatt es für ihre reguläre Arbeit zu verwenden), scheint es das am wenigsten wahrscheinliche Versagen zu sein irgendein wichtiger Weg. Die Verfahren in anderen Antworten (einschließlich mir) fehlschlagen können, abhängig von der Methode, wenn die Home - Verzeichnisse sind nicht in/home
anderem Müll ist in/home
, UIDs sind seltsam, oder das System keine DM verwenden. Diese Antwort funktioniert in all diesen Szenarien ziemlich gut.Auf Buntu-Systemen haben reguläre Benutzer (dh menschliche Benutzer) UIDs, die mit 1000 beginnen und ihnen bei der ersten Erstellung ihrer Konten nacheinander zugewiesen werden. Alles läuft darauf hinaus, dass der erste auf einem buntu-System erstellte Account eine UID von 1000 hat. Der nächste erstellte Account hat eine UID von 1001. Und so weiter und so fort.
Die einfachste Möglichkeit, alle auf dem System vorhandenen Benutzerkonten aufzulisten, besteht meiner Meinung nach darin, zu überprüfen, ob die dritte Spalte in der
/etc/passwd
Datei, die die Benutzer-UID enthält, größer oder gleich 1000 und kleiner als beispielsweise 2000 ist (Es ist sehr unwahrscheinlich, dass ein typischer Desktop-PC mehr als tausend Benutzerkonten hat, oder?):quelle
nobody
. =)