- Проверить, существует ли пользователь
- 19 ответы
- Как вывести список пользователей в Linux
- Список всех пользователей Linux с помощью файла /etc/passwd
- Получение списка всех пользователей с помощью команды getent
- Как проверить, существует ли пользователь в системе Linux
- Системные и обычные пользователи
- Как показать пользователей, имеющих оболочки входа
- Как вывести всех пользователей, имеющих домашний каталог
- Заключение
- Связанные статьи:
- Рекомендуемые статьи:
- 1 Комментарий
- Скрипт который по введенному имени определяет существует ли пользователь
Проверить, существует ли пользователь
Я хочу создать скрипт для проверки существования пользователя. Я использую следующую логику:
# getent passwd test > /dev/null 2&>1 # echo $? 0 # getent passwd test1 > /dev/null 2&>1 # echo $? 2
Итак, если пользователь существует, то мы добились успеха, иначе пользователь не существует. Я поместил команду выше в сценарий bash, как показано ниже:
#!/bin/bash getent passwd $1 > /dev/null 2&>1 if [ $? -eq 0 ]; then echo "yes the user exists" else echo "No, the user does not exist" fi
Теперь мой скрипт всегда говорит, что пользователь существует несмотря ни на что:
# sh passwd.sh test yes the user exists # sh passwd.sh test1 yes the user exists # sh passwd.sh test2 yes the user exists
Почему приведенное выше условие всегда оценивается как ИСТИНА и говорит, что пользователь существует?
Прочитав все ответы, я нашел проблему в своем скрипте. Проблема заключалась в том, как я перенаправлял getent выход. Поэтому я удалил все элементы перенаправления и сделал getent строка выглядит так:
getent passwd $user > /dev/null
Теперь мой скрипт работает нормально.
Я думаю, что когда вы используете $? вы получаете код возврата test команда. Смотрите ответ ниже. — user000001
Это точный код, который вы используете? Никаких «эхо» операторов отладки между вызовом getent ваши способы оплаты и счета-фактуры. if утверждение? Это вызовет $? чтобы проверить статус выхода echo , не ваш призыв к getent . — chepner
Да, я думаю, ты имеешь в виду 2>&1 вместо 2&>1 . — Tim Ludwinski
Код работает с непустым вводом, но если $1 не установлен, оператор if вернет true. Из моего тестирования решением было бы обернуть $1 в двойных кавычках: getent passwd «$1» > /dev/null 2&>1 . — Vince
Пожалуйста, отметьте ответ — Efren
19 ответы
Вы также можете проверить пользователя с помощью id команда.
id -u name дает вам идентификатор этого пользователя. если пользователь не существует, вы получили возвращаемое значение команды ( $? ) 1
И, как указывалось в других ответах: если все, что вам нужно, это просто проверить, существует ли пользователь, используйте if id прямо, как if уже проверяет на код выхода. Не надо возиться со струнами, [ , $? or $() :
if id "$1" &>/dev/null; then echo 'user found' else echo 'user not found' fi
(нет необходимости использовать -u так как вы все равно отбрасываете вывод)
Кроме того, если вы превратите этот фрагмент в функцию или скрипт, я предлагаю вам также установить надежная код выхода соответствующим образом:
#!/bin/bash user_exists()< id "$1" &>/dev/null; > # silent, it just sets the exit code if user_exists "$1"; code=$?; then # use the function, save the code echo 'user found' else echo 'user not found' >&2 # error messages should go to stderr fi exit $code # set the exit code, ultimately the same set by `id`
Как вывести список пользователей в Linux
Вы когда-нибудь хотели перечислить всех пользователей в вашей системе Linux или подсчитать количество пользователей в системе? Есть команды для создания пользователя, удаления пользователя, вывода списка пользователей, вошедших в систему, но какова команда для вывода списка всех пользователей в Linux?
Это руководство покажет вам, как посмотреть список пользователей в системах Linux.
Список всех пользователей Linux с помощью файла /etc/passwd
Информация о локальных пользователях хранится в файле /etc/passwd. Каждая строка в этом файле представляет информацию для входа в систему для одного пользователя. Чтобы открыть файл, вы можете использовать cat или less:
Каждая строка в файле содержит семь полей, разделённых двоеточиями, которые содержат следующую информацию:
- Имя пользователя.
- Зашифрованный пароль (x означает, что пароль хранится в файле /etc/shadow).
- Идентификационный номер пользователя (UID).
- Идентификационный номер группы пользователя (GID).
- Полное имя пользователя (GECOS).
- Домашний каталог пользователя.
- Оболочка входа (по умолчанию /bin/bash).
Если вы хотите отображать только имя пользователя, вы можете использовать команды awk или cut для печати только первого поля, содержащего имя пользователя:
awk -F: '< print $1>' /etc/passwd # ИЛИ cut -d: -f1 /etc/passwd
Получение списка всех пользователей с помощью команды getent
Команда getent отображает записи из баз данных, настроенных в файле /etc/nsswitch.conf, включая базу данных passwd, которую можно использовать для запроса списка всех пользователей.
Чтобы получить список всех пользователей Linux, введите следующую команду:
Как видите, вывод такой же, как и при отображении содержимого файла /etc/passwd. Если вы используете LDAP для аутентификации пользователей, getent будет отображать всех пользователей Linux как из файла /etc/passwd, так и из базы данных LDAP.
Вы также можете использовать awk или cut для печати только первого поля, содержащего имя пользователя:
getent passwd | awk -F: '< print $1>' # ИЛИ getent passwd | cut -d: -f1
Аналогичный результат можно получить с помощью команды compgen:
Как проверить, существует ли пользователь в системе Linux
Теперь, когда мы знаем, как составить список всех пользователей, чтобы проверить, существует ли пользователь в нашем Linux-сервере, мы можем просто отфильтровать список пользователей, передав его по конвейеру команде grep.
Например, чтобы узнать, существует ли в нашей системе Linux пользователь с именем mial, мы можем использовать следующую команду:
Если пользователь существует, приведённая выше команда распечатает краткую информацию о нём. Если нет вывода, что означает, что пользователя не существует.
Мы также можем проверить, существует ли пользователь, не используя команду grep, как показано ниже:
Как и раньше, если пользователь существует, команда отобразит информацию для входа в систему.
Если вы хотите узнать, сколько учётных записей пользователей у вас в системе, передайте вывод getent passwd команде wc:
Как видно из вывода выше, на удалённом сервере Linux 510 учётных записи пользователей.
Системные и обычные пользователи
Технической разницы между системой и обычными пользователями нет. Обычно пользователи системы создаются при установке ОС и новых пакетов. В некоторых случаях вы можете создать системного пользователя, который будет использоваться некоторыми приложениями.
Обычные пользователи — это пользователи, созданные пользователем root или другим пользователем с привилегиями sudo. Обычно у обычного пользователя есть настоящая оболочка входа в систему и домашний каталог.
У каждого пользователя есть числовой идентификатор пользователя, называемый UID. Если не указан при создании нового пользователя с помощью команды useradd, UID будет автоматически выбран из файла /etc/login.defs в зависимости от значений UID_MIN и UID_MIN.
Чтобы проверить значения UID_MIN и UID_MIN в вашей системе, вы можете использовать следующую команду:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN 1000 UID_MAX 60000
Из выходных данных выше мы видим, что все обычные пользователи должны иметь UID от 1000 до 60000. Знание минимального и максимального значения позволяет нам запрашивать список всех обычных пользователей в нашей системе.
Команда перечислит всех обычных пользователей в нашей системе Linux:
Значения UID_MIN и UID_MIN вашей системы могут отличаться, поэтому более общая версия приведённой выше команды будет:
eval getent passwd <$(awk '/^UID_MIN/ ' /etc/login.defs)..$(awk '/^UID_MAX/ ' /etc/login.defs)>
Если вы хотите распечатать только имена пользователей, просто направьте вывод в команду cut:
eval getent passwd <$(awk '/^UID_MIN/ ' /etc/login.defs)..$(awk '/^UID_MAX/ ' /etc/login.defs)> | cut -d: -f1
Как показать пользователей, имеющих оболочки входа
Чтобы вывести список только пользователей с оболочками входа, используйте одну из следующих команд:
cat /etc/passwd | grep -E 'bash|sh|bin|zsh' cat /etc/passwd | grep -E -v 'nologin'
Обратите внимание, что эти команды не равнозначны.
Как вывести всех пользователей, имеющих домашний каталог
Если вы хотите составить список пользователей, у которых есть своя папка в директории /home, то используйте следующую команду:
Заключение
В этом руководстве вы узнали, как составлять список и фильтровать пользователей в вашей системе Linux, а также каковы основные различия между системными и обычными пользователями Linux.
Те же команды применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian, Linux Mint, Arch Linux и Manjaro.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Связанные статьи:
Рекомендуемые статьи:
1 Комментарий
Добрый вечер! Как человеку всю жизнь пользующемся Windows, не очень понятны вещи: 1) В каких группах состоит пользоватлей (Windows тема) — админ, пользователь и т. д. 2) Зачем столько пользоватлей? (в Windows SYSTEM и User — все.) 3) Зачем столько команд для вывода списка пользователей: less, cut, geten, compgen Сейчас будем массово переходить на Unix. И аналогии с фортачками могут сильно помочь. Спасибо!
Скрипт который по введенному имени определяет существует ли пользователь
Привет показывай что есть на данный момент и опиши в каком месте затруднения.
На данный момент есть лишь файл скрипта, я не дальновидный в этой теме 🙂
дальше echo «Введите имя пользователя»
неправильно так делать.
есть утилита getent, которая избавит от проблем парсинга.
Тут просто виртуалка запущена у меня Cent OS, в рамках которой я должен писать этот скрипт
В общем, задавай конкретные вопросы и мы все тебе с радостью поможем.
Есть Linux Bash (Cent OS виртуалка), где нужно создать скрипт который по введенному имени пользователя определит есть ли такой пользователь в системе и к какой группе он относится
С такими вопросами стоит создать тему в www.linux.org.ru/forum/job/
#!/bin/bash USERNAME=$1 grep $USERNAME /etc/passwd grep $USERNAME /etc/group
Фига себе. Теперь и обычнейшие скрипты в job? Куда всё катится?
чего делать, если существуют юзеры vasya,vasya2,vasya100500 ?
Когда не хотят думать и просят сделать всё за них, то куда ещё отправлять ?
Когда не хотят думать. то куда ещё отправлять ?
Это очевидно неправильный вариант. Вот смотри:
$ grep mDNS /etc/passwd avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin $ id mDNS id: ‘mDNS’: no such user
я и не сказал, что это готовый вариант, просто направил в нужном направлении
Вот тут до меня только дошло…зачем ему что-то скриптовать когда id все это умеет…
Почему «не хотят думать»? Знал бы ты сколько я инфы перебрал. Но благодаря подсказкам NobleWolf и mironov_ivan я написал скрипт, за что им огромное спасибо! #!/bin/bash echo «Enter username» read user id $user