kazmax - Linux で自宅サーバー

あるグループをイニシャルグループとするユーザー一覧出力

あるグループをイニシャルグループとするユーザーアカウントの一覧が欲しかったのですが、 コマンドがありそうなのになかなか見つからない。

そんなコマンドは無いという事にして、コマンドくっつけて出力。

あるグループのGIDを取得し、/etc/passwd ファイルからそのGIDを検索し、ヒットしたアカウントを表示することにしました。

.bashrc ファイルに関数としてに記入しておくとコマンドのように使えるので利用価値有りです。
シェルでもいいんですけど。パス指定するのめんどくさいでしょ?

前置きいらない人は、項目4をコピペでOKかと。。。

Last Update : 2007年06月16日

あるグループをイニシャルグループとするユーザー一覧出力 項目

  1. /etc/group ファイルから指定したグループのGIDを出力
  2. /etc/passwd ファイルからアカウントとイニシャルグループのGIDを出力
  3. hogegroup グループをイニシャルグループとするアカウントの一覧を表示
  4. .bashrc ファイルに関数としてに記入する

1. /etc/group ファイルから指定したグループのGIDを出力

/etc/group ファイルですが、Linux グループ一覧の確認と/etc/group ファイル にあるように 一定の規則に従って記述されています。

欲しい情報は、指定したグループのGIDです。
例として、hogegroup グループのGIDを表示させます。

grephogegroup を検索し、 cut でGIDだけ表示させます。

[hoge@localhost ~]$ grep ^hogegroup: /etc/group ←hogegroup の検索
hogegroup:x:515:
[hoge@localhost ~]$ grep ^hogegroup: /etc/group | cut -d: -f3 ←GIDだけ表示
515 ←GID

memo

hogegroupの前の「 ^ 」(カレット?)は、「 行の先頭が 」という意味。

memo

grepについて

構文:

grep 検索文字列 ファイル名

→ 指定した「 ファイル 」から、「 検索文字列 」にマッチした行だけ出力する。 詳細は、grep コマンドの説明で。

memo

cutについて

構文:

cut -d区切り文字 -f表示フィールド ファイル名
-d区切り文字 -d と 区切り文字は連続して書く。
-f表示フィールド -f と表示フィールドは連続して書く。複数のフィールドを表示する場合は、カンマ区切り。

→ 指定した「 ファイル 」を「 -d 」に指定した区切り文字で区切り、「 -f 」で指定したフィールドを出力する。
詳細は、cut コマンドの説明で。

2. /etc/passwd ファイルからアカウントとイニシャルグループのGIDを出力

/etc/passwd ファイルも、Linux ユーザー一覧の確認と/etc/passwd ファイル にあるように 一定の規則に従って記述されています。

必要な情報は、ユーザー名とグループID。
必要なフィールドは、1番目と4番目。
/etc/passwd ファイルからユーザー名とそのユーザーのイニシャルグループを出力させます。

[hoge@localhost ~]$ cut -d: -f1,4 /etc/passwd
root:0
bin:1
daemon:2 ←ユーザー名とイニシャルグループのGIDのみ表示
・・・

3. hogegroup グループをイニシャルグループとするアカウントの一覧を表示

ここまできたら、あとは簡単で、2の出力から1の結果をgrep し、cut でアカウントだけ表示させます。

[hoge@localhost ~]$ cut -d: -f1,4 /etc/passwd | \
            grep :`grep ^hogegroup: /etc/group | cut -d: -f3`$
hoge1:515
hoge2:515
↑青い部分が1のコマンド

[hoge@localhost ~]$ cut -d: -f1,4 /etc/passwd | \
            grep :`grep ^hogegroup: /etc/group | cut -d: -f3`$ | cut -d: -f1
hoge1
hoge2
↑cut コマンドでアカウント部分だけ表示させている

memo

$ 」は、「 行の最後 」という意味。

` 」(バッククォート)は、バッククォートに囲まれたコマンドの出力結果を文字列として使う 」という意味。
bashの場合は「 $(コマンド) 」でも代用可能。

[hoge@localhost ~]$ echo `date`
2007年 6月 16日 土曜日 04:03:47 JST
↑「 date 」コマンドの出力を文字列として扱っている。

[hoge@localhost ~]$ echo $(date)
2007年 6月 16日 土曜日 04:03:53 JST
↑結果は同じ

4. .bashrc ファイルに関数としてに記入する

.bashrc ファイルに関数としてに記入すると、コマンドの様に使えるし、変数も使えるのでかなり便利です。
上の様に長いコマンドも打たなくて済む。
シェルの様にパスを気にする事も無い。

関数名は、「 listgroupusers 」にしました。(長いか?)

自分のホームディレクトリにある、「 .bashrc 」ファイルに以下追記します。

[hoge@localhost ~]$ vi .bashrc
~~~~ここから~~~~
function listgroupusers()
{
    cut -d: -f1,4 /etc/passwd | \
        grep :`grep ^$1: /etc/group | cut -d: -f3`$ | cut -d: -f1
}
~~~~ここまで~~~~
↑ $1が変数です。1個目の引数が入ります。

memo

.bashrc 」ファイルは、シェルが起動したときに実行されるファイルです。 ログインした時などに読み込まれ実行されています。
次回ログイン時も自動的に読み込まれているので、何もしなくても登録した関数を実行できます。

追記したら、.bashrc を再度読み込ませ設定を反映させます。

[hoge@localhost ~]$ source .bashrc

こうする事で、listgroupusers がコマンドの様に使えるようになります。

[hoge@localhost ~]$ listgroupusers hogegroup
hoge1
hoge2
↑hogegroup をイニシャルグループとするユーザーの一覧

便利になった~