1行でUNIXグループに複数のユーザーを追加する


13

上のCentOSに6.5(おそらく任意の)Linuxでは、私はグループを作成することができます。

sudo groupadd mygroup

それにいくつかのユーザーを追加します:

sudo usermod -a -G mygroup userA
sudo usermod -a -G mygroup userB
sudo usermod -a -G mygroup userC

私の特定のケースでのユーザー数は20です。次のようなワンライナーを使用するにはどうすればよいですか?

sudo usermod -a -G mygroup userA userB userC

forループを使用しても問題ありませんが、私はbashの専門家ではないので、疑問に思います。

bash  group 

回答:


12

gpasswd使用可能な場合(Solarisなどを除くほとんどのディストリビューションに存在する必要があります)、グループ名が後に続くユーザーのコンマ区切りリストを提供できます。

gpasswd -M userA,userB,userC mygroup

1
これが答えです。
ivanleoncz 2017

4
このソリューションは既存のグループメンバーリストを上書きすることに注意してください。これは、ユーザーの「追加」とは異なりますusermod -aG mygroup
マイケル


2

これは位置パラメータを持つ基本的なスクリプトです。以下のコードをと呼ばれるファイルに保存し、fill_group.shで実行可能にしchmod +x fill_group.shます。

次に、それをPATHディレクトリ(/usr/local/bin)に追加するか、と同じディレクトリで実行し./fill_group.sh <group_name> <user1> ... <userN>ます。

#!/bin/sh
#
# Name: fill_group.sh
# 
# Usage: 
# fill_group.sh <group_name> <user1> <user2> ... <userN>
#
# Description:
# add users to specific group passed as first parameter. 
# If the group doesn't exists add it to the system.
set -eu

# Exit if there is not at least 2 args (group,user1)
if [ $# -lt 2  ]; then exit 5; fi

group="${1}"; shift # extract group from arguments
if ! egrep --quiet "^${group}:" /etc/group; then
  sudo groupadd "${group}"
fi

for user in "${@}"; do
    sudo usermod -a -G "${group}" "${user}"
done

2
グループを検証する別の方法:if ! getent group "$group" >/dev/null
glenn jackman

@glennjackman:ありがとう、私はgetent今までコマンドを逃しました(私のシステムには、検査されたすべてのデータベース用の素晴らしいオートコンプリート機能もあります)。
Giuseppe Ricupero

複雑すぎるので、コマンドラインから実行したいと思います。

@HordonFreeman:保存時のスクリプトはワンライナーとして実行されます:fill_group.sh <group> <user1> ... <userN>。本当にワンライナーがfor user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; done必要な場合:または、次の名前のファイルに1行に1つずつユーザーリストがある場合users.listgroup=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero

1

Fedora、Red Hat、CentOS、およびその他のダウンストリームディストリビューションでは、newusersユーティリティを使用すると、Bashスクリプトを記述しなくても、システムに新しいユーザーのバッチを非常に簡単に追加できます。

DebianとUbuntuでも利用できる場合があります。


0

トンバートとマスターフールの答えについて。古いdistos(SLES 11 SP1)の場合、シャドウツールは少し異なります。マニュアルにはバージョン番号は記載されていませんが、2009年から2010年の日付です。

gpasswdの-Mオプションは存在しません(しかし、何か他のもののためにgpasswdが必要でした)。だからMasterfoolによるループオプションに行く必要があります。ただし、ここでは-aは存在せず、代わりに-Aは-aおよび-Gとして動作します。

これを実行して、システムの負荷へのアクセスをロールアウトします。これまでのところ、完全な「グループの作成と入力」は次のようになっています。

/usr/sbin/groupadd -g GID### mygroup
gpasswd -r mygroup
for user in userA userB userC; do sudo usermod -A mygroup "$user"; done

したがって、GIDを設定してグループを作成し、パスワードを解除するか、新しいグループをアクティブ化して、ユーザーを追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.