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


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

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


47
2018-01-31 03:42


Источник


такой команды нет. Вам нужно списать его самим. - Chris
как насчет cat /etc/passwd - Sudip Bhandari


Ответы:


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

$ getent passwd

Все группы:

$ getent group

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

$ getent group | grep username

63
2018-01-31 03:45



Я обнаружил, что есть пользователь с именем speech-dispatcher который принадлежит к группе аудио (на основе groups speech-dispatcher). Но он не указан в getent group команда! В чем проблема? - PHP Learner
@PHPLearner Если у вас есть другой вопрос, пожалуйста, задать вопрос, а не комментарий. - EEAA♦
+1, так как в этом списке также будут перечислены пользователи / группы, не найденные в обычных /etc/passwd & /etc/group файлов, то есть когда система настроена на использование центральных каталогов, таких как NIS и LDAP, или любую другую альтернативную базу данных пользователя / группы, если это поддерживает перечисление пользователей / групп. - HBruijn♦
Это не приведет к возврату всех пользователей и групп в конфигурацию ldap или sssd, если перечисление отключено. - Jens Timmerman


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

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

7
2018-01-31 04:33



Хотя это, вероятно, сработает, кажется, это слишком сложно, не так ли, когда для этого есть совершенно хорошие простые одноразовые команды? - EEAA♦
Конечно, он не получит ничего, что будет в централизованном хранилище. И это определенно информация, которую вы хотите увидеть. - Magellan
Отлично, очень полезно, было бы лучше упомянуть, что они являются отдельными командами. - Mian Asbat Ahmad


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

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

Или

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

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

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

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

Или

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

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

Еще один интересный способ, возможно, ближе к тому, что требуется OP, - это CompGen, Однако не уверены в проблемах совместимости.

compgen -u
compgen -g

2
2017-09-23 17:48



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


Если вам не нужны удаленные пользователи, такие как 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
2017-10-19 05:42



Это имеет ту же проблему, что и ответ Чанга, поскольку он игнорирует пользователей / группы, происходящие из таких баз данных, как LDAP, NIS и т. Д. - MadHatter
Это очень аккуратно выводит информацию в невероятно четком формате, хотя, тем не менее, это может быть полезным первым шагом. Это помогло мне разобраться в синтаксисе / etc / group и / etc / passwd! - Christopher Woods


для debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

-1
2017-11-30 09:25



В отличие от уже принятых это не список пользователей / групп, которые происходят из удаленной пользовательской базы данных, таких как LDAP, NIS и т. Д .... - HBruijn♦


Как это:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

-2
2017-09-02 20:05



Нет. /etc/gshadow не содержит членов группы (/etc/group ), и принятый ответ от 4.5 лет назад намного более общий, так как он также обрабатывает удаленные группы. - Sven♦


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

grep '
> ' /etc/group

-2
2018-02-08 08:21