65

Как я могу узнать в сценарии оболочки, существует ли данное имя пользователя в текущей системе?


/etc/passwd и /etc/shadow являются неполными. Рассмотрим службы каталогов OS X или Linux с аналогичной интеграцией с Active Directory.

4 ответа4

98

Один из самых основных инструментов, который будет использоваться для этого, вероятно, 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
19

getent

Эта команда предназначена для сбора записей для баз данных, которые могут быть поддержаны файлами /etc и различными удаленными службами, такими как LDAP, AD, NIS /Yellow Pages, DNS и тому подобное.

Чтобы выяснить, известно ли имя пользователя одной из служб именования паролей, просто запустите:

getent passwd username

Это работает также с группой, хостами и другими, в зависимости от ОС и реализации.

6

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 заранее, чтобы сделать это надежно.

0

Я бы сказал, что вы хотели бы полагаться на /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) и если домашние каталоги этого не делают получить, если / пока человек не войдет в систему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .