Linux 系统管理 : groupmod 命令详解

groupmod命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。

语法

groupmod(选项)(参数)

选项列表

选项(常用的已加粗)说明
-g, --gid GID

给群组指定一个新的GID,即修改组ID。(类似groupadd,-g可和-o选项一起使用,指定一个已存在的GID给目标组)

注意:1.将更新将该组作为主组的用户,且保留该组继续作为用户的主组。

   2.任何具有旧组ID且必须继续属于组的文件,都必须手动更改其组ID。

-n, --new-name NEW_GROUP指定要更改的组名
-o, --non-unique需和-g选项一起使用,允许为指定的组添加一个已存在的GID,即共享一个GID,使该GID不再具备唯一性。
-p, --password PASSWORD指定组密码
-R, --root CHROOT_DIR指定在CHROOT_DIR(改变后的根目录)下更改生效以及使用CHROOT_DIR目录下的配置文件。

退出值

EXIT VALUES 说明
0
执行成功
2 
命令语法错误
3
无效的选项参数
4
指定的组不存在
9
组名已被使用。
10
无法更新组文件 

文件

  • /etc/group:组账户文件。
  • /etc/gshadow:安全的组账户文件
  • /etc/login.defs:创建用户和组的定义文件
  • /etc/passwd:用户账户信息文件

 

参数

组名:指定要修改的工作的组名。

详解:
1、修改指定组的名以及ID
sudo groupmod --gid 2000 --new-name students test
修改组id为2000,组名为students
 
2、强制系统使用已经存在的组id
sudo groupmod -g 0 --non-unique students   // --non-unique == -o

 

使用-o和-g选项指定一个已存在的GID给目标组

1 [root@pople ~]# id anna && id test                                
 2 uid=1002(anna) gid=1002(anna) groups=1002(anna)
 3 uid=1003(test) gid=1003(test) groups=1003(test)
 4 [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc
 5 -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc
 6 -rw-r--r--. 1 test test 231 Oct 31 01:07 .bashrc
 7 [root@pople ~]# groupmod -o -g 1002 test              # 指定anna的GID给test,即共享一个GID
 8 [root@pople ~]# id anna && id test              
 9 uid=1002(anna) gid=1002(anna) groups=1002(anna)
10 uid=1003(test) gid=1002(anna) groups=1002(anna)               # 可以看到用户test的GID已修改
11 [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc
12 -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc
13 -rw-r--r--. 1 test 1003 231 Oct 31 01:07 .bashrc              # 之前的文件的GID不会被修改,需要手动去修改
14 [root@pople ~]# chown test:anna /home/test/.bashrc        # 手动更改.bashrc文件的属组
15 [root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc  
16 -rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc
17 -rw-r--r--. 1 test anna 231 Oct 31 01:07 .bashrc              # 已更正属组为anna

[root@pople ~]# chown test:test /home/test/.bashrc              # 更新文件属组为test,无报错,但文件的属组仍未改变???
[root@pople ~]# ls -la /home/anna/ /home/test/ |grep .bashrc
-rw-r--r--. 1 anna anna 231 Oct 31 01:07 .bashrc
-rw-r--r--. 1 test anna 231 Oct 31 01:07 .bashrc
[root@pople ~]# tail -2 /etc/group    # 两个组拥有同样的GID。
anna:x:1002:
test:x:1002:
[root@pople ~]# su - test
[test@pople ~]$ touch tt.txt
[test@pople ~]$ ll tt.txt 
-rw-r--r--. 1 test anna 0 Apr 9 17:34 tt.txt # 可以发现切换用户之后创建一个文件,此文件的属组是anna而不是test。
[root@pople ~]# groupmod -n new_name anna   # 修改anna的组名为:new_name
[root@pople ~]# tail -2 /etc/group && tail -2 /etc/gshadow
test:x:1002:
new_name:x:1002:  # 两个组文件的信息已修改,细心的朋友可以发现修改后的组信息排在最后一行,而test排在前面。
test:!::
new_name:!::
[root@pople ~]# ls -la /home/anna/ /home/test/                  
/home/anna/:
total 16
drwx------. 2 anna test 83 Apr  4  22:47 .  # 可以看到用户anna的当前属组权限已全部自动更改为test
drwxr-xr-x. 5 root root 41 Apr  9  16:57 ..
-rw-------. 1 anna test  9 Apr  4  22:47 .bash_history
-rw-r--r--. 1 anna test 18 Oct  31 01:07 .bash_logout
-rw-r--r--. 1 anna test 193 Oct 31 01:07 .bash_profile
-rw-r--r--. 1 anna test 231 Oct 31 01:07 .bashrc

/home/test/:
total 12
drwx------. 2 test 1003  76 Apr  9 17:34 .
drwxr-xr-x. 5 root root  41 Apr  9 16:57 ..
-rw-r--r--. 1 test 1003  18 Oct 31 01:07 .bash_logout
-rw-r--r--. 1 test 1003 193 Oct 31 01:07 .bash_profile
-rw-r--r--. 1 test test 231 Oct 31 01:07 .bashrc  # 用户test的属组权限也自动由anna更换为test了。说明对于共享同一个GID的两个用户,文件的属组名取决于组文件里排在前面的那个组,也就是组test。
-rw-r--r--. 1 test test   0 Apr  9 17:34 tt.txt

[root@pople ~]#

总结:

  • 如果两个用户共享一个GID为主组,应该先检查任何具有旧组ID且必须继续属于组的文件,都必须手动更改其组ID,否则有可能会导致组ID不一致。
  • 如果两个用户共享一个GID为主组,那么新建的文件的属组名称都会优先选择组文件(/etc/group、/etc/gshadow)里排在前面的那个组
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HarkerYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值