Як я можу в скрипті оболонки дізнатися, чи існує вказане ім’я користувача в поточній системі?
/etc/passwdі /etc/shadowє неповними. Розглянемо служби каталогів OS X або Linux з аналогічною інтеграцією Active Directory.
Як я можу в скрипті оболонки дізнатися, чи існує вказане ім’я користувача в поточній системі?
/etc/passwdі /etc/shadowє неповними. Розглянемо служби каталогів OS X або Linux з аналогічною інтеграцією Active Directory.
Відповіді:
Один з найбільш основних інструментів, який слід використовувати для цього, мабуть id.
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
Що виробляє
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
ifдопомогою перевірки негативного результату?
id -u $1 1>/dev/null 2>&1; echo $?можна використовувати для труби
гетен
Ця команда призначена для збору записів для баз даних, які можуть бути підкріплені файлами / etc та різними віддаленими службами, такими як LDAP, AD, NIS / Yellow Pages, DNS тощо.
Щоб визначити, чи ім’я користувача відомо однією із служб іменування паролів, просто запустіть:
getent passwd username
Це також працює з групою, хостами та іншими, залежно від ОС та реалізації.
getent, getentна Mac OS X немає
fingerПроаналізуйте вихід finger -m <username>. На жаль, код помилки, якщо жодного користувача не знайдено, на жаль, але якщо його не знайдено, буде виписано висновок про помилку. Досі недоліків.
finger -ms <username> 2>&1 1>/dev/null | wc -l
Буде надруковано, 0якщо користувача знайдено (оскільки немає помилок), в іншому випадку збільшиться кількість.
chownЗапустіть (як і будь-який користувач, на диво):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
Якщо це не вдається root, ім’я рахунку недійсне.
Якщо він не працює як некористувач root, проаналізуйте можливий локалізований вихід для Операції, не дозволеного або недійсного користувача (або його еквівалентів). LANGПопередньо встановіть це надійно.
Я б сказав, що ви хочете покластися на /etc/passwdподібне і подібне (наприклад, /etc/shadowдля систем, заснованих на тіні; за стороною замітки, що не є темою, деякі подібні системи можуть використовувати /etc/master.passwdабо інші подібні файли).
/etc/passwd, Як правило , розглядаються як абсолютна авторитетне рішення про те , чи існує користувач чи ні. Якщо ви використовуєте будь-який з інших методів, описаних на цій сторінці, і якщо ці інші методи вказують на існуючого користувача, але /etc/passwdце не так, я б сказав, що користувач не існує належним чином у системі, за визначенням найбільш поширеного стандарту, програмне забезпечення, ймовірно, покладається на.
Однак, я піду іншим способом додати до суміші деякі інші варіанти, які можна було б використати.
ls -l /home | grep ^customUserName$<BR>
echo $?
Зрозуміло, замініть "customuserName" на ім'я користувача, якого ви хочете перевірити. Замініть / дома на / користувачів, якщо для цього використовується ваша система. Це може не знайти всіх користувачів у / etc / passwd, якщо для конкретного користувача не було створено домашнього каталогу, що може статися, якщо ви просто імпортували користувачів (тобто рядки тексту в / etc / passwd) і якщо домашні каталоги не зробити, якщо / поки людина не ввійде в систему.
idабо getentне існує "належним чином" в системі, особливо коли ОП чітко вказує послуги іменування вважати.
if id -u "$1" >/dev/null 2>&1; then...