sudo -i 和 sudo -s 有什么区别?

use*_*473 8 command-line sudo

我是一个新的 Ubuntu 用户,发现有些人告诉我使用sudo -i获取 root 权限,而其他人告诉我使用sudo -s. 有什么不同?我使用哪一种以及何时使用?

dot*_*hen 11

sudo -i和之间的主要区别sudo -s是:

  • sudo -i为您提供根环境,即您的~/.bashrc被忽略。
  • sudo -s给你用户的环境,所以你~/.bashrc的受到尊重。

下面是一个例子,你可以看到,我有一个应用程序lsl在我的~/.bin/目录是通过访问sudo -s而与访问sudo -i。另请注意,Bash 提示会随 一起更改,sudo -i但不随sudo -s

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit
Run Code Online (Sandbox Code Playgroud)

虽然sudo -s方便给你熟悉的环境,但我推荐使用的sudo -i原因有两个:

  1. 您处于“root”会话中的视觉提醒。
  2. 根环境被恶意软件毒害的可能性要小得多,例如.bashrc.


小智 4

sudo -i\n
Run Code Online (Sandbox Code Playgroud)\n\n
\ni [命令]\n -i(模拟初始登录)选项运行由目标用户的密码数据库条目指定的 shell 作为登录 shell。这意味着 shell 将读取特定于登录名的资源文件,例如 .profile 或 .login。如果指定了命令,则会通过 shell 的 -c 选项将其传递到 shell 执行。如果未指定命令,则执行\n 交互式 shell。sudo 在运行 shell 之前尝试更改\n 该用户的主目录。安全策略应将环境初始化为最小的变量集,类似于用户登录时出现的情况。sudoers(5) 手册中的命令环境部分记录了 -i 选项的使用方式影响使用 sudoers 策略时\n运行命令的环境。\n
\n\n
sudo -s\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n -s [command]\n -s (shell) 选项运行 SHELL 环境变量指定的 shell(如果已设置)或密码数据库中指定的 shell。如果指定了命令,则会通过 shell 的 -c 选项\n 将其传递到 shell 执行。\n 如果未指定命令,则会执行交互式 shell。\n
\n