su と su - の違い

後輩に訊かれたついでに、メモしておく。

タイトルの事を訊かれ、「manを見るか、ググれ」と言ったものの、

CentOS の man は分かりにくかった(´・ω・`)すまん

でも、Ubuntu の man は分かりやすい。

su はログインセッション中に別のユーザになるために用いる。
ユーザ名を指定せずに起動した場合、デフォルトではスーパーユーザの ID に変更する。
オプション引数 - を用いると、直接ログインした場合と同じ環境に初期化される。

つまり、次のようになる。

  • su

環境設定を引き継いだままrootになる。

  • su -

rootの環境設定に切り替えてrootになる。


また、rootにしかパスが通っていないコマンドが扱えるようになる。


Ubuntu の man が分かりやすかったので、Ubuntu の環境での例。

hoge@srv:~$ sudo su -
root@srv:~# 
 ↑
 ホームディレクトリに移動する
hoge@srv:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

一方、「 - 」を入力しない場合・・・

hoge@srv:~$ sudo su
root@srv:/home/hoge#
 ↑
 ホームディレクトリに移動しない
root@srv:/home/hoge# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games