挺湊巧的,最近老有同事問起這些問題,所以總結一下。
1. 首先用help理解su, sudo su, sudo
2. 其次理解"login shell" and "interactive shell".
"When Bash starts executes the commands in a variety of different scripts.
(1) When started as an interactive login shell: Bash reads and executes the /etc/profile (if it exists). After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile in that order, and reads and executes the first one (that exists and is readable). When a login shell exits: Bash reads and executes ~/.bash_logout (if it exists).
(2) When started as an interactive shell (but not a login shell): Bash reads and executes ~/.bashrc (if it exists)."
顯然login shell和interactive shell在環境的設置上是存在差別的,詳細可以參考: http://groups.google.com/group/linux.debian.user/browse_thread/thread/2b71ecfc45789958/7bff24e3bae74b36?lnk=raot
3. 然后su命令的橫杠就非常容易理解了,參數橫杠-, 是為了讓切換獲取的shell是一個login shell
-, -l, --login make the shell a login shell