su の後に "-(ハイフン)" をつけた場合と付けない場合の違いは、 su コマンド実行前のユーザーアカウントの操作環境(使用する シェル の種類や 環境変数 、 ホームディレクトリ など)をそのまま "root" に引き継ぐか、それとも "root" に設定されている操作環境を用いるか、という違いがあります。
具体的には
su
だとホームディレクトリやPATHなどの環境変数が変更前のユーザーの設定のままだが
su -
だとrootのホームディレクトリになり、PATHなどの環境変数もrootのものが設定される。
▼具体例
・CentOSでifconfigコマンドが使えない
[root@localhost ~]# which ifconfig
/sbin/ifconfig
ifconfigとコマンドを打ってもコマンドが通らないのは一般ユーザーは/sbin/にデフォルトで
パスが通っていないため。
[guest@localhost ~]$ env | grep PATH
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin
下記のようにsuでは環境変数が一般ユーザーのものと同一なためifconfigのパスが通っていない
[guest@localhost ~]$ su
パスワード:
[root@localhost guest]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/guest/bin
[root@localhost guest]# ifconfig
bash: ifconfig: command not found
su -ならrootの環境変数がセットされるため、ifconfigのパスが通っている
[guest@localhost ~]$ su -
パスワード:
[root@localhost ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr **:**:**:**:**:**
inet addr:192.168.1.* Bcast:192.168.1.255 Mask:255.255.255.0