su or su - ... what is the difference?
Archive - Originally posted on "The Horse's Mouth" - 2010-02-17 08:26:57 - Graham EllisIf 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?
With su 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
Password:
[root@easterton trainee]# ls
Your disc has been scrubbed clean!
[root@easterton trainee]#
[trainee@easterton ~]$ su -
Password:
[root@easterton ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@easterton ~]#
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.