当我使用
将当前用户更改为管理员时sudo su admin
我发现环境变量也发生了变化。我打算做的是将我的用户更改为admin,并且env未更改。
然后我找到了如下命令:
sudo bash -c "su - admin"
这个命令确实是我想要的,但是我用Google搜索了bash -c
,并且不知道为什么这个命令能为我做到这一点。谁能给我一个明确的解释?非常感谢。
答案 0 :(得分:1)
首先你应该阅读sudo联机帮助页并在/ etc / sudoers文件中设置这些选项,或者你可以以交互方式进行(见下面的第二篇)。
除非您设置配置选项,否则默认的sudoers文件可能无法保留现有的$ USER环境。您需要阅读env_reset,因为根据您的操作系统分布,sudo配置在大多数情况下会有所不同。
我不是故意要简洁,而是我在移动设备上..
我建议不要使用sudo su ..谁与公众分享sudo su是一个新手,你可以用sudo完成同样的清洁工。
以您的示例为例,您正在开始由原始用户(“非管理员”)拥有的子shell。你使用-c“字符串”启动子shell使用-s使用-s的shell的-c的equivelant,它从传递给-s的arg或passwd文件中定义的shell中读取shell。
第二,你应该使用:
$ 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 suggliness。
如果您对模拟用户登录感兴趣而不保留env ..
$ sudo -u user -i
或root:
可能需要-E取决于发行版sudoers文件
$ sudo -s
或
$ sudo -i
-i simulates the login and uses the users env.
希望这会有所帮助,并且有人会将其格式化为更具可读性,因为即时通讯在我的手机上。
答案 1 :(得分:0)
-c string
如果存在-c选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。
谢谢&问候,
阿洛克