我正在使用「getent passwd | cut -d:-f 1 | xargs groups> users.txt」,但列出了所有用戶及其所在的組。如果有成千上萬的用戶,我只需要特定組的用戶部分列表。如何列出linux中的管理組中的所有用戶
電流輸出是PIC我不需要linux_users組的成員
我正在使用「getent passwd | cut -d:-f 1 | xargs groups> users.txt」,但列出了所有用戶及其所在的組。如果有成千上萬的用戶,我只需要特定組的用戶部分列表。如何列出linux中的管理組中的所有用戶
電流輸出是PIC我不需要linux_users組的成員
可以通過管道將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
在/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:
您還可以閱讀與一組(users
下面例子):相關聯的用戶的列表
IFS=$',\n' read -a names < <(grep '^users:' /etc/group | sed 's/^.*://')
然後,可以在一個簡單的循環,例如訪問每個用戶
for i in ${names[@]}; do echo "$i"; done
這隻適用於支持索引數組和工藝替換的shell,否則需要管道操作。
沒有太多運氣與grep它不顯示任何東西只是使一個新的命令行 – Edgar
你是滾動到grep?你現在使用的新命令是什麼?應該看起來像'getent passwd | cut -d:-f 1 | xargs groups | grep groupname> users.txt' –
我做了,並說「組:unix:沒有這樣的用戶」似乎像搜索用戶而不是組名稱? – Edgar