显示所有用户及其组,反之亦然


70

我知道我已经有组和用户,但是我不确定它们的关联。是否有我可以用来列出所有用户或所有组的shell命令,以及可以列出指定用户/组的所有组/用户的命令?

因此,showusers将列出所有用户,并showgroups -u thisuser显示其中的所有组thisuser


没有这样的命令。您需要自己编写脚本。
克里斯

怎么样cat /etc/passwd
Sudip班达

Answers:


93

全部用户:

$ getent passwd

所有组:

$ getent group

具有特定用户的所有组:

$ getent group | grep username

我发现有一个名为的用户speech-dispatcher,该用户属于组音频(基于groups speech-dispatcher)。但是它没有在getent group命令下列出!问题是什么?
PHP学习者

3
@PHPLearner如果您还有其他问题,请发表问题,而不是发表评论。
EEAA 2015年

+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 2012年

它肯定不会在集中式存储库中保存任何内容。这绝对是您想要看到的信息。
麦哲伦

优秀非常有帮助,最好提及它们是单独的命令。
Mian Asbat Ahmad

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
这与Chang的回答有相同的问题,因为它忽略了源于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是另一种可能更接近OP想要的有趣方式。虽然不确定兼容性问题。

compgen -u
compgen -g

2
嗨,艾略特·贝利(Elliot Baily),欢迎访问服务器故障!请注意,这个问题已有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年前接受的答案无论如何都更为通用,因为它还可以处理远程组。
斯文

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.