Dodaj wielu użytkowników do grupy UNIX w jednym wierszu

13

Na Linuksie Centos 6.5 (i prawdopodobnie dowolnym) mogę utworzyć grupę:

sudo groupadd mygroup

i dodaj do niego kilku użytkowników:

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

Liczba użytkowników w moim konkretnym przypadku to 20. Jak mogę korzystać z jednej linijki, takiej jak:

sudo usermod -a -G mygroup userA userB userC

Nawet użycie pętli for byłoby w porządku, ale nie jestem specjalistą od bashów, więc zastanawiam się.


źródło

Odpowiedzi:

12

Jeśli gpasswdjest dostępny (powinien być dostępny w większości dystrybucji z wyjątkiem np. Solaris), możesz podać listę użytkowników oddzieloną przecinkami, a następnie nazwę grupy:

gpasswd -M userA,userB,userC mygroup
Tombart
źródło
1
To powinna być odpowiedź.
ivanleoncz
4
Należy pamiętać, że to rozwiązanie zastępuje istniejącą listę członków grupy. Jest to inna rzecz niż „dodawanie” użytkowników usermod -aG mygroup.
Michael
10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Masterfool
źródło
2

Jest to podstawowy skrypt z parametrami pozycyjnymi, zapisz poniższy kod w pliku o nazwie fill_group.shi wykonaj go za pomocą chmod +x fill_group.sh.

Następnie dodaj go do katalogu PATH ( /usr/local/bin) lub uruchom w tym samym katalogu , w którym się znajduje ./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
Giuseppe Ricupero
źródło
2
Inny sposób na walidację grupy:if ! getent group "$group" >/dev/null
glenn jackman
@glennjackman: dziękuję, getentdo tej pory brakowało mi polecenia (w moim systemie jest też ładna funkcja autouzupełniania dla wszystkich sprawdzanych baz danych ).
Giuseppe Ricupero,
Zbyt skomplikowane, chciałbym wykonać go z wiersza poleceń.
@HordonFreeman: skrypt gdy zapisana jest wykonywany jako oneliner: fill_group.sh <group> <user1> ... <userN>. Jeśli chcesz naprawdę oneliner: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; donelub jeśli masz listę użytkowników po jednej w wierszu w pliku o nazwie users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero
1

W Fedorze, Red Hat, CentOS i innych dalszych dystrybucjach newusersnarzędzie umożliwia bardzo łatwe dodawanie partii nowych użytkowników do systemu bez konieczności pisania skryptu Bash.

Może być również dostępny na Debianie i Ubuntu.

fpmurphy
źródło
0

Odnośnie odpowiedzi Tombarta i Masterfoola. W przypadku starych dystrybucji (SLES 11 SP1) narzędzia cienia są nieco inne. Instrukcje nie zawierają numeru wersji, ale są datowane na lata 2009-2010.

Opcja -M w gpasswd nie istnieje, (ale potrzebowała gpasswd do czegoś innego). Więc musisz wybrać opcję pętli Masterfool. Ale tutaj -a nie istnieje, zamiast tego -A zachowuje się jak -a i -G.

Robię to, aby wprowadzić dostęp do obciążeń systemów, a mój kompletny „stwórz grupę i wypełnij” do tej pory wygląda następująco:

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

Tak, stwórz grupę z ustawionym GID, odblokuj / aktywuj nową grupę, dodaj niektórych użytkowników.

Stripy42
źródło