turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

suコマンドの使い方

「su」コマンドはユーザーを切り替えるのに使用する。管理者(root)権限で設定等を行うのによく使う。

suコマンド

suコマンドの書式とオプションです。

書式

書式 説明
su [オプション] [ユーザー名] 指定したユーザーに切り替える
ユーザー名を指定しない場合は管理者ユーザー(root)になる

オプション

オプション 説明
-c コマンド 対話型シェルを起動せず、指定したコマンドを実行
-f シェルの設定ファイル(.cshrc)を読み込まない(cshtcsh用)
- 指定したユーザーのログインシェルを使用
(シェルの設定ファイルを読み込み、環境変数を再設定する)
-l -オプションと同様
-m 環境変数'HOME','USER','LOGNAME','SHELL'を変更しないでシェルを実行
-p -mオプションと同様
-s シェルのパス 指定したシェルを実行

使用例

ここからは実際の使用例を記述します。一応私のPCで動作確認はしています。

シェルのプロンプトは環境によって違うためここでは省略して「現在のパス$」及び「現在のパス#」の形で記述する。以下記述例。

~$ su
~# echo 'sample'

管理者ユーザー(root)になってみよう

「whoami」コマンドで現在のユーザー名を確認できます。以下の場合は「turtlechan」です。

~$ whoami
turtlechan

管理者ユーザー(root)に切り替え

~$ su
パスワード:
/home/turtlechan# whoami
root

1行目で「su」コマンドを使っています。
2行目は表示されないが管理者パスワードを入力してEnter。
3行目で現在のパスの表示が「~」から変わったことが分かる。「whoami」コマンドで現在のユーザー名を確認してます。
4行目で「root」と表示されたので管理者ユーザーに切り替わったことが確認できた。

管理者ユーザーからログアウト

管理者ユーザーのままでいるのは危険なのでログアウトします。「exit」コマンドを入力します。

/home/turtlechan# exit
exit
~$ whoami
turtlechan

「-」のあり・なし

「-」オプションは、指定したユーザーのログインシェルを使用(シェルの設定ファイルを読み込み、環境変数を再設定する)でしたね。百聞は一見に如かず。

下準備として環境変数に適当な文字列を入れておきます。以下の方法で環境変数を設定してもシェルを閉じればなくなります。

~$ export FOOBAR='hogehoge'
~$ echo $FOOBAR
hogehoge

1行目は環境変数「FOOBAR」に「hogehoge」という文字列を代入している。
2行目は環境変数「FOOBAR」に格納されているモノを表示している。FOOBARの前にある「$」はFOOBARが変数であることを意味する。

「-」なしの場合

~$ su
/home/turtlechan# echo $FOOBAR
hogehoge
/home/turtlechan#

「-」ありの場合

~$ su -
~# echo $FOOBAR

~#

以上から「-」オプションのあり・なしの違いが分かる。

  1. 「-」なしの場合
  2. 「-」ありの場合

任意のユーザーに切り替え

管理者ユーザー(root)以外のアカウントに切り替え。以下の例では「kamechan」に切り替えてます。

~$ su - kamechan
パスワード:
~$ whoami
kamechan
~$ exit
ログアウト

簡単ですね。管理者ユーザーとの違いはユーザー名を指定するか否か。

-cオプションを使ってみる

rootで中身は空のfoobar.txtファイルを作成してみます。

~$ su -c 'touch ./foobar.txt'
パスワード:
~$ ls -l
合計 64
drwxr-xr-x  2 turtlechan turtlechan 4096  3月 12 19:25 Desktop
drwxr-xr-x  4 turtlechan turtlechan 4096  5月  2 21:06 Documents
~中略~
-rw-r--r--  1 root root    0  5月 12 20:04 foobar.txt

ほぼ「sudo」コマンドと同じ動きですね。違いは管理者ユーザーのパスワードを使うかですね。

-mオプションを使ってみる

現在の環境変数を確認しておきます。

~$ echo $HOME
/home/turtlechan
~$ echo $USER
turtlechan
~省略~

kamechanで確認

-mオプションなし

~$ su kamechan
パスワード:
~$ echo $HOME
/home/kamechan
~$ echo $USER
kamechan
~省略~

-mオプションあり

~$ su -m kamechan
パスワード:
~$ echo $HOME
/home/turtlechan
~$ echo $USER
turtlechan
~省略~

確かに引き継がれていますね。

-sオプションを使ってみる

-sオプションなし

~$ su -
パスワード:
~# echo $SHELL
/bin/bash

-sオプションあり(今回は/bin/shを使用)

~$ su - -s /bin/sh
パスワード:
# echo $SHELL
/bin/sh

使用するシェルが選べるんですね。

おわりに

勉強としてsuコマンドにオプションをつけて実行した結果。自分用ログとして。