เพิ่มผู้ใช้หลายคนในกลุ่ม 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ไม่
Michael


2

นี่เป็นสคริปต์ rudimental พร้อมพารามิเตอร์ตำแหน่งบันทึกรหัสด้านล่างในไฟล์ที่เรียกว่าfill_group.shและทำให้สามารถเรียกใช้งานchmod +x fill_group.shได้

แล้วเพิ่มไปยังไดเรกทอรี PATH ( /usr/local/bin) หรือรันมันใน dir ./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รับคำสั่งจนถึงตอนนี้ (ในระบบของฉันยังมีคุณสมบัติการเติมข้อความอัตโนมัติที่ดีสำหรับการตรวจสอบฐานข้อมูลทั้งหมด)
Giuseppe Ricupero

ซับซ้อนเกินไปฉันต้องการดำเนินการจากบรรทัดคำสั่ง

@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


0

เกี่ยวกับคำตอบของ Tombart และ Masterfool สำหรับ distos เก่า (SLES 11 SP1) เครื่องมือเงาแตกต่างกันเล็กน้อย คู่มือไม่มีหมายเลขรุ่น แต่ลงวันที่ 2009-2010

ตัวเลือก -M ใน gpasswd ไม่มีอยู่ (แต่ต้องการ gpasswd สำหรับอย่างอื่น) ดังนั้นต้องเลือกตัวเลือกการวนซ้ำโดย Masterfool แต่ที่นี่ -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

ดังนั้นสร้างกลุ่มด้วย set GID, ยกเลิกคำ / เปิดใช้งานกลุ่มใหม่, เพิ่มผู้ใช้บางคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.