06. Changing Identities su, sudo, -l, -c

Sometimes we need to take on someone else's identity to carry out a specific task.

Let's begin by looking at su, which is used to assume the identity of another user. Then we'll discuss sudo, which is used to execute a single authorized command.

Using su

The su command (aka switch user), allows you to switch to any user account, as long as you know the password.

For example, to switch to the user bob, simply pass bob as the argument to su.

$ su bob

Don't worry if the password isn't showing any characters as you type - the shell is still reading what you type into the buffer.

Loading the user's environment with -l

If you'd like to load the user's entire environment, you can do so with the -l option.

$ su -l bob
# Environment gets loaded
# Working directory is bob's home directory

To switch to the superuser, simply use a single hyphen -.

$ su - 

Actually, the -l option is interchangable with using -. Keep in mind that with no argument after the hyphen, the shell assumes the superuser.

Executing a single command as another user

In case you just want to execute a single command as the user, use the -c option.

$ su bob -c 'dougie'

This code will execute the command dougie under the user bob. Make sure to enclose your command in single quotes to prevent expansion!

To exit and return to your account, use the exit command.

$ exit

Using sudo

The sudo command allows a permitted user to execute a command that he or she is entitled to.

The list of who can perform what is kept in a file called /etc/sudoers, and is maintained only by the root adminstrator.

The administrator is able to use this file to allow access to different users in a controlled way. With this, users may be restricted to one or more specific commands and no others.

Unlike su, sudo does not start a new session or load any environmental configurations, and when using sudo, the user enters his own password - not the superusers's.

To use sudo, simply pass in the command after the sudo.

$ sudo vim /etc/hosts
# Now you can edit this secure file

Simple shortcut for using sudo

Many times you'll input a command that the shell will complain that you don't have sudo permissions. Instead of typing the command again, you can simply call sudo !! to run the same command with sudo permissions.

So what's the main difference? su vs. sudo

su switches you to the root user account (or another user's) and requries a specific password. sudo, on the other hand, runs a single command with root priveleges and does not require a root user password.


The /etc/sudoers file defines who can perform what commands with sudo. To access this file, use the visudo command.

# Defines users
User_Alias ADMINS = user1, user2
# Users with ADMINS alias can use sudo to execute commands as root
# First ALL = any host, Second ALL = any command
# superuser may also use sudo to run any command on any host. 
# (ALL) means superuse may also run commands as any other user.
root   ALL = (ALL) ALL

Take your Linux skills to the next level!

Command Line Kung Fu

Take your Linux skills to the next level! Try Linux & UNIX

Command Line Kung Fu is packed with dozens of tips and practical real-world examples. You won't find theoretical examples in this book. The examples demonstrate how to solve actual problems. The tactics are easy to find, too. Each chapter covers a specific topic and groups related tips and examples together.

$ Check price
14.9914.99Amazon 4.5 logo(27+ reviews)

More Linux & UNIX resources

Aching back from coding all day?

Acupressure Mat & Pillow

Aching back from coding all day? Try Back Problems

Relieve your stress, back, neck and sciatic pain through 1,782 acupuncture points for immediate neck pain relief. Made for lower, upper and mid chronic back pain treatment, and improves circulation, sleep, digestion and quality of life.

$$ Check price
144.87144.87Amazon 4.5 logo(1,890+ reviews)

More Back Problems resources