Как я могу узнать в сценарии оболочки, существует ли данное имя пользователя в текущей системе?
/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 $?
может быть использован для трубы
getent
Эта команда предназначена для сбора записей для баз данных, которые могут быть поддержаны файлами / 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» на имя пользователя, которого вы хотите проверить. Замените / home на / users, если это то, что использует ваша система. Это может не найти всех пользователей в / etc / passwd, если не создан домашний каталог для конкретного пользователя, что может произойти, если вы просто импортировали пользователей (то есть строки текста в / etc / passwd) и если домашние каталоги этого не делают получить, если / пока человек не войдет в систему.
id
или getent
не существует "должным образом" в системе, особенно когда ОП четко указывает, что службы именования быть рассмотренным.
if id -u "$1" >/dev/null 2>&1; then
...