I'm quite new to Linux terminal and I'm not quite sure what the difference between su with a hyphen and su without a hyphen is, for example: su - username vs. su username.

I looked into the documentation but in there, this was not mentioned. Could someone please help me out?

  • a "login shell" often means interactive shell. This is vs. a shell that just executes a script and exits.
    – Shahbaz
    Jul 26, 2012 at 16:41
  • 7
    It's right there in the same manpage you link to: "-, -l, --login: make the shell a login shell" Jul 26, 2012 at 16:43
  • 1
    you don't even have to google it, just type su --help. Jul 26, 2012 at 16:51
  • 1
    Of noteworthyness: This is particularly useful when su-ing to root as without using the hypen to start a new login shell, your $PATH won't get updated and thus you won't be able to directly call root-only binaries in /sbin and /usr/sbin
    – Garrett
    Jul 26, 2012 at 16:55

2 Answers 2


The difference between "-" and "no hyphen" is that the latter keeps your existing environment (variables, etc); the former creates a new environment (with the settings of the actual user, not your own).


The hyphen has two effects:

1) switches from the current directory to the home directory of the new user (e.g., to /root in the case of the root user) by logging in as that user

2) changes the environmental variables to those of the new user as dictated by their ~/.bashrc. That is, if the first argument to su is a hyphen, the current directory and environment will be changed to what would be expected if the new user had actually logged on to a new session (rather than just taking over an existing session).

  • this site -> admon.org/difference-between-login-shell-and-non-login-shell says that when used without the hyphen the files /etc/profile and ~/.bash_profile are not executed. What significance do these two files have on the user environment ?
    – user574183
    Jul 26, 2012 at 17:02
  • 5
    Those two things are the files that set the user environment :) Not executing them means keeping your original environment. Executing them (by using "-") means making your environment the same as the user you're "su'ing" to. Using the hyphen is usually what you want - I use "-" habitually whenever I "su".
    – paulsm4
    Jul 26, 2012 at 18:40
  • does the order of execution really matter ? Iam asking this because on that site they have mentioned that the two files /etc/bashrc ~/.bashrc are executed in reverse order when in a non login shell. Somebody please help me
    – user574183
    Jul 28, 2012 at 18:03
  • 3
    @user574183 of course, e.g. if one set something but the other unset something or set to something else
    – fikr4n
    Jul 4, 2015 at 3:56

Year 2022 update:

It is discouraged shorthand for --login.

See: https://man.archlinux.org/man/su.1#DESCRIPTION

It is recommended to always use the --login option (instead of its shortcut -) to avoid side effects caused by mixing environments.

And https://wiki.archlinux.org/title/Su :

You will sometimes encounter su being used to get a login shell with su -, rather than su -l/su --login. This shorthand is discouraged because the - option can encounter parsing limitations.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.