Tambahkan beberapa pengguna ke grup UNIX dalam satu baris


13

Di Centos 6.5 (dan mungkin ada) linux, saya dapat membuat grup:

sudo groupadd mygroup

dan tambahkan beberapa pengguna ke dalamnya:

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

Jumlah pengguna dalam kasus khusus saya adalah 20. Bagaimana saya bisa menggunakan one-liner seperti:

sudo usermod -a -G mygroup userA userB userC

Bahkan menggunakan loop tidak masalah, tapi aku bukan spesialis bash, jadi bertanya-tanya.

bash  group 

Jawaban:


12

Jika gpasswdtersedia (harus pada sebagian besar distribusi kecuali misalnya Solaris) Anda dapat memberikan daftar pengguna yang dipisahkan koma diikuti dengan nama grup:

gpasswd -M userA,userB,userC mygroup

1
Yang ini harus menjadi jawabannya.
ivanleoncz

4
Ingatlah bahwa solusi ini menimpa daftar anggota grup yang ada. Ini adalah hal yang berbeda dari "menambahkan" yang disukai pengguna usermod -aG mygroup.
Michael

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

2

Ini adalah skrip rudimental dengan parameter posisional, simpan kode di bawah ini dalam file yang dipanggil fill_group.shdan jalankan dengan chmod +x fill_group.sh.

Kemudian tambahkan ke direktori PATH ( /usr/local/bin) atau jalankan di dir yang sama dengan lokasinya ./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
Cara lain untuk memvalidasi grup:if ! getent group "$group" >/dev/null
glenn jackman

@ glennjackman: terima kasih, saya melewatkan getentperintah sampai sekarang (di sistem saya ada juga fitur autocomplete yang bagus untuk semua database yang diperiksa).
Giuseppe Ricupero

Terlalu rumit, saya ingin menjalankannya dari baris perintah.

@HordonFreeman: script ketika disimpan dijalankan sebagai oneliner a: fill_group.sh <group> <user1> ... <userN>. Jika Anda benar-benar ingin oneliner: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; doneatau jika Anda memiliki daftar pengguna satu per baris dalam sebuah file bernama users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero

1

Pada Fedora, Red Hat, CentOS dan distribusi hilir lainnya, newusersutilitas ini memungkinkan Anda untuk dengan mudah menambahkan sekelompok pengguna baru ke sistem tanpa harus menulis skrip Bash.

Mungkin juga tersedia di Debian dan Ubuntu.


0

Mengenai jawaban Tombart dan Masterfool. Untuk disto lama (SLES 11 SP1), alat bayangan agak berbeda. Manual tidak memberikan nomor versi, tetapi bertanggal 2009-2010.

Opsi -M di gpasswd tidak ada, (tetapi diperlukan gpasswd untuk sesuatu yang lain). Jadi perlu pergi untuk opsi loop oleh Masterfool. Tapi di sini -a tidak ada, malah -A berperilaku sebagai -a & -G.

Saya melakukan ini untuk meluncurkan akses ke memuat sistem dan lengkap "buat grup dan isi" saya sejauh ini terlihat seperti:

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

Jadi, buat grup dengan set GID, undassword / aktifkan grup baru, tambahkan beberapa pengguna.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.