Pau*_*aul 308 command-line bash sudo su
当我做一些需要连续输入几十次 root 的事情时,我更喜欢将我的会话切换到 root 会话。在各种教程和说明我已经使用了互联网上,我看到了sudo su,sudo su -,sudo -i和sudo /bin/bash用来打开一个root会话,但我不会在这些当之间,或者说差异事项的区别清楚。
有人可以帮我解决这个问题吗?
cha*_*aos 414
要解释这一点,您需要知道程序的作用:
su-该命令su被用来切换到另一用户(小号女巫Ú SER),但也可以通过调用无参数的命令切换到根用户。su在输入您切换到用户环境的密码后,要求您输入要切换的用户的密码。 sudo-sudo意味着使用 root 权限运行单个命令。但与su它不同的是它会提示您输入当前用户的密码。此用户必须在 sudoers 文件中(或在 sudoers 文件中的组)。默认情况下,Ubuntu 会“记住”您的密码 15 分钟,这样您就不必每次都输入密码。bash- 与计算机交互的文本界面。了解登录、非登录、交互式和非交互式 shell 之间的区别很重要:贝壳种类:
所以案例是:
sudo susudo使用命令调用su。Bash 被称为交互式非登录 shell。所以 bash 只执行.bashrc. 可以看到切换到root后你还在同一个目录下:
user@host:~$ sudo su
root@host:/home/user#
Run Code Online (Sandbox Code Playgroud)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以非登录 shell 启动,因此不会执行所有点文件,但 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'
Run Code Online (Sandbox Code Playgroud)
小智 7
要查找差异,您可以检查不同调用之间的结果环境。
您可能会在一些关键变量中发现一些“小”差异:
PATH, LD_LIBRARY_PATH,LD_PRELOAD或者 ~/. 点文件处理 ( ~/.config)。
~/.xsession.errors还要考虑命令生成的基于 $HOME 的日志文件(等)或 xauth cookies( )的所有权~/.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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
456791 次 |
| 最近记录: |