既存のグループとユーザーがいることは知っていますが、それらの関連付けについてはよくわかりません。すべてのユーザーまたはすべてのグループを一覧表示するために使用できるシェルコマンドと、指定したユーザー/グループのすべてのグループ/ユーザーを一覧表示するコマンドはありますか?
したがって、showusers
のようなものはすべてのユーザーをリストし、showgroups -u thisuser
は、thisuser
が含まれるすべてのグループを表示します。
すべてのユーザー:
$ getent passwd
すべてのグループ:
$ getent group
特定のユーザーを持つすべてのグループ:
$ getent group | grep username
ユーザーとそのグループを一覧表示します。
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
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
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
使用する 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