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

所以像showusers这样的列表会列出所有用户,而showgroups -u thisuser将显示其中包含thisuser的所有组。

评论

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

猫/ etc / passwd
怎么样

#1 楼

所有用户:

$ getent passwd


所有组:

$ getent group


具有特定用户的所有组:

$ getent group | grep username


评论


我发现有一个名为语音分配器的用户,该用户属于组音频(基于组语音分配器)。但是它没有在getent group命令下列出!问题是什么?

– PHP学习者
2015年9月15日,下午3:07

@PHPLearner如果还有其他问题,请发表问题,而不发表评论。

–EEAA
2015年9月15日,下午3:08

+1,因为这还会列出在常规/ etc / passwd和/ etc / group文件中找不到的用户/组,即当系统配置为使用NIS和LDAP等中央目录或任何其他替代用户/组数据库时,只要支持用户/组枚举。

– HBruijn
16-11-30在11:57

如果关闭了枚举,这将不会返回ldap或sssd配置中的所有用户和组。

–詹斯·蒂默曼(Jens Timmerman)
18-3-21在13:46



#2 楼

列出用户及其组:

for user in $(awk -F: '{print }' /etc/passwd); do groups $user; done


列出用户及其组:

cat /etc/group | awk -F: '{print , , }' | while read group gid members; do
    members=$members,$(awk -F: "$4 == $gid {print \",\" $1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done


评论


尽管这可能行得通,但看起来似乎有点太复杂了,不是这样,当有非常好的简单的单发命令来执行此操作时?

–EEAA
2012年1月31日下午4:41

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

–麦哲伦
2012年1月31日23:50

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

–Mian Asbat Ahmad
17年2月13日在13:30



#3 楼

如果您不关心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



评论


这与Chang的回答有相同的问题,因为它忽略了源于LDAP,NIS等数据库的用户/组。

– MadHatter
17-10-19在6:25



但是,这将以非常清晰的格式非常整洁地输出信息,因此仍然是有用的第一步。关于/ etc / group和/ etc / passwd的语法,这有助于使我记忆犹新!

–克里斯·伍兹(Chris Woods)
17年11月22日在21:55

#4 楼

列出所有用户

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




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


cat / etc / passwd显示所有用户(并且一堆其他的东西),cut -d':'-f 1是一种简单的方法,用':'作为分隔符来分割每行并仅提取第一个字段(用户)。与awk版本几乎相同。

列出所有组

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




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


猜猜是什么,非常类似于列出用户。只需解析/ etc / group即可。

compgen是另一种有趣的方法,也许更接近OP的需求。不过不确定兼容性问题。

compgen -u
compgen -g


评论


嗨,艾略特·贝利(Elliot Baily),欢迎来到服务器故障!请注意,这个问题已有5年以上的历史,并且已经有正确的答案。还要注意,仅当用户存储在/ etc / passwd中时,您的解决方案才有效。接受的答案也适用于其他用户数据库(例如NIS或LDAP)。如果您想回答旧问题(这很好!),则可能需要查看未回答问题的列表-很多问题在寻找爱情!

– marcelm
17年9月24日在19:25

#5 楼

使用getent passwd{1000..60000}仅列出手动添加的用户。请参阅:https://linuxize.com/post/how-to-list-users-in-linux/

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


#6 楼

对于debian

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


评论


与已经接受的相反,它不会列出源自远程用户数据库(例如LDAP,NIS等)的用户/组。

– HBruijn
16-11-30在11:38

#7 楼

像这样:

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


评论


不。/etc/gshadow不包含组成员(/ etc / group包含),并且4.5年前接受的答案无论如何都更为通用,因为它还可以处理远程组。

– Sven
16年9月2日在20:33

#8 楼

使用此命令可以获取该特定组中的所有组和用户。

grep '
> ' /etc/group