ユーザーがグループにいるかどうかを確認する方法

ユーザーがグループにいるかどうかを確認する方法

次のユーザーをwhite_houseグループに追加します。

図書館、トランプ、カーター

usermod -a -G white_house kuku
usermod -a -G white_house trump
usermod -a -G white_house karter

私たち全員が知っているように、ユーザーがグループに追加されていることを確認できます。

grep white_house /etc/group

しかし、コマンドラインまたはよりエレガントな方法でこれを確認できますか?

答え1

getentを使用できます。

getent group white_house 

または、特定のユーザーグループを確認するには、次を使用できます。groups

groups karter

答え2

次のシェル関数は2つのパラメータを受け入れます。

  1. ユーザー名
  2. グループ名

グループに関する情報を要求し、そのgetent group結果をawkに渡します。 awkはユーザーリスト(フィールド4、コロンで区切られた)を取得し、それをカンマ区切りの「ユーザー」配列にさらに分割します。次に、その配列(ユーザー名)の各要素を別々の行に印刷して、指定されたgrepユーザー名を確認します。ユーザーが見つかると、grep(および関数全体)は0 /成功を返し、そうでない場合は1 /失敗を返します。 grepフラグの意味は次のとおりです。

  • -F- 検索テキストを正規表現ではなく固定文字列として扱います。
  • -x- 検索テキストと一致するには完全な行が必要です(「john」や「johnson」などの誤った肯定的な一致を防ぐ)。
  • -q- 画面に何も印刷せず、戻りコードを適切に設定してください。

function useringroup {
  getent group "$2" |
    awk -F: '{split($4, users, ","); for (name in users) print users[name]}' |
      grep -Fxq "$1"
}

次のように使用してください。

useringroup myuser mygroup && echo myuser is in mygroup || echo myuser is not in mygroup

答え3

以下を実行できますid -Gn user_name

  • -Gこのユーザー名のすべてのグループを表示します。
  • -NGIDの代わりに名前を表示します。

ステートメントが真であることを確認する必要がある場合は、次の(より複雑な)構成が役立ちますid -Gn user_name | grep group_name && echo "We are good" || echo "user_name is not the member of group_name

関連情報