Назад | Перейти на главную страницу

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

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

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

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

$ getent passwd

Все группы:

$ getent group

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

$ getent group | grep username

Перечислите пользователей и их группы:

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

Если вас не интересуют удаленные пользователи, такие как 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

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

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

Или

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

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

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

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

Или

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

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

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

compgen -u
compgen -g

Использовать getent passwd{1000..60000} для вывода списка только добавленных вручную пользователей. Видеть: https://linuxize.com/post/how-to-list-users-in-linux/

for user in $(getent passwd {1000..60000} |awk -F: '{print $1}');
do 
    groups $user; 
done

для дебиана

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

Как это:

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

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

grep '
> ' /etc/group