补充说明
newgrp 用于临时切换当前会话的主组(primary group),它会启动一个新的 shell,并把该 shell 的 GID 设为指定组。退出新 shell 后回到原来的环境。
不指定组时,newgrp 使用 /etc/passwd 中为该用户记录的主组。使用 - 参数会像登录 shell 一样重新初始化环境。切换后新创建的文件将属于新的组,这对共享目录协作很有用。
如果用户不是目标组的成员,系统会要求输入组密码(保存在 /etc/gshadow)。出于安全考虑,现代发行版通常不建议设置组密码,而是直接把用户加入附加组(usermod -aG),再用 newgrp 激活。
语法
newgrp [-] [组] [[-c] 命令]
选项
-:以登录 shell 方式启动,重置环境-c 命令:在新组身份下执行命令后退出(util-linux 版本支持)
实例
# 切换到 developers 组,进入新的 shell
newgrp developers
# 以登录 shell 方式切换
newgrp - developers
# 临时以新组身份执行命令
newgrp developers -c "touch shared/newfile && ls -l shared/newfile"
# 查看当前主组与附加组
id
newgrp developers -c id
# 退出新 shell 回到原环境
exit
注意事项
- newgrp 启动的是子 shell,未导出的 shell 变量不会保留。
- 只有组成员或知道组密码的人才能切换。
- 需要长期生效请修改用户的主组或用
sg/newgrp临时激活附加组。