su
su (switch user) は、一時的に他のユーザに変更する Linux/Unix コマンドである。ログアウトすると、元のユーザに戻る。
形式
su [options] [-] [user]
引数 user で指定したユーザに変更する。引数 user を指定しない場合は、スーパーユーザ(rootユーザ)に変更する。
オプション
su コマンドには、以下に示すオプションを指定することができる。
- -
- 実際のログインに近い環境で、ログインシェルとして起動する。
- TERM と --whitelist-environment で指定された変数以外のすべての環境変数をクリアする。
- 環境変数 HOME、SHELL、USER、LOGNAME、PATH を初期化する。
- ターゲットユーザーのホームディレクトリを変更する
- シェルの
argv[0]
に '-' を設定し、ログインシェルにする。
- -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 の場合、以下に示すいずれかの方法でログアウトできる。
exit
コマンド
logout
コマンド
^D (Ctrl + D)
キーボード操作
Linuxコマンド