Bir satırda UNIX grubuna birden çok kullanıcı ekleme


13

On CentOS 6.5 (ve muhtemelen herhangi) linux, bir grubu oluşturabilirsiniz:

sudo groupadd mygroup

ve birkaç kullanıcı ekleyin:

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

Benim özel durumumdaki kullanıcı sayısı 20. Bir astarı nasıl kullanabilirim:

sudo usermod -a -G mygroup userA userB userC

Döngü için kullanmak bile iyi olurdu, ama ben bir bash uzmanı değilim, merak ediyorum.

bash  group 

Yanıtlar:


12

Varsa gpasswd(Solaris hariç çoğu dağıtımda olması gerekir), virgülle ayrılmış bir kullanıcı listesi ve ardından grup adını sağlayabilirsiniz:

gpasswd -M userA,userB,userC mygroup

1
Cevap bu olmalı.
ivanleoncz

4
Bu çözümün mevcut grup üyeleri listesinin üzerine yazıldığını unutmayın. Bu, kullanıcıları "eklemek" ten farklı bir şeydir usermod -aG mygroup.
Michael

10
for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done

2

Bu, konumsal parametreleri olan rudimental bir komut dosyasıdır, aşağıdaki kodu adlı bir dosyaya kaydedin fill_group.shve çalıştırılabilir yapın chmod +x fill_group.sh.

Ardından bir PATH dizinine ( /usr/local/bin) ekleyin veya bulunduğu dizinde yürütün ./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
Grubu doğrulamanın başka bir yolu:if ! getent group "$group" >/dev/null
glenn jackman

@glennjackman: teşekkür ederim, getentşimdiye kadar komutu kaçırdım (sistemimde denetlenen tüm veritabanları için güzel bir otomatik tamamlama özelliği de var ).
Giuseppe Ricupero

Çok karmaşık, komut satırından yürütmek istiyorum.

@HordonFreeman: Senaryo kaydedilmiş bir Oneliner olarak yürütülür: fill_group.sh <group> <user1> ... <userN>. Gerçekten bir oneliner istiyorsanız: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneveya bir kullanıcı listesine sahip bir dosyada her satırda bir tane denir users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero

1

Fedora, Red Hat, CentOS ve diğer alt dağıtımlarda, newusersyardımcı program Bash betiği yazmak zorunda kalmadan bir sisteme çok sayıda yeni kullanıcı eklemenizi sağlar.

Debian ve Ubuntu'da da mevcut olabilir.


0

Tombart ve Masterfool'un cevapları hakkında. Eski diskler için (SLES 11 SP1), gölge araçları biraz farklıdır. Kılavuzlar sürüm numarası vermez, ancak 2009-2010 tarihli.

Gpasswd içindeki -M seçeneği mevcut değil (ancak başka bir şey için gpasswd gerekli). Bu yüzden Masterfool'un döngü seçeneğini tercih etmeniz gerekiyor. Ama burada -a mevcut değil, -A -a & -G gibi davranıyor.

Ben yük sistemlerine erişim sunmak için yapıyorum ve benim tam "grup oluştur ve doldurmak" şu ana kadar görünüyor:

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

Bu nedenle, set GID ile grup oluşturun, şifreyi kaldırın / yeni grubu etkinleştirin, bazı kullanıcılar ekleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.