Додайте кількох користувачів до групи 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

Навіть використовувати для циклу було б добре, але я не фахівець, тому цікаво.

bash  group 

Відповіді:


12

Якщо gpasswdце доступно (має бути в більшості дистрибутивів, крім Solaris), ви можете надати список користувачів, розділених комами, а також ім'я групи:

gpasswd -M userA,userB,userC mygroup

1
Це має бути відповіддю.
ivanleoncz

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
Гленн Джекман

@glennjackman: дякую, я пропустив getentкоманду до сих пір (у моїй системі також є хороша функція автозаповнення для всіх перевірених баз даних ).
Джузеппе Рікуперо

Занадто складно, я хотів би виконати це з командного рядка.

@HordonFreeman: скрипт при збереженні виконується як oneliner : fill_group.sh <group> <user1> ... <userN>. Якщо ви дійсно хочете мати лінійку oneliner: 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
Джузеппе Рікуперо

1

У дистрибутивах Fedora, Red Hat, CentOS та інших низхідних потоках ця newusersутиліта дозволяє дуже легко додати пакет нових користувачів до системи без необхідності писати сценарій Bash.

Можливо, вони також доступні на Debian і Ubuntu.


0

Щодо відповідей Томбарта та Мастерфула. Для старих distos (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, розпакуйте / активуйте нову групу, додайте деяких користувачів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.