Показать всех пользователей и их группы / наоборот

71

Я знаю, что у меня есть группы и пользователи, но я не уверен насчет их связи. Можно ли использовать команду оболочки для отображения списка всех пользователей или всех групп и команду для отображения списка всех групп / пользователей для указанного пользователя / группы?

Так что-то вроде showusersбы перечислило бы всех пользователей и showgroups -u thisuserпоказало бы все группы, которые thisuserв нем есть.

Стив Роббинс
источник
нет такой команды. Вы должны написать это самостоятельно.
Крис
как насчетcat /etc/passwd
Судип Бхандари

Ответы:

94

Все пользователи:

$ getent passwd

Все группы:

$ getent group

Все группы с конкретным пользователем:

$ getent group | grep username
EEAA
источник
Я обнаружил, что есть пользователь с именем, speech-dispatcherкоторый принадлежит к группе аудио (на основе groups speech-dispatcher). Но он не указан под getent groupкомандой! В чем проблема?
Ученик PHP
3
@PHPLearner Если у вас есть другой вопрос, пожалуйста, оставьте вопрос , а не комментарий.
EEAA
+1, так как в нем также будут перечислены пользователи / группы, не найденные в обычных файлах /etc/passwdи /etc/groupфайлах, т. Е. Когда система настроена на использование центральных каталогов, таких как NIS и LDAP, или любой другой альтернативной базы данных пользователей / групп, если она поддерживает перечисление пользователей / групп. ,
HBruijn
Это не вернет всех пользователей и группы в конфигурации ldap или sssd, если перечисление отключено.
Дженс Тиммерман
16

Список пользователей и их групп:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

Список групп и их пользователей:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done
поЬир
источник
1
Хотя это, вероятно, сработает, это кажется слишком сложным, не так ли, когда есть совершенно хорошие простые однократные команды для этого?
EEAA
Это, конечно, не получит ничего, что живет в централизованном хранилище. И это определенно информация, которую вы хотели бы увидеть.
Магеллан
Отлично очень полезно, было бы лучше упомянуть, что они являются отдельными командами.
Миан Асбат Ахмад
5

Если вам не нужны удаленные пользователи, такие как LDAP или NIS, просто перечислите пользователей и связанные с ними группы:

cut -d: -f1 /etc/passwd | xargs groups

Выход;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev
Фредрик Гаусс
источник
1
Это та же проблема, что и ответ Чанга, в котором игнорируются пользователи / группы, происходящие из баз данных, таких как LDAP, NIS и т. Д.
MadHatter,
Это очень аккуратно выводит информацию в невероятно четком формате, хотя, тем не менее, может быть полезным первым шагом. Это помогло мне потрясти память относительно синтаксиса / etc / group и / etc / passwd!
Крис Вудс
3

Список всех пользователей

cut -d':' -f 1 /etc/passwd

Или же

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

В то время как cat / etc / passwd показывает всех пользователей (и кучу других вещей), вырезать -d ':' -f 1 - это простой способ разбить каждую строку с разделителем ':' и извлечь только первое поле (пользователи ). Практически так же, как версия awk.

Список всех групп

cut -d':' -f 1 /etc/group

Или же

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

Угадайте, что, очень похоже на список пользователей. Просто проанализируйте / etc / group .

Другим интересным способом, возможно, ближе к тому, что хотел OP, является compgen . Не уверен насчет проблем совместимости.

compgen -u
compgen -g
Маркос Валле
источник
2
Привет Эллиот Бэйли, добро пожаловать в сбой сервера! Обратите внимание, что этому вопросу более 5 лет, и он уже имеет правильный и принятый ответ. Также обратите внимание, что ваше решение работает, только если пользователи хранятся в / etc / passwd; Принятый ответ также работает для других пользовательских баз данных (таких как NIS или LDAP). Если вы хотите ответить на старые вопросы (что совершенно нормально!), Возможно, вы захотите взглянуть на список оставшихся без ответа вопросов - множество вопросов в поисках любви!
marcelm
-1

для Debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group
Чанг
источник
2
В отличие от уже принятых, в нем не перечислены пользователи / группы, которые происходят из удаленной пользовательской базы данных, такой как LDAP, NIS и т. Д.
HBruijn
-2

Нравится:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username
Руи Монтейру
источник
1
Нет /etc/gshadow, не содержит членов группы ( /etc/groupделает), и принятый ответ от 4,5 лет назад в любом случае гораздо более общий, поскольку он также обрабатывает удаленные группы.
Свен
-2

Используйте эту команду, чтобы получить все группы и пользователей в этой конкретной группе.

grep '
> ' /etc/group
Аяз Хуссейн
источник