Linux / Unix groups 命令示例
我是 Linux 和 Unix 系统的新用户。如何列出名为 foo 的用户所属的组?如何在 Linux 或类 Unix 系统上显示用户所在的组?
您需要使用 groups 命令在 Linux 或 Unix shell 提示符下显示用户所属的组。让我们详细查看 Unix 和 Linux groups 命令示例。
目的
列出用户的组成员身份。
句法
基本语法如下:
显示版本信息并退出到命令提示符。在屏幕上显示帮助选项。 您可以在 CLI 中传递 <UserNameHere>,其组成员身份将打印在您的终端上。
$ groups
$ groups <UserNameHere>
$ groups --help
$ groups --version
--version--help
Unix 和 Linux 组命令示例
要简单地显示当前用户的组成员身份,请键入:
$ groups
示例输出:
动画 gif 01:groups 命令运行情况
$ groups | wc -w
示例输出:
12
打印名为“tom”的用户的组成员身份:
$ groups tom
打印系统上所有用户的组成员身份的 Bash 脚本
以下bash for 循环示例将打印/etc/passwd中列出的所有 Linux 用户的组成员身份。例如:
for u in $(compgen -u) do echo "*** Group memembership for $u:" groups "$u" echo done
第一行for u in $(compgen -u)使用compgen 命令通过/etc/passwd文件生成系统上所有 Linux 用户名的列表。-u选项告诉 compgen 命令仅列出用户名。第二行echo "*** Group memembership for $u:"打印一个标题为“ *** Group memembership for $u: ”。$u变量是bash for 循环中的当前用户名。第三行groups "$u"使用groups 命令显示当前用户所属的组。第四行echo显示一个空白行来分隔 bash for 循环设置的每个用户的输出。它如下所示:
group memembership for root: root : root group memembership for daemon: daemon : daemon group memembership for bin: bin : bin group memembership for vivek: vivek : vivek adm cdrom sudo dip plugdev lpadmin lxd sambashare sales ... ...
最后一行显示用户“vivek”属于组 vivek、adm、cdrom、sudo、dip、plugdev、lpadmin、lxd、sambashare 和 sales。
推荐替代组命令
groups 命令已被id 命令取代。您需要使用以下命令,该命令等效于 id -Gn:
示例输出:
$ id -Gn
$ id -Gn root
wheel daemon kmem sys tty operator procview procmod everyone staff certusers localaccounts admin _appstore _lpadmin _lpoperator _developer com.apple.access_screensharing com.apple.access_ssh
总结
groups 命令显示指定 USERNAME 的组成员身份。如果未指定 USERNAME,它将显示当前进程(即当前登录的用户)的组成员身份。您可以使用 echo 命令或 printf 命令获取当前用户名:
当然,您也可以使用id 命令或whoami 命令打印当前登录系统并运行命令的 Linux 和 Unix 用户名。例如:
$ echo "The current username is '$USER'."
## OR ##
$ printf "The current username is '%s'.\n" "$USER"
$ id
$ whoami
参见
- /etc/group和/etc/passwd文件。
- 使用 man 命令或 help 命令查看以下手册页。例如
$ man 1 id
$ man 1 groups
$ man 5 group