web-dev-qa-db-ja.com

FreeBSDでグループ内のユーザーのリストを取得する

FreeBSD 11.1でグループに割り当てられているユーザー名のリストを取得するにはどうすればよいですか?

この質問 ユーザーのリストまたはグループのリストを要求します。

この質問 複数の特定のグループのメンバーであるユーザーを尋ねます。

➥しかし、wheelのような単一の特定のグループに現在割り当てられているユーザーのリストを要求する方法は?

可能であれば、1つのコマンドで解決する方が好ましいです。しかし、実行可能でない場合、スクリプトは有用で教育的です。

1
Basil Bourque

pwユーティリティで指定されたすべてのユーザーのリストから、特定のグループを持つユーザーを選択できます。

pw usershow -P -a | grep groupname

結果は次のようになります。

Login Name: username1     #1024         Group: groupname          #1002
Login Name: username2     #1025         Group: groupname          #1002
1

getentのようなシステムスクリプトを無視すると、ユーザーは2つの方法でグループに参加できます。/etc/passwdで定義されたプリンシパルグループであるか、/ etc/groupsでセカンダリグループとして使用されます。

GROUPID=1000
sed -rn "s/^[^:]*:[^:]*:$GROUPID://p" < /etc/group | tr ',' '\n'
sed -rn "s/^([^:]*):[^:]*:[^:]*:$GROUPID:.*/\\1/p" < /etc/passwd

うまくやるべきです。 awkはおそらくもっと見栄えがするでしょう...

GROUPID=1000
awk -F: -v "g=$GROUPID" '{if ($3==g) print $1;}' /etc/passwd
awk -F: -v "g=$GROUPID" '{if ($3==g) print $4;}' /etc/group | tr ',' '\n'
1
Law29

https://www.cyberciti.biz/faq/linux-list-all-members-of-a-group/ スレッドは、これを行う複数の方法を示しています。私は個人的にメンバー方式が好きです。ただし、以下の方法はネイティブであり、うまく機能します。

$ grep 'grpup-name-here' /etc/group
$ grep 'ftponly' /etc/group
$ grep -i --color 'ftponly' /etc/group