カテゴリ:

LinuxやUNIXで特定のユーザが所属するグループ一覧を表示するにはgroupsというコマンドを使います。下記ではユーザjohnとrootでそれぞれ実行した例です。

$ groups john
john : beatles
$ groups root
root : root bin daemon sys adm disk wheel

では逆に特定のグループに所属するユーザ一覧を表示するには何というコマンドを使うのでしょうか?答えはありません。(のはず、知ってる方いたら教えてください)

では特定のグループに所属するユーザ一覧を表示することはできないのかというと、そんなことはもちろんありません。例えばawkコマンドで簡単に表示できます。

まず調べたいグループのgid(group id)を調べます。グループはファイル/etc/groupで管理されており、下記はbeatlesで検索し、gidが503であると表示された例です。そしてこの時点で、ユーザtaroとjiroがセカンダリグループとして所属していることが分かります。

$ grep beatles /etc/group
beatles:x:503:taro,jiro

次にユーザが登録されているファイル/etc/passwdからgidが503であるものを抜き出した例です。ここではawkコマンドを利用し、":"で区切られたデータの4列目(gid)が503であるものを検索し1列目(ユーザ名)のみの表示しています。これでプライマリグループに所属しているgeorge、john、paul、ringoが表示されました。

$ awk -F':' '$4==503{print $1}' /tmp/passwd | sort
george
john
paul
ringo

ということで、この2段階の処理で特定グループに所属するユーザをすべて表示することができます。

ちなみに最初のコマンドでtaro,jiroと続けて表示されるのが納得いかない場合は、このようにすれば改行して表示できます。

$ grep beatles /etc/group | awk -F':' '{print $4}' | awk -F',' '{gsub(",","\n") ; print $0}' | sort
jiro
taro