newgrp 命令
newgrp 命令可以从用户的附加组中选择一个群组,作为用户新的初始组。
基本格式
[root@localhost ~]# newgrp 组名
具体用法和功能:
首先,建立 3 个用户组 group1、group2 和 group3,命令如下:
[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd group2
[root@localhost ~]# groupadd group3
示例
创建一个用户 user1,同时指定 user1 的初始组为 group1,附加组为 group2 和 group3,执行命令如下:
[root@localhost ~]# useradd -g group1 -G group2,group3 user1
#由于指定了初始组,因此不会在创建 user1 默认群组
[root@localhost ~]# more /etc/group | grep user1
group2:x:501:user1
group3:x:502:user1
对用户 user1 设置密码,执行命令如下:
[root@localhost ~]# passwd user1
Changing password for user user1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
切换至 user1 用户
通过 newgrp 切换用户组进行下列操作,读者可从中体会出 newgrp 命令的作用。
#切换至 user1 用户
[root@localhost ~]# su - user1
[root@localhost ~]# whoami
user1
#使用 newgrp 命令一边切换 user1 的初始组,一边创建文件
[root@localhost ~]# mkdir user1_doc
[root@localhost ~]# newgrp group2
[root@localhost ~]# mkdir user2_doc
[root@localhost ~]# newgrp group3
[root@localhost ~]# mkdir user3_doc
#查看各文件的详细信息
[root@localhost ~]# ll
total 12
drwxr-xr-x 2 user1 group1 4096 Oct 24 01:18 user1_doc
drwxr-xr-x 2 user1 group2 4096 Oct 24 01:18 user2_doc
drwxr-xr-x 2 user1 group3 4096 Oct 24 01:19 user3_doc
使用 newgrp 命令通过切换附加组成为新的初始组,从而让用户获得使用各个附加组的权限。
newgrp命令的底层实现
其实,newgrp 命令每一次切换用户的初始组,该用户都会以另外一个 shell(新进程,也可以说是子进程)登陆,只不过在新 shell 上登陆的该用户,其初始组改变了而已。
通过添加 shell 内置命令 "echo $$" 就可以发现,每次使用 newgrp 命令,都会切换到一个新的进程。