I am a new Ubuntu user and find some people tell me to use sudo -i
to get root and others tell me to use sudo -s
. What is the difference? Which one do I use and when?
2 Answers
The major difference between sudo -i
and sudo -s
is:
sudo -i
gives you the root environment, i.e. your~/.bashrc
is ignored.sudo -s
gives you the user's environment, so your~/.bashrc
is respected.
Here is an example, you can see that I have an application lsl
in my ~/.bin/
directory which is accessible via sudo -s
but not accessible with sudo -i
. Note also that the Bash prompt changes as will with sudo -i
but not with 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
Though sudo -s
is convenient for giving you the environment that you are familiar with, I recommend the use of sudo -i
for two reasons:
- The visual reminder that you are in a 'root' session.
- The root environment is far less likely to be poisoned with malware, such as a rogue line in
.bashrc
.
-
Bash prompt does change with
sudo -s
unless you have placed something setting$PS1
in an unusual way in one of the initialization scripts. Tested on GNU bash, version 4.4.19(1) (Ubuntu 18.04 LTS) and Sudo version 1.8.21p2 Dec 9, 2018 at 17:12
sudo -i
-i [command] The -i (simulate initial login) option runs the shell speci‐ fied by the password database entry of the target user as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The security policy shall initialize the environment to a minimal set of variables, similar to what is present when a user logs in. The Command Environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.
sudo -s
-s [command] The -s (shell) option runs the shell specified by the SHELL environment variable if it is set or the shell as specified in the password database. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.
-
Additional info: you can also check the
man
pageman sudo
for more information.– v2rFeb 8, 2014 at 14:32