私は最近、新しいユーザーを作成し、それらを特定のグループに割り当てています。特定のグループに割り当てられているすべてのユーザーを表示するコマンドがあるかどうか疑問に思っていましたか? 「groups」コマンドを使用してみましたが、これを使用するたびに「groups:not found」と表示されます
あなたはgrepを使うことができます:
grep '^group_name_here:' /etc/group
これは、このグループをプライマリグループとして持つユーザーではなく、補足的なグループメンバーシップのみをリストします。また、ローカルグループのみが検出され、LDAPなどのネットワークサービスのグループは検出されません。
getent コマンドを使用したい...
Getentはシステムと同じネームサービスを使用するため、LDAPなどのネットワーク情報ソースから取得した情報を含め、すべての情報が表示されます。
したがって、グループの場合は、以下を使用する必要があります...
getent group name_of_group
ここで、name_of_groupは、検索するグループに置き換えられます。これは補足グループメンバーシップのみを返すことに注意してください。このグループをプライマリグループとして持っているユーザーは含まれません。
他にもたくさんのルックアップがあります... passwd
もう1つの便利なルックアップです。プライマリグループをリストする必要があります。
実行が簡単_groups [username]
_
すべてのローカルユーザーとそのローカルグループを一覧表示する場合は、
_cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
_
「groups:command not found」と表示された場合は、環境パスを編集してパスをリセットした可能性があります。doPATH=$(getconf PATH)
groupmems -g グループ名 -l
指定されたグループのすべてのユーザーをリストします。
誰も言及されていないことに驚いています
id <user>
このコマンドは、ユーザーが所属するグループのリストを提供します。
groups
コマンドは、ユーザーのグループメンバーシップを出力します。 lid
コマンドを使用して、次のようなグループのユーザーを一覧表示できます。
# lid -g <groupname>
一部のユーザーは、libuser(「lid」の場合)またはメンバー(「members」の場合)をインストールするように指示します。しかし、答えに基づいて構築 https://unix.stackexchange.com/a/349648/77959 処理 このログイングループメンバーシップの問題 対象外の別のグループが見つかりましたそのスクリプト。だから-ここに両方のアプローチを組み合わせた最良のものがあります:
#!/bin/bash
if [ $# -eq 1 ]; then
list_a=`cut -d: -f1,4 /etc/passwd | grep $(getent group "$1"| cut -d: -f3) | cut -d: -f1`
list_b=`getent group "$1"|cut -d: -f4|sed 's/,/\n/g'`
echo -e "$list_a\n$list_b"|grep -v "^$"|sort|uniq
else
echo "pass me a group to find the members of"
fi
OPは groups コマンドを使用する可能性を除外するために質問をフレーズ化しました。これはLinuxのcoreutilsの一部であるため、(a)削除されたか、(b)OPが名前を誤って入力しています。
OPは、たとえば次のようにgroups
を使用できます。
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w Sudo|awk '{print $1;}';done
1つの提案された回答は、/etc/group
のグループ名のgrepだけです。意図したとおりに機能することもあります。
grep のやや良い使用法は /etc/group
の構文を考慮に入れます:
group_name:password:GID:user_list
したがって、最初のコロンbeforeの部分のみが有効なグループ名になります。構文に関係なくプレーンなgrepは、ファイルから誤解を招く一致を拾い上げる可能性があります。正規表現を使用して、grepを必要なものと正確に一致させます。
grep -E '^users:' /etc/group |sed -e 's/^.*://'
またはシェル変数を使用します:
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
ただし、これは default group にないもののみをリストします。 thoseを追加するには、パスワードファイルを考慮する必要があります。たとえば、/etc/group
からグループID番号を抽出し、印刷します。デフォルトグループが/etc/passwd
に一致するユーザー。例:
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
Grepとsedを使用しても同じことができますが、awkを使用するよりも作業が多くなります。
getent
を使用して提案された別の推奨される回答は、Linuxマシンにも存在する可能性があります(Debianでは、GNU libc)の一部です)。ただし、これを簡単に確認すると、/etc/group
コンテンツのみが提供されていることがわかります。
(ほとんどの場合と同様に)libusers
またはlid
をインストールしていないため、OPの条件を満たすかどうかについてコメントすることはできません。
グループ情報を提供するid
プログラムもあります。誰かがそれを可能な答えとして拡張するかもしれません。
魅力のように機能します:
cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
このuser3717722アプローチの変更により、NISデータベースにグループメンバーがリストされます。
ypcat passwd | cut -d: -f1,4 | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
function members {
echo "$(getent group $1 | cut -d: -f1,2,3):$(getent passwd | cut -d: -f1,4 | grep $(getent group $1 | cut -d: -f3) | cut -d: -f1 | paste -sd ','):$(getent group $1 | cut -d: -f4)"
}
「:」で区切られたプライマリメンバーとセカンダリメンバーを一覧表示します