Гид по технологиям

Как получить список всех пользователей в Linux

6 min read Linux Обновлено 23 Dec 2025
Список пользователей в Linux — команды и проверка
Список пользователей в Linux — команды и проверка

Список всех пользователей в Linux, пример вывода

Пользователи — ключевой компонент любой Linux-системы. Система хранит данные о пользователях в нескольких стандартных источниках (локальные файлы, LDAP/AD, NSS). В этой статье подробно показано, как получить полный список пользователей, как извлечь отдельные поля (имя, домашняя папка, shell), как проверить существование учётной записи и какие инструменты выбирать в разных сценариях.

Основные источники данных о пользователях

  • /etc/passwd — основной текстовый файл с информацией об учётных записях (логины, UID, GID, GECOS, домашняя директория, shell). Доступен для чтения любому пользователю, но пароли в нём не хранятся.
  • /etc/shadow — защищённый файл с хешами паролей и политиками паролей; доступен только root/специальным сервисам.
  • NSS (Name Service Switch) и getent — слой абстракции, который объединяет локальные файлы, LDAP, NIS и другие источники.
  • Команды compgen, id, users — быстрые утилиты для конкретных задач.

Важное: не редактируйте /etc/passwd вручную без строгой необходимости; используйте useradd/usermod/userdel или специализированные инструменты для централизованной аутентификации.

Формат /etc/passwd — что означают поля

Каждая строка в /etc/passwd содержит 7 полей, разделённых двоеточием (:). Пример строки:

root:x:0:0:root:/root:/bin/bash

Поля по порядку:

  1. Логин (username)
  2. Парольный маркер (x означает, что хеш в /etc/shadow)
  3. UID (идентификатор пользователя)
  4. GID (идентификатор основной группы)
  5. GECOS (полное имя или информация о пользователе)
  6. Домашняя директория (/home/username или другое)
  7. Shell (командная оболочка при входе)

Таблица для быстрого просмотра:

ПолеОписание
$1Логин
$2Парольный маркер (обычно x)
$3UID
$4GID
$5GECOS (полное имя)
$6Домашняя директория
$7Shell

Как вывести весь файл passwd

Прямой просмотр файла:

cat /etc/passwd

Удобный просмотр постранично:

less /etc/passwd

Вывод будет содержать системные и пользовательские учётные записи. Системные учётные записи обычно имеют UID < 1000 (на некоторых дистрибутивах порог 500).

Получить только список логинов

С помощью awk (рекомендуемый способ для выборки колонок):

awk -F: '{ print $1 }' /etc/passwd

Или с cut:

cut -d: -f1 /etc/passwd

С getent (работает с NSS — включает LDAP/AD):

getent passwd | awk -F: '{ print $1 }'
# или
getent passwd | cut -d: -f1

С компактен: compgen — быстрый bash-способ получить локальные логины:

compgen -u

Примеры вывода:

root
daemon
bin
sys
sync
games
man
user1
user2

Получить другие поля: полное имя, домашняя папка, shell

Полное имя (поле GECOS):

getent passwd | awk -F: '{ print $5 }'
# или
getent passwd | cut -d: -f5

Домашняя директория (поле 6) и shell (поле 7):

getent passwd | awk -F: '{ print $6 " " $7 }'
# или вывести в форматированном виде
getent passwd | awk -F: '{ printf "%s: %s — %s\n", $1, $6, $7 }'

Проверка существования пользователя

Несколько надёжных вариантов:

getent passwd username
# Возвращает строку из NSS, если учётная запись есть

id username
# Показывает UID/GID/группы; возвращает ненулевой код, если пользователя нет

compgen -u | grep -x username
# Ищет точное совпадение в списке локальных логинов

Для условного вывода (скриптами):

if getent passwd username > /dev/null; then
  echo "Пользователь найден"
else
  echo "Пользователь не найден"
fi

Или кратко с логическими операторами:

getent passwd username &> /dev/null && echo "User found" || echo "User not found"

Важно: getent учитывает централизованные источники (LDAP, AD). Если ваша система использует централизованную аутентификацию, проверяйте через getent или id, а не только через /etc/passwd.

Подсчитать количество пользователей

Простейшие команды:

compgen -u | wc -l
# Или
getent passwd | wc -l

Если вам нужно только количество локальных пользователей, можно фильтровать по UID:

awk -F: '$3 >= 1000 { count++ } END { print count }' /etc/passwd

На некоторых дистрибутивах порог локальных пользователей — 500.

Когда перечисление пользователей может давать неверные результаты

  • Система использует LDAP/AD: /etc/passwd покажет только локальные записи, тогда как getent вернёт и удалённые аккаунты.
  • Недостаточные привилегии: /etc/shadow недоступен обычным пользователям, поэтому проверка паролей невозможна.
  • Разные конвенции UID/GID на дистрибутивах: порог «системный» vs «пользовательский» может отличаться (500/1000).
  • Нестандартные NSS-модули или кэширование (nscd, sssd) могут давать устаревшие данные.

Альтернативные подходы и зачем их выбирать

  • getent — универсален и безопасен при централизованной аутентификации.
  • compgen — быстрый и встроенный в bash, полезен для локальных списков и скриптов.
  • Чтение /etc/passwd напрямую — полезно при анализе локальной конфигурации и при отладке.
  • Использование id — подходит для проверки конкретной учётной записи и получения UID/GID.

Выбор зависит от окружения: для серверов с LDAP/AD используйте getent; для изолированных систем — чтение /etc/passwd и compgen.

Полезная шпаргалка по командам (cheat sheet)

  • Просмотр полного файла: cat /etc/passwd
  • Постраничный просмотр: less /etc/passwd
  • Список логинов: awk -F: ‘{print $1}’ /etc/passwd
  • Через NSS (совместно с LDAP): getent passwd
  • Быстрый список локальных пользователей: compgen -u
  • Проверка отдельного пользователя: getent passwd username или id username
  • Подсчёт пользователей: getent passwd | wc -l

Рекомендации по безопасности и практики

  • Не храните пароли в /etc/passwd; современные системы используют /etc/shadow.
  • Для централизованной аутентификации используйте SSSD или специализированные LDAP/AD клиенты.
  • При массовых изменениях пользователей используйте инструменты (useradd/usermod/userdel) и контроль версий конфигурации.
  • Ограничьте доступ к административным операциям (sudoers, RBAC).

Роль‑ориентированные чек-листы

Администратор сервера:

  • Использовать getent для проверки учётных записей при интеграции с LDAP/AD.
  • Проверять конфигурацию /etc/nsswitch.conf и работу sssd/nscd.
  • Протестировать команды в тестовой среде перед массовыми изменениями.

DevOps:

  • Автоматизировать проверку учётных записей в CI/CD (идентификация сервисных аккаунтов).
  • Логировать изменения пользователей и хранить аудит.

Новичок:

  • Начать с просмотра /etc/passwd и пробных команд (awk, cut, getent).
  • Практиковаться на виртуальной машине, чтобы не нарушить рабочий сервер.

Краткая методология проверки целостности списка пользователей

  1. Выяснить, используется ли централизованная аутентификация (LDAP/AD). Проверить /etc/nsswitch.conf.
  2. Собрать данные командой getent passwd.
  3. Сравнить с локальным /etc/passwd для выявления расхождений.
  4. Проверить сервисы кеширования (nscd/sssd) при подозрении на несвежие данные.
  5. Протоколировать результаты и при необходимости очистить/синхронизировать источники.

Пример Mermaid-диаграммы: как выбрать команду

flowchart TD
  A[Нужно получить список пользователей?] --> B{Система использует LDAP/AD?}
  B -- Да --> C[getent passwd]
  B -- Нет --> D{Это локальная проверка?}
  D -- Да --> E[compgen -u или awk /etc/passwd]
  D -- Нет --> C
  C --> F[Фильтрация awk/cut]
  E --> F
  F --> G[Результат: логины/UID/GECOS]

Примеры сценариев и отладка

Сценарий: getent возвращает меньше записей, чем /etc/passwd — проверьте /etc/nsswitch.conf и затем работу демонов sssd/nscd.

Сценарий: compgen не показывает удалённый LDAP-аккаунт — это нормально; compgen выводит только локальные логины.

Сценарий: нужно найти всех пользователей с пустым shell (nologin) — используйте:

awk -F: '$7 ~ /nologin|false/ { print $1, $7 }' /etc/passwd

Мини‑глоссарий (1 строка каждый)

  • /etc/passwd — основной текстовый файл с учётными записями.
  • /etc/shadow — защищённый файл с хешами паролей.
  • getent — утилита для доступа к базе NSS (локально и централизованно).
  • compgen -u — перечисляет локальные логины оболочки bash.
  • UID/GID — числовые идентификаторы пользователя и группы.

Критерии приёмки

  • Команды возвращают ожидаемый список логинов для тестовой системы.
  • Проверка существования пользователя даёт корректный код возврата для скриптов.
  • Подсчёт пользователей совпадает с целями (локальные vs все источники).

Итог и рекомендации

  • Для универсального и корректного списка используйте getent passwd — он учитывает локальные и централизованные источники.
  • Для быстрой локальной выборки compgen и /etc/passwd подходят отлично.
  • Используйте awk/cut для извлечения нужных полей и id/getent для проверки существования пользователя.

Важное: перед массовыми операциями по изменению пользователей делайте бэкап конфигурации и проверяйте операции в тестовой среде.

Сводка:

  • Понимайте, откуда система получает информацию о пользователях (NSS).
  • Выбирайте инструмент по окружению (getent для LDAP/AD, compgen для локали).
  • Всегда проверяйте вывод и используйте код возврата команд в скриптах.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Режим «Встреча» для Windows 11
Windows

Режим «Встреча» для Windows 11

Не усыплять ноутбук при закрытии крышки — Windows 10
Windows

Не усыплять ноутбук при закрытии крышки — Windows 10

Как сократить встречи и повысить продуктивность
Продуктивность

Как сократить встречи и повысить продуктивность

Отключить звук SkyBell HD — быстро и временно
Инструкции

Отключить звук SkyBell HD — быстро и временно

SkyBell HD — лучшие советы и настройки
Умный дом

SkyBell HD — лучшие советы и настройки

Overlap — планировать встречи между часовыми поясами
Productivity

Overlap — планировать встречи между часовыми поясами