Linux newgrp命令用法详解:切换用户的有效组
我們知道,每個用戶可以屬于一個初始組(用戶是這個組的初始用戶),也可以屬于多個附加組(用戶是這個組的附加用戶)。既然用戶可以屬于這么多用戶組,那么用戶在創建文件后,默認生效的組身份是哪個呢?
當然是初始用戶組的組身份生效,因為初始組是用戶一旦登陸就獲得的組身份。也就是說,用戶的有效組默認是初始組,因此所創建文件的屬組是用戶的初始組。那么,既然用戶屬于多個用戶組,能不能改變用戶的初始組呢?使用命令 newgrp 就可以。
newgrp 命令可以從用戶的附加組中選擇一個群組,作為用戶新的初始組。此命令的基本格式如下:
[root@localhost ~]# newgrp 組名
下面,我們通過一個實例,講解此命令的具體用法和功能:
[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd group2
[root@localhost ~]# groupadd 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
[root@localhost ~]# passwd user1
Changing password for user user1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
#切換至 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命令的底層實現
其實,newgrp 命令每一次切換用戶的初始組,該用戶都會以另外一個 shell(新進程,也可以說是子進程)登陸,只不過在新 shell 上登陸的該用戶,其初始組改變了而已。
以上實例中,通過添加 shell 內置命令 "echo $$" 就可以發現,每次使用 newgrp 命令,都會切換到一個新的進程。
在本節實例中,使用 newgrp 命令切換用戶初始組的整個過程,如圖 1 所示:
圖 1 newgrp 切換初始組程序運行過程圖
?
可以看到,每一次使用 newgrp 切換用戶的初始組,用戶都會切換到一個新的子 shell 中,如圖 1 中,user1 用戶的初始組從最初的 group1,切換成了 group2,再切換成 group3。
當然,如果你想回到原本的環境,需要通過 exit 命令不斷回退到當前進程的父進程,最終才能回到初始組為 group1 時的 user1 運行的 shell 中。
總結
以上是生活随笔為你收集整理的Linux newgrp命令用法详解:切换用户的有效组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么在mysql执行删除表中外键的语句
- 下一篇: Linux基础命令---删除用户user