Thêm nhiều người dùng vào nhóm UNIX trong một dòng


13

Trên linux Centos 6.5 (và có thể là bất kỳ), tôi có thể tạo một nhóm:

sudo groupadd mygroup

và thêm một vài người dùng vào nó:

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

Số lượng người dùng trong trường hợp cụ thể của tôi là 20. Làm thế nào tôi có thể sử dụng một lớp lót như:

sudo usermod -a -G mygroup userA userB userC

Ngay cả sử dụng cho vòng lặp sẽ tốt, nhưng tôi không phải là một chuyên gia bash, vì vậy tự hỏi.

bash  group 

Câu trả lời:


12

Nếu gpasswdcó sẵn (nên có trên hầu hết các bản phân phối, ngoại trừ Solaris), bạn có thể cung cấp danh sách người dùng được phân tách bằng dấu phẩy, theo sau là tên nhóm:

gpasswd -M userA,userB,userC mygroup

1
Điều này nên là câu trả lời.
ivanleoncz

4
Hãy nhớ rằng giải pháp này ghi đè lên danh sách thành viên nhóm hiện có. Đây là một điều khác với "thêm" người dùng thích usermod -aG mygroup.
Michael

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

2

Đây là một tập lệnh thô sơ với các tham số vị trí, lưu mã bên dưới trong một tệp được gọi fill_group.shvà làm cho nó có thể thực thi được chmod +x fill_group.sh.

Sau đó thêm nó vào thư mục PATH ( /usr/local/bin) hoặc thực thi nó trong cùng một thư mục nơi nó nằm cùng ./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
Một cách khác để xác nhận nhóm:if ! getent group "$group" >/dev/null
glenn jackman

@glennjackman: cảm ơn bạn, tôi đã bỏ lỡ getentlệnh cho đến bây giờ (trong hệ thống của tôi cũng có một tính năng tự động hoàn thành tốt đẹp cho tất cả các cơ sở dữ liệu được kiểm tra).
Giuseppe Ricupero

Quá phức tạp, tôi muốn thực hiện nó từ dòng lệnh.

@HordonFreeman: tập lệnh khi được lưu được thực thi dưới dạng oneliner : fill_group.sh <group> <user1> ... <userN>. Nếu bạn muốn thực sự là một oneliner: for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; donehoặc nếu bạn có một danh sách người dùng trên mỗi dòng trong một tập tin gọi là users.list:group=mygroup && while read user; do sudo usermod -a -G "${group}" "${user}"; done < users.list
Giuseppe Ricupero

1

Trên Fedora, Red Hat, CentOS và các bản phân phối xuôi dòng khác, newuserstiện ích cho phép bạn rất dễ dàng thêm một loạt người dùng mới vào hệ thống mà không phải viết tập lệnh Bash.

Cũng có thể có sẵn trên Debian và Ubuntu.


0

Về câu trả lời của Tombart và Masterfool. Đối với các bản phân phối cũ (SLES 11 SP1), các công cụ tạo bóng hơi khác nhau. Các hướng dẫn không cung cấp số phiên bản, nhưng là ngày 2009-2010.

Tùy chọn -M trong gpasswd không tồn tại, (nhưng cần gpasswd cho thứ khác). Vì vậy, cần phải đi cho tùy chọn vòng lặp bằng Masterfool. Nhưng ở đây -a không tồn tại, thay vào đó -A hành xử như -a & -G.

Tôi đang làm điều này để triển khai quyền truy cập vào các hệ thống tải và "tạo nhóm và điền" hoàn chỉnh của tôi cho đến nay trông giống như:

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

Vì vậy, hãy tạo nhóm với GID, bỏ mật khẩu / kích hoạt nhóm mới, thêm một số người dùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.