Як я можу в скрипті оболонки дізнатися, чи існує вказане ім’я користувача в поточній системі?
/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
...