如何在Linux

时间:2016-08-12 16:04:04

标签: linux unix

我正在使用“getent passwd | cut -d:-f 1 | xargs groups> users.txt”,但这会列出所有用户及其所在的群组。在我的情况下,有成千上万的用户我只需要用户列表特定组的一部分。

当前输出是pic我不需要linux_users组的成员

enter image description here

3 个答案:

答案 0 :(得分:0)

您可以通过管道grep来缩小您获得的列表范围。使用类似grep groupname

之类的内容

Grep:http://www.gnu.org/software/grep/manual/grep.html

然后你可以使用awk只获得一行的一部分。

Awk:http://tldp.org/LDP/abs/html/awk.html

所以在你的情况下你可以这样做:getent passwd | cut -d : -f 1 | xargs groups | grep linux_admins | awk {'print $1'} > users.txt

答案 1 :(得分:0)

/etc/group中的每条记录都以一组用户列表作为其补充组(参见http://linux.die.net/man/5/group)。 要获取目标组的所有成员,您需要获得那些以及将目标组作为主要组的所有用户(在/ etc / passwd中,由/etc/group中提到的目标组编号标识)。

这个脚本会让你们两个(你可以称之为group_ls或类似的东西):

#!/bin/sh
num_membs="$( getent group "$1" |cut -d: -f3,4 )"
num="${num_membs%:*}"; membs="${num_membs#*:}"
( IFS=,
printf '%s\n' $membs
awk -v num=$num -F: ' $4 == num { print $1 } ' /etc/passwd
) | sort -u

或者,根据您的方法

  getent passwd | cut -d : -f 1 | xargs groups |
     grep ":.* $1 .*" |cut -d : -f1

也应该这样做。

答案 2 :(得分:0)

您还可以使用以下内容将bash中与组关联的用户列表(例如:users)读入数组:

IFS=$',\n' read -a names < <(grep '^users:' /etc/group | sed 's/^.*://')

然后,您可以通过简单的循环访问每个用户,例如

for i in ${names[@]}; do echo "$i"; done

这仅适用于支持索引数组和进程替换的shell,否则需要管道体操。