Linux suコマンド

sudo su

はじめに

Linuxのコマンドで意識せずにsuコマンドを実行していたため、細かい意味について理解したいと思い、suコマンドに関する内容をアウトプットしていきます。

suコマンド

suコマンドの際以下のようなコマンドをよく使ったことはないでしょうか?

sudo su -

ここを分解していきます。

sudo

まずsudoコマンドは管理者権限で実行した場合に、その瞬間だけ管理者権限としてコマンドを実行するのがsudoです。

管理者権限 = つまりrootユーザですね。

例えば以下のように管理者権限を使って何かしらのパッケージをインストールする際に使ったりしますね。

sudo dnf install <パッケージ名>

ちなみにsudoSuper 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になっていることがわかります。

この結果から、「-」を付けた場合と付けない場合の動きの違いは、以下の通りです。

注意
  • sudo su -: rootに切り替え後にホームディレクトリに移動する
  • sudo su: rootに切り替えた後に、rootに切り替える前に操作していたディレクトリの場所、つまりカレントディレクトリのままユーザを切り替える動きとなる
  • 最後に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

    -」を付けた場合と付けない場合で想定した挙動になっていることがわかりますね。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です