リモートホスト操作が便利になるscreenコマンド
screenコマンドとは
1つの物理ターミナルから仮想ターミナルを切り分けて使えるコマンドラインツールです。 物理ターミナルをひとつ開くとその中に別の(仮想)ターミナルを開けるようなツールです。 次のようなことができます。
- 1つのターミナル上で、仮想ターミナルをを同時に開いてそれぞれで別の作業ができる。
- 仮想ターミナルが起動したまま、物理ターミナルを終了し、再度ターミナルでログインして、screen を呼び出すことで起動したままの仮想ターミナルの作業を続けられる。
例えば、リモートホストにsshで接続していくつかの作業を並行してしたいときに、別の物理ターミナル立ち上げて、ssh接続する必要がなくなります。
インストール
Ubuntu 14.04LTSでは次のようにして、インストールできます。
$ sudo apt-get install screen
使い方
リモートホスト(10.0.0.1)にsshで接続し、そこでscreenコマンドを使う場合を例にします。 この場合、10.0.0.1のホストにscreenがインストール済みである必要があります。
$ ssh rname@10.0.0.1 rname@remotehost:~$
screenのセッションを生成する
rname@remotehost:~$ screen
次のようなCopyrightの画面が表示されるので、Enterを押します。
Screen version 4.01.00devel (GNU) 2-May-06 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury ...
セッション内で新しいウィンドウを作る
次の入力をすることで、セッション内に新しいウィンドウを作成することができます。
Ctrl-a c
試してみます。 まず現在のウィンドウで、echoでt1を表示しておきます。
rname@remotehost:~$ echo t1 t1 rname@remotehost:~$ [Ctrl-a c]
ウィンドウ2が作成されて画面が切り替わります。
rname@remotehost:~$
echoでt2を表示しておきます。
rname@remotehost:~$ echo t2 t2 rname@remotehost:~$ [Ctrl-a c]
ウィンドウ3が作成されて画面が切り替わります。
rname@remotehost:~$
echoでt3を表示しておきます。
rname@remotehost:~$ echo t3 t3
セッション内でウィンドウを移動する
次の入力で、次(next)のウィンドウを画面に表示することができます。
Ctrl-a n
ウィンドウを戻る(previous)場合は次のように入力します。
Ctrl-a p
先ほどの続きから、試してみましょう。
rname@remotehost:~$ echo t3 t3 rname@remotehost:~$ [Ctrl-a n]
t1のウィンドウが表示されます。
rname@remotehost:~$ echo t1 t1 rname@remotehost:~$ [Ctrl-a n]
さらに、t2に切り替わります。
rname@remotehost:~$ echo t2 t2
逆に戻ってみます。
rname@remotehost:~$ echo t2 t2 rname@remotehost:~$ [Ctrl-a p]
t1のウィンドウが表示されます。
rname@remotehost:~$ echo t1 t1
現在のウィンドウの一覧を見る
次のコマンドで、ウィンドウの一覧を見ることができます。
Ctrl-a "
次の内容が表示されます。カーソルをj
, k
キーで移動させて、一覧から表示するウィンドウを選択することができます。選択したらエンターキーを押すことで表示されられます。
Num Name Flags 0 bash $ 1 bash $ 2 bash $
ウィンドウに名前を付ける
ウィンドウ一覧を見ていると、それぞれのウィンドウは何をしているウィンドウだったかを記入したくなります。そこで次の入力して、現在のウィンドウに名前をつけることができます。
Ctrl-a A
t1のウィンドウで、echo-t1という名前をつけます。
rname@remotehost:~$ echo t1 t1 rname@remotehost:~$ [Ctrl-a A] Set window's title to: echo-t1
一覧を表示すると、次のようになります。これでウィンドウと作業の内容を一致でき、一覧からウィンドウを選択しやすくなります。
Num Name Flags 0 echo-t1 $ 1 bash $ 2 bash $
現在のウィンドウを閉じる
現在のウィンドウを閉じる場合、次のように入力します。
Ctrl-a k
t1のウィンドウを閉じてみます。
rname@remotehost:~$ echo t1 t1 rname@remotehost:~$ [Ctrl-a k] Really kill this window [y/n] y
一覧を表示すると、echo-t1が閉じられていることがわかります。
Num Name Flags 1 bash $ 2 bash $
現在のセッションをデタッチする
次の入力で現在のセッションをデタッチします。デタッチするとターミナルをログアウトできます。
Ctrl-a d
試してみます。
rname@remotehost:~$ [Ctrl-a d]
次の画面に切り替わります。下記の4946
は、セッションのプロセス番号です。再度セッションにアタッチするときに使います。
[remote detached from 4946.pts-1.remotehost] rname@remotehost:~$
この状態で、リモートホストからログアウトします。
rname@remotehost:~$ ログアウト Connection to 10.0.0.1 closed. lname@localhost:~$
これで、ターミナルを終了しても大丈夫です。
セッションにアタッチする
次の入力で、デタッチしたセッションに再びアタッチすることができます。
$ screen -r <pid>
先ほどの続きで、ターミナルを立ち上げ、リモートホストに接続します。
$ ssh rname@10.0.0.1 rname@remotehost:~$
先ほどデタッチしたセッション(4946)にアタッチします。
rname@remotehost:~$ screen -r 4946
t2のウィンドウが表示されます。リモートホストからログアウトして、ターミナルを終了しても残っていることが確認できます。
rname@remotehost:~$ echo t2 t2 rname@remotehost:~$
リモートホストに存在するscreenコマンドのセッション番号を確認する
前回デタッチしたセッション番号が何だったかわからない場合は、次のコマンドでscreenセッションの一覧を表示することができます。
$ screen -ls
次のような一覧が得られます。このリストの 4946
部分がプロセス番号なので、このプロセスにアタッチすれば、セッションに復帰でき、前回のデタッチ状態から作業を開始できます。
rname@remotehost:~$ screen -ls There is a screen on: 4946.pts-1.removehost (2016年01月01日 12時00分00秒) (Attached) 1 Socket in /var/run/screen/S-remotehost.
最低限知っておく必要のあるscreenコマンドは以上です。 screenコマンドは、他にも複数の人間が同じターミナルを共有できるらしいですが、これについてはまた次の機会にしようと思います。