一行添加多个用户到 UNIX 组

一行添加多个用户到 UNIX 组

森托斯 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

即使使用 for 循环也可以,但我不是 bash 专家,所以想知道。

答案1

如果gpasswd可用(应该在除 Solaris 之外的大多数发行版上),您可以提供逗号分隔的用户列表,后跟组名称:

gpasswd -M userA,userB,userC mygroup

答案2

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

答案3

这是一个带有位置参数的基本脚本,将下面的代码保存在名为 的文件中fill_group.sh,并使其可执行chmod +x fill_group.sh

然后将其添加到 PATH 目录 ( /usr/local/bin) 或在其所在的同一目录中执行它./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

答案4

关于Tombart和Masterfool的回答。对于旧版 distos (SLES 11 SP1),影子工具略有不同。这些手册没有提供版本号,但日期为 2009-2010 年。

gpasswd 中的 -M 选项不存在(但需要 gpasswd 来做其他事情)。所以需要选择 Masterfool 的循环选项。但这里 -a 不存在,相反 -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

因此,使用设置的 GID 创建组,取消密码/激活新组,添加一些用户。

相关内容