sudo -s
它可能是重复的,我很确定我已经在某处看到了这个问题的答案,但我想知道和之间的权利和变量以及其他内容有什么区别sudo su -
。
就我而言,它们都打开一个 root shell,我可以在其中做任何我想做的事情,但我想知道有一天我是否会遇到一些差异。
还这个问题在askUbuntu上没有解决我的担忧。
答案1
须藤-s
读取$SHELL
变量并执行内容。如果$SHELL
包含/bin/bash
它调用sudo /bin/bash
.因此,/bin/bash
作为非登录 shell 启动,因此所有点文件都不会执行,但 bash 本身会读取.bashrc
调用用户的信息。您的环境保持不变。你的家不会是 root 的家。所以你是 root,但是处于调用用户的环境中。
须藤苏-
su -
被调用sudo
。与(带破折号)不同sudo su
,该 shell 被称为登录 shell,因此/etc/profile
、.profile
和.bashrc
被执行,您将发现自己处于 root 的主目录中,并具有 root 的环境。
资料来源:
答案2
在我看来,在“sudo”之后使用“su”都是一种矫枉过正。
您使用 su 时没有更改有效用户 ID,这是 su 的主要目的,因为这已经由 sudo 完成了。您使用 su 的默认行为在更改用户 ID 后执行 shell 作为主要目的,您可以通过直接从 sudo 执行 shell 来更好、更明确地实现这一点。如果调用用户已经是 root,则您指望 su 行为不会再次要求输入密码(否则您需要输入密码两次;一次用于 sudo,一次用于 su)。您可以通过传递 -l 选项或使用“-”前缀设置 argv[0] 来将 shell 作为登录 shell 执行。但是... sudo 默认情况下不会更改 $HOME 的值以匹配目标用户(除非 'set_home' 或 'always_set_home' 位于 /etc/sudoers 中);使用 -H 选项覆盖 -- $HOME 确定谁的配置文件脚本适用于 -l。 sudo 和 bash 都不会更改当前目录(除非 bash_profile 中的某些命令会执行此操作)。
因此,“sudo -H bash -l”几乎就像“sudo su -”一样,没有过度杀伤力,只是当前目录没有更改。
'sudo -s' 就像 'sudo su' 一样,但没有过度杀伤力。