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?
The major difference between
sudo -i and
sudo -s is:
sudo -igives you the root environment, i.e. your
sudo -sgives you the user's environment, so your
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
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 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
-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.
-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.