在森托斯 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 创建组,取消密码/激活新组,添加一些用户。