‘sudo su – ‘vs’sudo -i’vs’sudo / bin / bash’ – 什么时候使用它,或者它是否重要?

当我正在做一些需要root的东西连续输入几次时,我更喜欢将会话切换到root会话。 在我在互联网上使用的各种教程和说明中,我看到sudo susudo su -sudo -isudo /bin/bash用于打开根会话,但我不清楚它们之间的区别何时或如果这种差异很重要

有人可以为我清除这个吗?

要解释这一点,你需要知道程序的作用:

su – 命令su用于切换到另一个用户( s witch u ser),但您也可以通过调用不带参数的命令切换到root用户。 su要求您输入要切换的用户的密码,输入密码后切换到用户的环境。

sudosudo意味着以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 susu命令调用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'