web-dev-qa-db-ja.com

Linux内のグループに属するユーザーを見つけるにはどうすればよいですか?

私は最近、新しいユーザーを作成し、それらを特定のグループに割り当てています。特定のグループに割り当てられているすべてのユーザーを表示するコマンドがあるかどうか疑問に思っていましたか? 「groups」コマンドを使用してみましたが、これを使用するたびに「groups:not found」と表示されます

76
Jess Louise

あなたはgrepを使うことができます:

grep '^group_name_here:' /etc/group

これは、このグループをプライマリグループとして持つユーザーではなく、補足的なグループメンバーシップのみをリストします。また、ローカルグループのみが検出され、LDAPなどのネットワークサービスのグループは検出されません。

48
ARG

getent コマンドを使用したい...

Getentはシステムと同じネームサービスを使用するため、LDAPなどのネットワーク情報ソースから取得した情報を含め、すべての情報が表示されます。

したがって、グループの場合は、以下を使用する必要があります...

getent group name_of_group

ここで、name_of_groupは、検索するグループに置き換えられます。これは補足グループメンバーシップのみを返すことに注意してください。このグループをプライマリグループとして持っているユーザーは含まれません。

他にもたくさんのルックアップがあります... passwdもう1つの便利なルックアップです。プライマリグループをリストする必要があります。

95
Murray Jensen

実行が簡単_groups [username]_

すべてのローカルユーザーとそのローカルグループを一覧表示する場合は、

_cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups_

「groups:command not found」と表示された場合は、環境パスを編集してパスをリセットした可能性があります。doPATH=$(getconf PATH)

13
ZN13
groupmems -g グループ名 -l

指定されたグループのすべてのユーザーをリストします。

8
user198963

誰も言及されていないことに驚いています

id <user>

このコマンドは、ユーザーが所属するグループのリストを提供します。

7
Alex

groupsコマンドは、ユーザーのグループメンバーシップを出力します。 lidコマンドを使用して、次のようなグループのユーザーを一覧表示できます。

# lid -g <groupname>
6
Kadir

一部のユーザーは、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
2
flowtron

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プログラムもあります。誰かがそれを可能な答えとして拡張するかもしれません。

2
Thomas Dickey

魅力のように機能します:

cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
2
Bhavik

このuser3717722アプローチの変更により、NISデータベースにグループメンバーがリストされます。

ypcat passwd | cut -d: -f1,4 | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
0
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)"

}

「:」で区切られたプライマリメンバーとセカンダリメンバーを一覧表示します

0
Julie Yang