Jak mogę dowiedzieć się w skrypcie powłoki, czy dana nazwa użytkownika istnieje w bieżącym systemie?
/etc/passwd
i /etc/shadow
są niekompletne. Zastanów się nad usługami katalogowymi OS X lub Linux z podobną integracją z Active Directory.
Jak mogę dowiedzieć się w skrypcie powłoki, czy dana nazwa użytkownika istnieje w bieżącym systemie?
/etc/passwd
i /etc/shadow
są niekompletne. Zastanów się nad usługami katalogowymi OS X lub Linux z podobną integracją z Active Directory.
Odpowiedzi:
Prawdopodobnie jednym z najbardziej podstawowych narzędzi do tego celu id
.
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
Który produkuje
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
if
z funkcją sprawdzania wyników negatywnych?
id -u $1 1>/dev/null 2>&1; echo $?
może być używany do rur
getent
To polecenie służy do gromadzenia wpisów do baz danych, które mogą być wspierane przez pliki / etc i różne zdalne usługi, takie jak LDAP, AD, NIS / Yellow Pages, DNS i podobne.
Aby dowiedzieć się, czy nazwa użytkownika jest znana przez jedną z usług nazewnictwa haseł, po prostu uruchom:
getent passwd username
Działa to również z grupą, hostami i innymi, w zależności od systemu operacyjnego i implementacji.
getent
, nie ma getent
w Mac OS X
finger
Analizuj dane wyjściowe z finger -m <username>
. Brak kodu błędu, jeśli nie znaleziono użytkownika, niestety, ale jeśli nie zostanie znaleziony, zapisany zostanie wynik błędu. Dotychczas brak wad.
finger -ms <username> 2>&1 1>/dev/null | wc -l
Wydrukuje się, 0
jeśli użytkownik zostanie znaleziony (ponieważ nie ma wyjścia błędu), w przeciwnym razie większe liczby.
chown
Uruchom (jak każdy użytkownik, co zaskakujące):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
Jeśli się nie powiedzie root
, nazwa konta jest nieprawidłowa.
Jeśli zakończy się niepowodzeniem jako root
użytkownik niebędący użytkownikiem, przeanalizuj ewentualnie zlokalizowane dane wyjściowe dla Operacja niedozwolona lub nieprawidłowy użytkownik (lub odpowiedniki). Ustaw LANG
wcześniej, aby zrobić to niezawodnie.
Powiedziałbym, że chciałbyś polegać na /etc/passwd
podobnych /etc/shadow
systemach (np. W przypadku systemów opartych na cieniach; na marginesie tematycznym niektóre podobne systemy mogą używać /etc/master.passwd
innych podobnych plików).
/etc/passwd
Jest zwykle traktowany jako bezwzględną wiarygodnego decyzji o tym, czy użytkownik istnieje, czy nie. Jeśli użyjesz jednej z innych metod opisanych na tej stronie i jeśli te inne metody wskazują na istniejącego użytkownika, ale /etc/passwd
go nie mają, to powiedziałbym, że użytkownik nie istnieje poprawnie w systemie, z definicji najpopularniejszego standardu, który oprogramowanie prawdopodobnie by polegało.
To powiedziawszy, wrzucę w inny sposób, aby dodać do mieszanki innych opcji, które mogą być użyte.
ls -l /home | grep ^customUserName$<BR>
echo $?
Oczywiście zastąp „customuserName” nazwą użytkownika, którego chcesz sprawdzić. Zamień / home na / users, jeśli tego właśnie używa twój system. Może to nie znaleźć wszystkich użytkowników w / etc / passwd, jeśli nie utworzono katalogu domowego dla konkretnego użytkownika, co może się zdarzyć, jeśli po prostu zaimportujesz użytkowników (tj. Wiersze tekstu do / etc / passwd) i jeśli katalogi domowe tego nie zrobią zostać wykonane, chyba że / dopóki osoba się nie zaloguje.
id
lub getent
nie „poprawnie” istnieje w systemie, szczególnie gdy OP wyraźnie stwierdza, że usługi nazewnictwa są do rozważenia.
if id -u "$1" >/dev/null 2>&1; then
...