Answers:
全部用户:
$ getent passwd
所有组:
$ getent group
具有特定用户的所有组:
$ getent group | grep username
speech-dispatcher
,该用户属于组音频(基于groups speech-dispatcher
)。但是它没有在getent group
命令下列出!问题是什么?
/etc/passwd
&/etc/group
文件中找不到的用户/组,即,当系统配置为使用诸如NIS和LDAP之类的中央目录或任何其他替代用户/组数据库时,只要支持用户/组枚举。
列出用户及其组:
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
如果您不关心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
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
像这样:
sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username
/etc/gshadow
不包含组成员(包含/etc/group
),并且4.5年前接受的答案无论如何都更为通用,因为它还可以处理远程组。