Показати всіх користувачів та їх групи / навпаки


70

Я знаю, що у мене є групи та користувачі, але я не впевнений у їх асоціації. Чи є команда оболонки, яку я можу використовувати для переліку всіх користувачів або всіх груп, і команда для списку всіх груп / користувачів для певного користувача / групи?

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


такої команди немає. Сценарій цього вам потрібно власноруч.
Кріс

як щодоcat /etc/passwd
Судіп Бхандарі

Відповіді:


93

Всі користувачі:

$ getent passwd

Усі групи:

$ getent group

Усі групи з певним користувачем:

$ getent group | grep username

Я виявив, що є користувач на ім'я, speech-dispatcherякий належить до групового аудіо (на основі groups speech-dispatcher). Але це не вказано під getent groupкомандою! В чому проблема?
PHP Learner

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
Хоча це, ймовірно, спрацює, здається, що це занадто складно, чи не так, коли для цього є ідеально прості команди з одного удару?
ЄЕАА

Це, звичайно, не отримає нічого, що живе в централізованому сховищі. І це безумовно інформація, яку ви хочете побачити.
Магеллан

Відмінно дуже корисно, було б краще згадати, що вони є окремими командами.
Міан Асбат Ахмад

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 показує всіх користувачів (і купу інших речей), cut -d ':' -f 1 - це простий спосіб розділити кожен рядок на ':' як роздільник і вилучити лише перше поле (користувачі ). Приблизно те саме, що і версія awk.

Перерахуйте всі групи

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

Або

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

Здогадайтесь, що дуже схоже на список користувачів. Просто замініть розбір / etc / group .

Ще один цікавий спосіб, можливо, ближчий до того, чого хотів ОП, - комген . Хоча не впевнений у питаннях сумісності.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.