su or su - ... what is the difference?
If you're wanting to do admin work on a Unix or Linux system, you'll probably need to be logged in as the administrator. However, you're likely to find that you're not allowed to log in as root directly, and that you have to use the su
command. Strictly speaking, "su" stands for "Substitute User" and you can give a user name as a parameter, but the default is to take you to root once you have given the root password.
One of the things that puzzles newcomers is the two flavors of su - "su
" and "su -
". What is the difference?
on its own, you retain the environment of the user that you're transferring from - so the current directory remains the same as does the path to executable files
With su -
, you are given a new root environment - you are taken to root's home directory, and you are given a new environment so that the path to executable files changes to that which has been set up for root
A Rule for newcomers
... ALWAYS use su
WITH the minus. You might find it irritating that it takes you to root's home directory from the directory you want to work in BUT it also (a) ensures that you have all the administrator's commands available in your path and (b) it provides you with a path which is likely to be safer than a user's path - and that's especially the case if a user has called you over and asked you to fix something for him.
Compare these two examples:
[trainee@easterton ~]$ su
[root@easterton trainee]# ls
Your disc has been scrubbed clean!
[trainee@easterton ~]$ su -
[root@easterton ~]# ls
anaconda-ks.cfg install.log install.log.syslog
In this example, our user has added the current directory - that's "." - onto the start of his path and has an executable file called ls
in that directory. Fortunately that was just for a demonstration - the new ls
command just echoed a rather worrisome message.
We cover this subject (and others) on our Introduction to Linux Admin
course which is also available as part of our Deploying LAMP training course
(written 2010-02-17, updated 2010-03-03)
Associated topics are indexed underA161 - Web Application Deployment - Users and Groups 
Linux Web Server - User Roles, User Accounts, and shared administration - (2013-03-16) 
Root is root for a reason! - (2009-11-03) 
Mistaken identity? - (2009-07-22) 
Always use su with minus. And where do programs come from? - (2009-05-27) 
Choosing a railway station fairly in PHP - (2009-04-04) 
Ask the Tutor - Open Source forum - (2009-03-25) 
Ruby, Perl, Linux, MySQL - some training notes - (2008-11-23) 
sstrwxrwxrwx - Unix and Linux file permissions - (2008-11-23) 
The Longest Possible Day - (2008-08-26) 
Looking for files with certain characteristics (Linux / Unix) - (2008-05-22) 
User and Group settings for Apache httpd web server - (2008-04-22) 
Setting up a new user - Linux or Unix - (2008-03-26) 
Supporting users on Linux and Unix - (2006-04-13) 
File permissions of Linux and Unix systems - (2005-08-31) 
Functions and commands with dangerous names - (2005-08-11)
Some other Articles
Relating tables with joins in MySQLWhat does a web application look like under Tomcat?Object Oriented Programming in PHPHow is your tax pound spent?su or su - ... what is the difference?Finding what has changed - Linux / UnixCourses - Melksham and elsewhere - until the end of AprilLinux - useful tips including history and file name completionA PHP example that lets your users edit content without HTML knowledgeLondon to and from Melksham by public transport