我想编写一个 shell 脚本,显示系统的用户和组/etc/passwd
-/etc/group
对于每个用户,我想显示用户名、UID 以及该用户所属的所有组。
我尝试了以下操作:
cat /etc/passwd /etc/group
但输出结果却乱七八糟。有人能帮我写一下这个脚本吗?
答案1
不要重新发明轮子。该id
命令可以做到这一点:
$ id foobar
uid=1000(foobar) gid=1000(foobar) groups=1000(foobar),4(adm),20(dialout),24(cdrom)
替换foobar
为您所需的用户名。
检查man id
以获得更多想法。
答案2
获取所有条目的所有组/etc/passwd
for user in $(getent passwd| cut -d: -f1); do groups $user; done
解释
getent passwd
/etc/passwd
:以通常的格式列出所有行guest-ZlneMD:x:119:130:Guest,,,:/tmp/guest-ZlneMD:/bin/bash
cut -d: -f1
:删除除第一个字段之外的所有字段(字段以 分隔:
),
结果是所有帐户名称的列表,按 UID 排序- 现在
user
被逐一赋予了所有这些值 并
groups $user
获取每个值并显示用户名和该帐户所属的所有组。guest-ZlneMD : guest-ZlneMD