はじめに
Linuxのコマンドで意識せずにsu
コマンドを実行していたため、細かい意味について理解したいと思い、su
コマンドに関する内容をアウトプットしていきます。
suコマンド
su
コマンドの際以下のようなコマンドをよく使ったことはないでしょうか?
sudo su -
ここを分解していきます。
sudo
まずsudo
コマンドは管理者権限で実行した場合に、その瞬間だけ管理者権限としてコマンドを実行するのがsudo
です。
管理者権限 = つまりroot
ユーザですね。
例えば以下のように管理者権限を使って何かしらのパッケージをインストールする際に使ったりしますね。
sudo dnf install <パッケージ名>
ちなみにsudo
はSuper User DO
, Substitute User DO
(他のユーザに成り代わって実行する), Swhitch User DO
の略であると、色々と解釈があるようです。
su
次にsu
コマンドですが、こちらはユーザを切り替えるコマンドとなります。
su
の後に切り替えたいユーザ名を指定することで、ユーザを切り替えることができます。
su <切り替えるユーザ名>
切り替えるユーザ名を指定しない場合、暗黙的ににroot
ユーザに切り替わります。
「-
」をつけるとどう動きが変わるのかを確認してみましょう。
EC2のAmazonLinux2023にセッションマネージャで接続した場合例となります。
sh-5.2$ pwd
/home/ssm-user
sh-5.2$ sudo su -
Last login: Mon Apr 14 21:21:29 UTC 2025 on pts/1
[root@ip-10-100-0-92 ~]# pwd
/root
ssm-user
ディレクトリにいる状態からsudo su -
を実行しroot
ユーザへ切り替え、ディレクトリの位置を確認してみると/root
に移動しています。
では「-
」を付けない状態でroot
ユーザにスイッチしてみましょう。
sh-5.2$ pwd
/home/ssm-user
sh-5.2$ sudo su
[root@ip-10-100-0-92 ssm-user]# pwd
/home/ssm-user
root
ユーザに切り替わった後のディレクトリの位置が変わってますね。
もう一つ試してみましょう。
var/log
に移動してsudo su
を実行するとどうなるでしょうか。
sh-5.2$ pwd
/home/ssm-user
sh-5.2$ cd /var/log
sh-5.2$ pwd
/var/log
sh-5.2$ sudo su
[root@ip-10-100-0-92 ssm-user]# pwd
/var/log
root
ユーザに切り替わった後にディレクトリの位置がvar/log
になっていることがわかります。
この結果から、「-
」を付けた場合と付けない場合の動きの違いは、以下の通りです。
最後にroot
ではなく、別のユーザへの切り替えの動作確認をしてみます。
適当にユーザを作ります。
sh-5.2$ sudo useradd testuser
ユーザを切り替えます。
sh-5.2$ sudo su testuser
# /var/logディレクトリでユーザ切り替えをした結果、ディレクトリはそのまま引き継がれる
[testuser@ip-10-100-0-92 log]
[testuser@ip-10-100-0-92 log]$ exit
exit
# 「-」をつけてユーザをswitch
sh-5.2$ sudo su - testuser
Last login: Mon Apr 14 21:47:44 UTC 2025 on pts/1
# 「-」付きでユーザ切り替えをすると、ホームディレクトリに移動する
[testuser@ip-10-100-0-92 ~]$ pwd
/home/testuser
「-
」を付けた場合と付けない場合で想定した挙動になっていることがわかりますね。