Tips

【sudoでcd】知らない人意外と多い、sudo -s , sudo -i , で対話式シェル

linuxで、自分の使うユーザーにsudoの権限は渡されてるけど、いちいちコマンド前にsudoをつけて、面倒だったり煩わしいです。cdどうやってするの?みたいな疑問も出たり。

わたしはこの「-i」「-s」オプションをわりと長い事知らずに作業してきたので、きっと知らない人もいるのではということでご紹介いたします。
これを知ってたらsudoでどうやってcdするんだ?みたいな疑問も出ないでしょう。「sudo で cdできない」で検索するとみなさんが困ってるのがわかります。

$ sudo sh -c "cd /path/to/dir; ls hogehoge"

とかやってるわけです。(sudoでシェルを記述して実行)

“-s”、”-i”オプション付きで実行するとroot権限で対話式シェルを起動することができます。対話式シェルを起動って?つまり、あたかもsuしてユーザーをrootにスイッチしたような感じでコマンドを実行できます。

sudo -s または sudo -i したらもうあとはroot気分で作業しちゃってください!

使い方サンプル

[devuser@hostname ~]$ sudo -i
[sudo] password for devuser:
[root@hostname ~]# cd ~
[root@hostname ~]# pwd
/root
[root@hostname ~]# exit
logout
[devuser@hostname ~]$ pwd
/home/devuser
[devuser@hostname ~]$

解説

$ sudo -s

環境変数「SHELL」で指定されたシェル、またはrootユーザーのシェルを実行する。コマンドを指定しなかった場合は対話シェルとなる。

$ sudo -i

rootユーザーのデフォルトのシェルをログインシェルとして実行する。コマンドを指定しなかった場合は対話シェルとなる。

2つの使い分けは正直しておらず、思い出した方を打っています(てへ)。

sudoは実行したコマンドがログ(/var/log/auth.log)に残りますが、このオプションで実行したコマンドはログに残らないので注意してください。

reiko suzuki
OLD SKOOLシステムエンジニア。ねこを撫でながら働いています。