su

su (switch user) は、一時的に他のユーザに変更する Linux/Unix コマンドである。ログアウトすると、元のユーザに戻る。

形式

su [options] [-] [user]

引数 user で指定したユーザに変更する。引数 user を指定しない場合は、スーパーユーザ(rootユーザ)に変更する。

オプション

su コマンドには、以下に示すオプションを指定することができる。

-
実際のログインに近い環境で、ログインシェルとして起動する。
-c command
-c オプションでシェルにコマンドを渡す。シェルはコマンドを実行して終了する。つまり、コマンドを実行して元のユーザに戻る。
$ su -c ls tsuka
Password:
com  download  src  temp
$
--command=command
-c オプションでシェルにコマンドを渡す。シェルはコマンドを実行して終了する。つまり、コマンドを実行して元のユーザに戻る。GNU 形式のオプションであり、POSIX 形式の -c オプションと機能は同じである。
-l
実際のログインに近い環境で、ログインシェルとして起動する。
--login
実際のログインに近い環境で、ログインシェルとして起動する。GNU 形式のオプションであり、POSIX 形式の -l オプションと機能は同じである。
-h
ヘルプテキストを表示して、コマンドを終了する。
--help
ヘルプテキストを表示して、コマンドを終了する。GNU 形式のオプションであり、POSIX 形式の -h オプションと機能は同じである。
-V
バージョン情報を表示して、コマンドを終了する。
--version
バージョン情報を表示して、コマンドを終了する。GNU 形式のオプションであり、POSIX 形式の -V オプションと機能は同じである。

シグナル

SIGINT, SIGQUIT, SIGTERM のいずれかを受信すると、su はその子を終了させ、その後、受信した信号で自分自身を終了させる。子プロセスは SIGTERM によって終了され、失敗して2秒後に SIGKILL によって終了される。

終了ステータス

su は通常、実行したコマンドの終了ステータスを返す。

$ su tsuka
Password:
$ exit 2
$ echo $?
2

コマンドがシグナルによって強制終了された場合、su はシグナルの番号に 128 を加えたものを返す。

su 自身は以下に示す終了ステータスを生成する。

1
要求されたコマンドを実行する前の一般的なエラー
$ su xxx
su: user xxx does not exist
$ echo $?
1
126
要求されたコマンドは実行できなかった
127
要求されたコマンドが見つかりませんでした
$ su -c xxx tsuka
Password:
bash: xxx: command not found
$ echo $?
127

ログアウト

su コマンドでユーザを変更した場合、ログアウトすると元のユーザに戻る。

bash の場合、以下に示すいずれかの方法でログアウトできる。

Linuxコマンド