Я знаю, что у меня есть группы и пользователи, но я не уверен в их ассоциации. Есть ли команда оболочки, которую я могу использовать для вывода списка всех пользователей или всех групп, и команду для вывода списка всех групп / пользователей для указанного пользователя / группы?
Так что-то вроде 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