Как я могу узнать в сценарии оболочки, существует ли данное имя пользователя в текущей системе?
/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
getent
Эта команда предназначена для сбора записей для баз данных, которые могут быть поддержаны файлами /etc и различными удаленными службами, такими как LDAP, AD, NIS /Yellow Pages, DNS и тому подобное.
Чтобы выяснить, известно ли имя пользователя одной из служб именования паролей, просто запустите:
getent passwd username
Это работает также с группой, хостами и другими, в зависимости от ОС и реализации.
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
для систем на основе Shadow; на стороннем замечании, некоторые подобные системы могут использовать /etc/master.passwd
или другое такие файлы).
Файл /etc/passwd
обычно рассматривается как абсолютно авторитетное решение о том, существует ли пользователь или нет. Если вы используете любой из других методов, описанных на этой странице, и если эти другие методы указывают на существующего пользователя, а /etc/passwd
нет, то я бы сказал, что пользователь не существует в системе должным образом, по определению Наиболее распространенный стандарт, на который программное обеспечение, вероятно, будет полагаться.
Тем не менее, я добавлю другой способ добавить в список некоторые другие опции, которые могут быть использованы.
ls -l /home | grep ^customUserName$<BR>
echo $?
Очевидно, замените "customuserName" именем пользователя, которого вы хотите проверить. Замените /home на /users, если это то, что использует ваша система. Это может не найти всех пользователей в /etc /passwd, если не создан домашний каталог для конкретного пользователя, что может произойти, если вы просто импортировали пользователей (то есть строки текста в /etc /passwd) и если домашние каталоги этого не делают получить, если / пока человек не войдет в систему.