すべてのユーザーとそのグループを表示する/その逆


70

既存のグループとユーザーがいることは知っていますが、それらの関連付けについてはわかりません。すべてのユーザーまたはすべてのグループを一覧表示するために使用できるシェルコマンドと、指定されたユーザー/グループのすべてのグループ/ユーザーを一覧表示するコマンドはありますか?

そのようなものshowusersは、すべてのユーザーをリストし、showgroups -u thisuserその中にいるすべてのグループを表示thisuserします。


そのようなコマンドはありません。自分でスクリプトを作成する必要があります。
クリス

どうcat /etc/passwd
ですか

回答:


93

すべてのユーザー:

$ getent passwd

すべてのグループ:

$ getent group

特定のユーザーを持つすべてのグループ:

$ getent group | grep username

speech-dispatcherグループaudio(に基づくgroups speech-dispatcher)に属するという名前のユーザーがいることがわかりました。しかし、それはgetent groupコマンドの下にリストされていません!何が問題ですか?
PHP学習者

3
@PHPLearner別の質問がある場合は、コメントではなく質問投稿してください。
EEAA

これは、従来の/etc/passwd/etc/groupファイルにはないユーザー/グループもリストするためです。つまり、ユーザー/グループの列挙をサポートしている限り、NISやLDAPなどの中央ディレクトリまたは他の代替ユーザー/グループデータベースを使用するようにシステムが構成されている場合。
-HBruijn

列挙がオフになっている場合、これはldapまたはsssd構成のすべてのユーザーとグループを返しません。
マーマン

16

ユーザーとそのグループのリスト:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

リストグループとそのユーザー:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done

1
これはおそらく機能しますが、これを行うための完全に優れた単純なワンショットコマンドがある場合は、少し過度に複雑に思えますか?
EEAA

確かに、一元化されたリポジトリにあるものは何も得られません。そして、それは間違いなくあなたが見たい情報です。
マゼラン

とても助かりました。それらは別々のコマンドであることに言及した方が良いでしょう。
ミアンアスバットアーマッド

5

LDAPやNISなどのリモートユーザーを気にしない場合は、ユーザーとその関連グループを簡単な方法で一覧表示します。

cut -d: -f1 /etc/passwd | xargs groups

出力;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev

1
これは、LDAP、NISなどのデータベースに由来するユーザー/グループを無視するという点で、Changの答えと同じ問題があります
。– MadHatter

これは非常にきれいな形式で情報を非常にきれいに出力しますが、それでも有用な最初のステップになります。/ etc / groupと/ etc / passwdの構文に関する私の記憶を助長しました!
クリスウッズ

3

すべてのユーザーをリストする

cut -d':' -f 1 /etc/passwd

または

awk -F ':' '{print $1}' /etc/passwd

ながら猫/ etc / passwdファイルは、すべてのユーザー(および他のものの束)を示し、-d切断「:」-f 1は、各ラインを分割するための簡単な方法である「:」区切り文字として及び(ユーザーだけ最初のフィールドを抽出)。awkバージョンとほとんど同じです。

すべてのグループをリストする

cut -d':' -f 1 /etc/group

または

awk -F ':' '{print $1}' /etc/group

ユーザーをリストするのと非常に似ていると思います。代わりに/ etc / groupを解析してください。

OPが望んでいたものに近い、もう1つの興味深い方法はcompgenです。ただし、互換性の問題についてはわかりません。

compgen -u
compgen -g

2
こんにちはElliot Baily、Server Faultへようこそ!この質問は5年以上前のものであり、すでに正しい回答が受け入れられています。また、ユーザーが/ etc / passwdに保存されている場合にのみソリューションが機能することにも注意してください。受け入れられた回答は、他のユーザーデータベース(NISやLDAPなど)でも機能します。古い質問に答えたい場合(完全に問題ありません!)、未回答の質問のリストを見てみたいと思うかもしれません。
marcelm

-1

debian用

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

2
すでに受け入れられているのとは対照的に、これは、LDAP、NISなどのリモートユーザーデータベースに由来するユーザー/グループをリストしません。
HBruijn

-2

このような:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

1
いいえ。/etc/gshadowグループメンバーは含まれません(含まれます/etc/group)。4.5年前から受け入れられた回答は、リモートグループも処理するため、とにかくはるかに一般的です。
スヴェン

-2

このコマンドを使用して、その特定のグループのすべてのグループとユーザーを取得します。

grep '
> ' /etc/group
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.