有没有列出所有Unix组名的命令?

650
我知道有一个文件/etc/group列出了所有用户组。
我想知道是否有一个简单的命令可以列出所有用户组名称,而不需要解析可读的/etc/group文件。我愿意创建一个管理员网页,以列出Linux帐户的组名称。

7
到目前为止,他已经尝试过https://dev59.com/LWYq5IYBdhLWcg3w8lNo - ott--
2
我想创建一个网页,列出Linux用户。你试图解决什么问题?这听起来可能会引起一些安全问题(暴露用户列表,暴露凭据)。 - user289086
我试图提供一个简单的例子。我想打开一个“管理员系统网页以列出当前Linux帐户名称”。在Linux中,我可以找到添加用户、删除用户、更改用户、查找给定用户组的命令,但没有找到按名称片段搜索用户的命令。我认为这个问题并不是那么无关紧要。我所能做的就是通过查找 /etc/group 文件来记住 Linux 组帐户。 - cavila
类似问题:如何通过命令行查找给定用户所在的组? - kenorb
3个回答

922

要列出所有已分配用户的本地组,请使用以下命令:

cut -d: -f1 /etc/group | sort

更多信息请参见-> Unix群组, Cut命令, sort命令


3
MichaelIT是正确的,groups命令没有列出所有组。我问这个问题是因为不确定是否有一个简单的命令像groups一样可以列出所有组名,甚至有一个开关可以使用,比如groups [-a | --all] 来列出所有系统组而不进行文件扫描。 - cavila
1
好的,目前的答案是“不行”。需要使用文本编辑来过滤组文件。 - cavila
3
“cut -d: -f1”是一个Linux命令,用于在文本中以“:”为分隔符,并提取出每一行的第一个字段。 - zed
6
@zed cut 是另一个命令,它从输入中提取特定的列。在这里,我正在提取字段1,其中字段由 : 分隔。 - Arpit

296

如果您想要系统中已知的所有组,我建议使用getent group而不是解析/etc/group

getent group

原因是在网络系统中,组不仅可以从/etc/group文件中读取,还可以通过LDAP或Yellow Pages获取(已知组列表来自本地组文件加上通过LDAP或YP接收到的组)。

如果你只想要组名,可以使用:

getent group | cut -d: -f1

11
对于某些用例,按组名排序的列表可能更理想:getent group | cut -d: -f1 | sort - user1364368
2
如果需要编号行,请执行 getent group | cut -d: -f1 | sort | cat -n - MLC
1
像LDAP这样的网络系统来说,这是一个很好的观点! - Maziyar
@dasup,你知道如何创建仅分配本地组而非LDAP的ID吗,针对网络系统。 - Dwija
需要一些关于输出格式的解释。 - Damn Vegetables

55

在Linux、macOS和Unix上显示您所属的组,请使用:

id -Gn

这与Unix上已停用的groups实用程序相当(根据Unix手册)。

在macOS和Unix上,建议使用命令id -p进行正常交互。

参数解释:

-G--groups - 打印所有组ID

-n--name - 为-ugG打印名称而不是数字

-p - 使输出易于阅读。


11
id -Gn someusername 返回指定用户所属的组列表。 - grim
8
id -Gnz | xargs -0 -I% echo % 将会把每个组分别列在一行上。如果组名中包含空格,这将非常有用。 - Mark Lakata
1
“groups” 命令已经过时了吗?有什么相关的资料吗?我搜索了“unix groups command obsolete”,但没有找到任何信息。 - Franklin Yu
1
@FranklinYu 这在BSD手册页groups中有说明。 - kenorb
4
未回答与当前用户组外的原始问题有关的问题。 - Nay
@MarkLakata 使用 tr '\0' '\n' 替代 xargs - tripulse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接