Wie kann ich in einem Shell-Skript herausfinden, ob ein bestimmter Benutzername auf dem aktuellen System vorhanden ist?
/etc/passwd
und /etc/shadow
sind unvollständig. Betrachten Sie die Verzeichnisdienste von OS X oder Linux mit einer ähnlichen Active Directory-Integration.
if id -u "$1" >/dev/null 2>&1; then
...if
mit negativer Ergebniskontrolle brauche ?id -u $1 1>/dev/null 2>&1; echo $?
kann für Pipe verwendet werdengetent
Dieser Befehl dient zum Sammeln von Einträgen für die Datenbanken, die mit / etc-Dateien und verschiedenen Remotediensten wie LDAP, AD, NIS / Yellow Pages, DNS und dergleichen gesichert werden können.
Um herauszufinden, ob einem der Kennwortbenennungsdienste ein Benutzername bekannt ist, führen Sie einfach Folgendes aus:
Dies funktioniert auch mit Gruppen, Hosts und anderen, je nach Betriebssystem und Implementierung.
quelle
getent
, gibt esgetent
unter Mac OS X keinefinger
Analysieren Sie die Ausgabe von
finger -m <username>
. Kein Fehlercode, wenn leider kein Benutzer gefunden wurde, aber wenn nicht gefunden, wird eine Fehlerausgabe geschrieben. Bisher keine Nachteile.Wird gedruckt,
0
wenn ein Benutzer gefunden wird (da keine Fehlerausgabe erfolgt), andernfalls werden größere Zahlen ausgegeben.chown
Führen Sie (überraschenderweise wie jeder andere Benutzer) Folgendes aus:
Wenn dies fehlschlägt
root
, ist der Kontoname ungültig.Wenn dies als Nichtbenutzer fehlschlägt
root
, analysieren Sie die möglicherweise lokalisierte Ausgabe für Operation nicht zulässig oder ungültiger Benutzer (oder Entsprechungen). Stellen Sie diesLANG
vorher zuverlässig ein.quelle
Ich würde sagen, dass Sie sich auf etwas
/etc/passwd
Ähnliches verlassen möchten (z. B./etc/shadow
für Shadow-basierte Systeme; bei einer Randnotiz, die nicht zum Thema gehört, könnten einige ähnliche Systeme/etc/master.passwd
oder andere solche Dateien verwenden).Das
/etc/passwd
wird normalerweise als die absolut maßgebliche Entscheidung darüber behandelt, ob ein Benutzer existiert oder nicht. Wenn Sie eine der anderen auf dieser Seite beschriebenen Methoden verwenden und diese anderen Methoden auf einen vorhandenen Benutzer verweisen, dies jedoch/etc/passwd
nicht tun, dann würde ich sagen, dass der Benutzer nach Definition des gebräuchlichsten Standards nicht ordnungsgemäß auf dem System vorhanden ist Software würde wahrscheinlich verlassen.Das heißt, ich werde auf eine andere Weise werfen, um die Mischung einiger anderer Optionen, die verwendet werden könnten, zu ergänzen.
ls -l /home | grep ^customUserName$<BR> echo $?
Ersetzen Sie "customuserName" durch den Namen des Benutzers, nach dem Sie suchen möchten. Ersetzen Sie / home durch / users, wenn Ihr System dies verwendet. Dies kann dazu führen, dass nicht alle Benutzer in / etc / passwd gefunden werden, wenn für den jeweiligen Benutzer kein Basisverzeichnis erstellt wurde. Dies kann auftreten, wenn Sie einfach Benutzer (dh Textzeilen in / etc / passwd) importiert haben und wenn dies nicht der Fall ist gemacht werden, es sei denn / bis sich eine Person anmeldet.
quelle
id
odergetent
auf dem System nicht "ordnungsgemäß" vorhanden ist, insbesondere wenn das OP eindeutig angibt, dass Namensdienste vorhanden sind ist zu berücksichtigen.