如何在Linux(可能还有其他unix)中列出一个组的所有成员?
当前回答
你可以在一个命令行中完成:
cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
上面的命令列出了所有使用groupname作为主组的用户
如果还希望列出具有groupname的用户作为次要组,则使用以下命令
getent group <groupname> | cut -d: -f4 | tr ',' '\n'
其他回答
下面是一个脚本,返回/etc/passwd和/etc/group中的用户列表 它不检查NIS或LDAP,但它显示了将该组作为默认组的用户 在Debian 4.7和solaris 9上测试
#!/bin/bash
MYGROUP="user"
# get the group ID
MYGID=`grep $MYGROUP /etc/group | cut -d ":" -f3`
if [[ $MYGID != "" ]]
then
# get a newline-separated list of users from /etc/group
MYUSERS=`grep $MYGROUP /etc/group | cut -d ":" -f4| tr "," "\n"`
# add a newline
MYUSERS=$MYUSERS$'\n'
# add the users whose default group is MYGROUP from /etc/passwod
MYUSERS=$MYUSERS`cat /etc/passwd |grep $MYGID | cut -d ":" -f1`
#print the result as a newline-separated list with no duplicates (ready to pass into a bash FOR loop)
printf '%s\n' $MYUSERS | sort | uniq
fi
或者作为一行程序,您可以直接从这里剪切和粘贴(在第一个变量中更改组名)
MYGROUP="user";MYGID=`grep $MYGROUP /etc/group | cut -d ":" -f3`;printf '%s\n' `grep $MYGROUP /etc/group | cut -d ":" -f4| tr "," "\n"`$'\n'`cat /etc/passwd |grep $MYGID | cut -d ":" -f1` | sort | uniq
使用Python列出组成员:
import grp;打印grp.getgrnam (GROUP_NAME)[3]”
参见https://docs.python.org/2/library/grp.html
lid -g groupname | cut -f1 -d'('
你可以在一个命令行中完成:
cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
上面的命令列出了所有使用groupname作为主组的用户
如果还希望列出具有groupname的用户作为次要组,则使用以下命令
getent group <groupname> | cut -d: -f4 | tr ',' '\n'
getent group groupname | awk -F: '{print $4}' | tr , '\n'
这有三个部分:
1 - getent group groupname显示“/etc/group”文件中组的行。替代cat /etc/group | grep groupname。
2 - awk只打印用','分隔的单行中的成员。
3 - tr将','替换为新行,并在一行中打印每个用户。
4 -可选:如果用户太多,你也可以使用另一个管道排序。
问候