‘sudo su – ‘vs’sudo -i’vs’sudo / bin / bash’ – 什么时候使用它,或者它是否重要?
当我正在做一些需要root的东西连续输入几次时,我更喜欢将会话切换到root会话。 在我在互联网上使用的各种教程和说明中,我看到sudo su
, sudo su -
, sudo -i
和sudo /bin/bash
用于打开根会话,但我不清楚它们之间的区别何时或如果这种差异很重要
有人可以为我清除这个吗?
要解释这一点,你需要知道程序的作用:
su
– 命令su
用于切换到另一个用户( s witch u ser),但您也可以通过调用不带参数的命令切换到root用户。 su
要求您输入要切换的用户的密码,输入密码后切换到用户的环境。
sudo
– sudo
意味着以root权限运行单个命令。 但与su
不同的是,它会提示您输入当前用户的密码。 此用户必须位于sudoers文件(或sudoers文件中的组)中。 默认情况下,Ubuntu会“记住”您的密码15分钟,这样您就不必每次都输入密码。
bash
– 与计算机交互的文本界面。 了解登录,非登录,交互式和非交互式shell之间的区别非常重要:
- login shell:登录shell以指定用户身份登录系统,这是用户名和密码所必需的。 当您点击ctrl + alt + F1登录虚拟终端后,您将成功登录登录shell。
- 非登录shell:在没有登录的情况下执行的shell,这是当前登录用户所必需的。 当你在gnome中打开一个图形终端时,它是一个非登录shell。
- 交互式shell:一种shell(登录或非登录),您可以在其中以交互方式键入或中断命令。 例如一个gnome终端。
- 非交互式shell:可能从自动进程运行的(子)shell。 您既不会看到输入也不会看到输出。
sudo su
用su
命令调用sudo
。 Bash称为交互式非登录shell。 所以bash只执行.bashrc
。 您可以看到切换到root后,您仍然在同一目录中:
user@host:~$ sudo su root@host:/home/user#
sudo su -
这次它是一个登录shell,所以执行/etc/profile
, .profile
和.bashrc
,你会发现自己在root用户环境的root目录下。
sudo -i
它与sudo su -
几乎相同sudo su -
-i(模拟初始登录)选项将目标用户的密码数据库条目指定的shell作为登录shell运行。 这意味着shell将读取和执行特定于登录的资源文件,如.profile
, .bashrc
或.login
。
sudo /bin/bash
这意味着你用命令/bin/bash
调用sudo
。 /bin/bash
作为非登录shell启动,因此所有的dot文件都不会执行,但是bash本身会读取调用用户的.bashrc
。 您的环境保持不变。 你的家不会是root的家。 所以你是root用户,但是在主叫用户的环境中。
sudo -s
读取$SHELL
变量并执行内容。 如果$SHELL
包含/bin/bash
则调用sudo /bin/bash
(参见上文)。
检查:检查您是否在登录shell中(仅在bash中工作,因为shopt
是内置命令):
shopt -q login_shell && echo 'Login shell' || echo 'No login shell'