web-dev-qa-db-ja.com

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

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

したがって、showusersのようなものはすべてのユーザーをリストし、showgroups -u thisuserは、thisuserが含まれるすべてのグループを表示します。

75
Steve Robbins

すべてのユーザー:

$ getent passwd

すべてのグループ:

$ getent group

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

$ getent group | grep username
100
EEAA

ユーザーとそのグループを一覧表示します。

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
18
nohup

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
5
Fredrick Gauss

すべてのユーザーを一覧表示

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

または

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

cat/etc/passwdはすべてのユーザー(および他の多くのもの)を表示しますが、cut -d ':' -f 1は、各行を分割する簡単な方法です':'を区切り文字として使用し、最初のフィールド(ユーザー)のみを抽出します。 awkバージョンとほとんど同じです。

すべてのグループを一覧表示

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

または

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

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

もう1つの興味深い方法は、おそらくOPが求めていたものにより近い、compgenです。ただし、互換性の問題については不明です。

compgen -u
compgen -g
3
Marcos Valle

使用する getent passwd{1000..60000}手動で追加されたユーザーのみを一覧表示します。参照: https://linuxize.com/post/how-to-list-users-in-linux/

for user in $(getent passwd {1000..60000} |awk -F: '{print $1}');
do 
    groups $user; 
done
0
jschnasse