Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I am using ubuntu 10.04.

I notice that after I run "sudo -s" in terminal, the prompt changed from

"XXX@XXX"

to

"root@XXX",

seems it changed to root privilege.

But when I check the documentation of "sudo" command here, it explains another story of "sudo -s", can anyone explain to me what is "sudo -s" doing exactly?

share|improve this question

migrated from stackoverflow.com Jul 6 '11 at 7:37

This question came from our site for professional and enthusiast programmers.

5  
You should ask this over at askubuntu.com –  Ocaso Protal Jul 6 '11 at 7:26
4  
Why askubuntu.com? sudo is hardly Ubuntu-specific... –  Dave Sherohman Jul 6 '11 at 8:21
    
possible duplicate of Difference between comands "su -s" and "sudo -s" –  Linker3000 Jul 6 '11 at 8:26

6 Answers 6

From the manual:

sudo allows a permitted user to execute a command as the superuser or another user, as specified in the sudoers file.

-s Shell, runs the shell specified by the SHELL environment variable if it is set or the shell as specified in passwd(5).

More seriously, the sudo -s run a shell environment variable. Since you didn't add any variable it run as specified in passwd, and so connect you as root.

share|improve this answer
1  
It is not obvious from the manual that if you don't provide a user, it defaults to root. You would have to read the description for -u option to learn that. But for someone who is not familiar with sudo, they wouldn't know to look at -u. –  wisbucky Mar 18 at 23:20

sudo -s runs the shell specified in your $SHELL environment variable as the superuser/root. You can specify another user using -u.

The $SHELL environment variable contains the path to the user's default login shell. The actual setting for the default shell program is usually in etc/passwd. Depending on what you've done in your current session, the $SHELL variable may not contain the shell program you're currently using. If you login automatically with zsh for instance, but then invoke bash, $SHELL won't change from /bin/zsh.

Show the current user and shell program: echo $(whoami) is logged in and shell is $0

  • whoami prints out the username the user is working under.
  • $0 contains the name/path of the currently running program (shell program in this case).
share|improve this answer

sudo -s let you run a command for which you're pre-authorized [see /etc/sudoers], possibly by asking you to confirm your current ID.

share|improve this answer

Have a look at this post from superuser:

http://superuser.com/questions/29/difference-between-comands-su-s-and-sudo-s#42

By the way, your post should be moved to superuser (or askubuntu as said in comments)!

share|improve this answer

The two aren't really inconsistent - the sudo command always changes user, either to root, or to the user you specify with the -u switch. All the -s does is provide a shortcut for starting a shell as that user. It is really equivalent to:

sudo $SHELL

except that it will likely fallback to /bin/sh or something if SHELL is not set.

share|improve this answer

It sounds like it is creating another instance of the shell on top of the current shell, but with root privileges. I'll bet that after you do sudo -s if you type exit, you will go back to the original shell.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.