Как я могу узнать в сценарии оболочки, существует ли данное имя пользователя в текущей системе?
/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" >/dev/null 2>&1; then
...if
с отрицательным результатом проверки?id -u $1 1>/dev/null 2>&1; echo $?
может быть использован для трубыgetent
Эта команда предназначена для сбора записей для баз данных, которые могут быть поддержаны файлами / etc и различными удаленными службами, такими как LDAP, AD, NIS / Yellow Pages, DNS и тому подобное.
Чтобы выяснить, известно ли имя пользователя одной из служб именования паролей, просто запустите:
Это работает также с группой, хостами и другими, в зависимости от ОС и реализации.
источник
getent
, есть,getent
в Mac OS X их нетfinger
Разобрать вывод
finger -m <username>
. Нет кода ошибки, если, к сожалению, пользователь не найден, но если он не найден, вывод ошибки будет записан. Пока никаких недостатков.Будет напечатано,
0
если пользователь найден (потому что не выводится ошибка), в противном случае большие числа.chown
Запустите (как и любой пользователь, на удивление):
Если это не так
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
не существует "должным образом" в системе, особенно когда ОП четко указывает, что службы именования быть рассмотренным.