一行添加多个用户到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

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

bash  group 

Answers:


12

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

gpasswd -M userA,userB,userC mygroup

1
这应该是答案。
ivanleoncz

4
请记住,此解决方案将覆盖现有的组成员列表。这与“添加”用户不同usermod -aG mygroup
迈克尔

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

2

这是一个带有位置参数的基本脚本,将下面的代码保存在一个名为的文件中,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

2
验证组的另一种方法:if ! getent group "$group" >/dev/null
格伦·杰克曼

@glennjackman:谢谢,getent直到现在我都错过了命令(在我的系统中,对于所有检查的数据库来说,它还有一个很好的自动完成功能)。
朱塞佩·里库佩罗

太复杂了,我希望从命令行执行它。

@HordonFreeman:保存后的脚本作为oneliner执行fill_group.sh <group> <user1> ... <userN>。如果您真的想要一个单行纸:for user in "userA userB userC"; do sudo usermod -a -G "groupName" "${user}"; done或者如果您有一个用户,则在名为users.listgroup=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的答案。对于旧的Disto(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的组,取消密码设置/激活新组,添加一些用户。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.