当我将当前用户更改为管理员时
sudo su admin
我发现环境变量也发生了变化。我打算做的是将我的用户更改为 admin 并且 env not changed。
然后我找到了一个命令如下:
sudo bash -c "su - admin"
这个命令确实做了我想要的,但我bash -c
用谷歌搜索,不知道为什么这个命令可以为我做到这一点。谁能给我一个明确的解释?非常感谢。
当我将当前用户更改为管理员时
sudo su admin
我发现环境变量也发生了变化。我打算做的是将我的用户更改为 admin 并且 env not changed。
然后我找到了一个命令如下:
sudo bash -c "su - admin"
这个命令确实做了我想要的,但我bash -c
用谷歌搜索,不知道为什么这个命令可以为我做到这一点。谁能给我一个明确的解释?非常感谢。
首先,您应该阅读 sudo 手册页并在 /etc/sudoers 文件中设置这些选项,或者您可以交互地进行操作(参见下面的第二个)。
除非您设置配置选项,否则默认 sudoers 文件可能不会保留现有的 $USER 环境。您需要阅读 env_reset 因为根据您的操作系统分布,在大多数情况下 sudo 配置会有所不同。
我并不是要简洁,但我在移动设备上..
我不建议将 sudo su .. 用于任何事情。与公众共享 sudo su 的人都是新手,您只需 sudo 即可完成相同的清理工作。
在您的示例中,最高兴的是您正在启动原始用户(“非管理员”)拥有的子外壳。您正在使用 -c "string" 启动子外壳 sudo 具有外壳的 -c using -s 的等价物,它可以从传递给 -s 的 arg 或 passwd 文件中定义的外壳中读取外壳。
第二你应该使用:
$ sudo -u admin -E -s
清洁多了对吗?:)
-u sets the user, obviously
-s we just explained
-E preserves the orig user env
自己看看
$ echo $HOME # should show the original users /home/orig_user
$ env
您的原始环境被保留,没有任何 sudo su 丑陋。
如果您有兴趣在不保留环境的情况下模拟用户登录..
$ sudo -u user -i
或对于根:
可能需要 -E 取决于发行版 sudoers 文件
$ sudo -s
或者
$ sudo -i
-i simulates the login and uses the users env.
希望这会有所帮助,并且由于我在我的手机上,有人会友好地将其格式化为更具可读性。
带有 -c 参数的 bash 定义如下。
-c 字符串
如果存在 -c 选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从 $0 开始。
谢谢和问候,
阿洛克