2016-08-12 69 views
1

我正在使用「getent passwd | cut -d:-f 1 | xargs groups> users.txt」,但列出了所有用戶及其所在的組。如果有成千上萬的用戶,我只需要特定組的用戶部分列表。如何列出linux中的管理組中的所有用戶

電流輸出是PIC我不需要linux_users組的成員

enter image description here

回答

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

+0

沒有太多運氣與grep它不顯示任何東西只是使一個新的命令行 – Edgar

+0

你是滾動到grep?你現在使用的新命令是什麼?應該看起來像'getent passwd | cut -d:-f 1 | xargs groups | grep groupname> users.txt' –

+0

我做了,並說「組:unix:沒有這樣的用戶」似乎像搜索用戶而不是組名稱? – Edgar

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 

也應該這樣做。用下面的到一個數組在bash:

0

您還可以閱讀與一組(users下面例子):相關聯的用戶的列表

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

然後,可以在一個簡單的循環,例如訪問每個用戶

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

這隻適用於支持索引數組和工藝替換的shell,否則需要管道操作。

相關問題