0

当我将当前用户更改为管理员时

sudo su admin

我发现环境变量也发生了变化。我打算做的是将我的用户更改为 admin 并且 env not changed

然后我找到了一个命令如下:

sudo bash -c "su - admin"

这个命令确实做了我想要的,但我bash -c用谷歌搜索,不知道为什么这个命令可以为我做到这一点。谁能给我一个明确的解释?非常感谢。

4

2 回答 2

1

首先,您应该阅读 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.

希望这会有所帮助,并且由于我在我的手机上,有人会友好地将其格式化为更具可读性。

于 2013-09-10T03:49:05.060 回答
0

带有 -c 参数的 bash 定义如下。

-c 字符串

如果存在 -c 选项,则从字符串中读取命令。如果字符串后面有参数,则将它们分配给位置参数,从 $0 开始。

谢谢和问候,
阿洛克

于 2013-09-10T05:11:32.500 回答