当我执行需要连续多次键入root的操作时,我希望将会话切换为root会话。在各种教程和说明我已经使用了互联网上,我看到了sudo su
,sudo su -
,sudo -i
和sudo /bin/bash
用来打开一个root会话,但我不会在这些当之间,或者说差异事项的区别清楚。
有人可以帮我清理一下吗?
当我执行需要连续多次键入root的操作时,我希望将会话切换为root会话。在各种教程和说明我已经使用了互联网上,我看到了sudo su
,sudo su -
,sudo -i
和sudo /bin/bash
用来打开一个root会话,但我不会在这些当之间,或者说差异事项的区别清楚。
有人可以帮我清理一下吗?
Answers:
要对此进行解释,您需要知道程序的作用:
su
-该命令su
用于切换到另一用户(小号女巫Ú SER),但也可以通过调用无参数的命令切换到根用户。su
在键入您切换到用户环境的密码后,要求您输入要切换的用户密码。 sudo
- sudo
用于以root权限运行单个命令。但是与su
它不同的是,它提示您输入当前用户的密码。该用户必须位于sudoers文件中(或sudoers文件中的组中)。默认情况下,Ubuntu会“记住”您的密码15分钟,这样您就不必每次都键入密码。bash
-与计算机交互的文本界面。了解登录,非登录,交互式和非交互式外壳之间的区别很重要:外壳类型:
因此,情况是:
sudo su
sudo
用命令调用su
。Bash被称为交互式非登录外壳。因此,bash仅执行.bashrc
。您可以看到切换到root之后,您仍然在同一目录中:
user@host:~$ sudo su
root@host:/home/user#
sudo su -
这一次,它是一个登录shell,所以/etc/profile
,.profile
和.bashrc
被执行,你会发现自己在根目录的主目录的根环境。
sudo -i
它几乎与sudo su -
-i(模拟初始登录)选项运行目标用户的密码数据库条目指定的shell作为登录shell。这意味着登录特定资源文件等.profile
,.bashrc
或.login
将被读取并通过shell中执行。
sudo /bin/bash
这意味着您可以sudo
使用命令进行调用/bin/bash
。/bin/bash
作为非登录外壳程序启动,因此不会执行所有的点文件,但bash本身会读取.bashrc
调用用户。您的环境保持不变。您的家将不是根的家。因此,您是root用户,但在调用用户的环境中。
sudo -s
读取$SHELL
变量并执行内容。如果$SHELL
包含,/bin/bash
它将调用sudo /bin/bash
(请参见上文)。
校验:
要检查您是否在登录shell中(由于shopt
是内置命令,因此只能在bash 中使用):
shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
sudo
允许允许的用户以超级用户或另一个用户的身份执行命令。无论如何,请+1。
root
用户会话(相对于using sudo
)的最常见用法是在执行需要大量使用root
特权的操作时,例如在安装新内容或执行重大重新配置时。我一直在使用sudo /bin/bash
,但是由于某种我不了解的原因,显然该方法的说唱效果不好。
sudo -i
建议。在这里阅读:ubuntuforums.org/showthread.php?t=1817402,在这里:unix.stackexchange.com/questions/98531/…–
为了寻找差异,您可以在不同的调用之间调整结果环境。
您可以在一些关键变量中找到一些“小”差异:
PATH
,LD_LIBRARY_PATH
,LD_PRELOAD
或〜/中的一些差异。点文件处理(~/.config
)。
还请考虑命令生成的基于$ HOME的日志文件(~/.xsession.errors
,等等...)或xauth cookie(~/.Xauthority
)的所有权。
尝试以下命令:
# 'su -' vs 'su'
diff <(sudo su - -c env | sort) <(sudo su -c env | sort)
# 'su -' vs 'sudo -i'
diff <(sudo su - -c env | sort) <(sudo -i env | sort)
sudo -s
及sudo su
。