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

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

我是 Ubuntu 的新用户,有人告诉我使用sudo -i获取 root 权限,有人告诉我使用sudo -s。两者有何区别?我该何时使用哪一个?

答案1

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

虽然sudo -s可以方便地为您提供熟悉的环境,我建议使用sudo -i原因有二:

  1. 视觉提醒您处于“根”会话中。
  2. 根环境不太可能受到恶意软件(例如 中的恶意线路)的攻击.bashrc

答案2

sudo -i
-i [命令]
                 -i(模拟初始登录)选项运行 shell 指定的
                 由目标用户的密码数据库条目确定为
                 登录 shell。这意味着登录特定的资源文件
                 shell 将读取诸如 .profile 或 .login 之类的文件。如果
                 指定命令后,将其传递给 shell 执行
                 通过 shell 的 -c 选项。如果没有指定命令,则
                 执行交互式 shell。sudo 尝试更改为
                 在运行 shell 之前,该用户的主目录。
                 安全策略应将环境初始化为最小
                 一组变量,类似于用户登录时出现的变量
                 sudoers(5) 手册中的命令环境部分
                 记录 -i 选项如何影响环境
                 当使用 sudoers 策略时运行命令。
sudo -s
-s [命令]
                 -s(shell)选项运行 SHELL 指定的 shell
                 环境变量(如果已设置)或指定的 shell
                 在密码数据库中。如果指定了命令,则
                 通过 shell 的 -c 选项传递给 shell 执行。
                 如果没有指定命令,则执行交互式 shell。

相关内容