Tecmintは2018年2月5日(米国時間)、「Learn Difference Between "su" and "su -" Commands in Linux」において、「su」コマンドと「su -」コマンドの違いを説明した。

suではカレントディレクトリも環境変数も元のユーザーのものが引き継がれ、su -ではカレントディレクトリや環境変数は変更したユーザーの初期値に設定されるとしている。su -はsu -lでも同じ動作をする。

suコマンドは指定したユーザーに変更するコマンド。ユーザーを引数に指定しなかった場合、rootユーザーへの変更として処理される。Linuxでは管理者権限が必要な場合、sudoコマンドを使って処理を行うか、suコマンドを使ってrootユーザーになってから処理を行うことが多い。

  • suでrootに変更。カレントディレクトリが引き継がれているほか、環境変数ももとのユーザのものが引き継がれている

    suでrootに変更。カレントディレクトリが引き継がれているほか、環境変数も元のユーザーのものが引き継がれている

  • su -lでrootに変更。カレントディレクトリがrootのホームディレクトリになっているほか、環境変数もrootの初期の環境変数に変更されている

    su -lでrootに変更。カレントディレクトリがrootのホームディレクトリになっているほか、環境変数もrootの初期の環境変数に変更されている

suでrootユーザーになった場合、変更前のユーザーの環境変数などがrootユーザーでの操作に悪影響を与えることがある。このため、rootとして作業する場合は、su -のように-を指定してsuを使うように説明されることがある。