Добавить нескольких пользователей в группу 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 loop было бы хорошо, но я не специалист по bash, так что интересно.


источник

Ответы:

12

Если gpasswdдоступно (должно присутствовать в большинстве дистрибутивов, кроме, например, Solaris), вы можете предоставить список пользователей через запятую, за которым следует имя группы:

gpasswd -M userA,userB,userC mygroup
Tombart
источник
1
Этот должен быть ответом.
ivanleoncz
4
Имейте в виду, что это решение перезаписывает существующий список членов группы. Это не то же самое, что «добавление» пользователей usermod -aG mygroup.
Майкл
10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Masterfool
источник
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
Гленн Джекман
@glennjackman: спасибо, я пропустил getentкоманду до сих пор (в моей системе также есть хорошая функция автозаполнения для всех проверенных баз данных ).
Джузеппе Рикуперо
Слишком сложно, я хотел бы выполнить его из командной строки.
@HordonFreeman: сценарий при сохранении выполняется как Oneliner: fill_group.sh <group> <user1> ... <userN>. Если вы действительно хотите подписаться на него: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneили если у вас есть список пользователей по одному на строку в файле с именем users.list:group=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.

fpmurphy
источник
0

Относительно ответов Томбарта и Мастера. Для старых дисто (SLES 11 SP1) теневые инструменты немного отличаются. Руководства не дают номера версии, но датированы 2009-2010 гг.

Опция -M в gpasswd не существует (но для чего-то еще нужен 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, снимите пароль / активируйте новую группу, добавьте несколько пользователей.

Stripy42
источник