当前位置: 首页>>技术教程>>正文


‘sudo su – ‘vs ‘sudo -i’ vs ‘sudo/bin/bash’ – 何时使用哪一个或者它有什么关系?

, , , ,

问题描述

当我正在做一些需要根连续输入数十次的内容时,我更喜欢将会话切换到根会话。在我在互联网上使用的各种教程和说明中,我看到sudo su,sudo su – ,sudo -i和sudo /bin /bash被用来打开根会话,但我不清楚它们之间的区别以及何时或如果差异很重要。

有人可以帮我解决这个问题吗?

最佳解决办法

为了解释这一点,你需要知道程序的功能:

su – 命令su用于切换到另一个用户(用户),但也可以通过不带参数调用该命令来切换到root用户。在输入切换到用户环境的密码后,su会询问您要切换的用户密码。

sudosudo旨在以root权限运行单个命令。但与su不同,它会提示您输入当前用户的密码。此用户必须位于sudoers文件(或sudoers文件中的组)中。默认情况下,Ubuntu “remembers”你的密码为15分钟,这样你就不必每次输入你的密码。

bash – 与计算机交互的text-interface。了解登录,non-login,交互式和non-interactive shell 之间的区别很重要:

  • 登录shell:登录shell以特定用户的身份登录系统,这是用户名和密码所必需的。当您点击ctrl + alt + F1登录到虚拟终端后,您将成功登录登录shell。

  • non-login shell 程序:在没有登录的情况下执行的 shell 程序,目前是logged-in用户。当你在gnome中打开一个图形终端时,它是一个non-login shell 。

  • 交互式shell:一个shell(登录或non-login),您可以在其中交互式输入或中断命令。例如一个gnome终端。

  • non-interactive shell:可能从自动进程运行的(子)shell。您将看不到输入或输出。

sudo su使用命令su调用sudo。 Bash被称为交互式non-login shell 。所以bash只执行.bashrc。你可以看到,切换到root后,你仍然在同一个目录中:

user@host:~$ sudo su
root@host:/home/user#

sudo su -这一次它是一个登录shell,因此/etc/profile.profile.bashrc被执行,您将会发现自己位于root的主目录下,并且拥有root的环境。

sudo -isudo su -几乎相同-i(模拟初始登录)选项将目标用户的密码数据库条目指定的shell作为登录shell运行。这意味着login-specific资源文件(如.profile.bashrc.login)将被shell读取和执行。

sudo /bin/bash这意味着您使用命令/bin/bash调用sudo/bin/bash作为non-login shell 启动,因此所有dot-files都不执行,但bash本身读取主叫用户的.bashrc。你的环境保持不变。你的家不会是根的家。所以你是根,但是在主叫用户的环境中。

sudo -s读取$SHELL变量并执行内容。如果$SHELL包含/bin/bash,则调用sudo /bin/bash(请参见上文)。

检查:检查您是否在登录shell中(仅在bash中工作,因为shopt是内置命令):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/246.html,未经允许,请勿转载。