screenコマンドはリモートログインの親友

nohupコマンド: リモートログインでのビルドの友 - 組み込みの人。を書いたらはてぶでscreenというコマンドがあることを教えてもらいました。

調べてみるとこのページが詳しいようです。
Let's use SCREEN!

私が使っているUbuntu 9.04ではすでにインストールされていました。

$ which screen
/usr/bin/screen


このコマンドはいろいろ機能がてんこもりのようですが、私が気に入ったのは不意に切断されても再接続できる機能です。

ちょっとやってみましょう。
まずはターミナルからsshでリモートログイン

local$ ssh remotehost

そこでscreenコマンドをオプション無しで実行。

remote$ screen

画面が一度クリアされた後、また普通にプロンプトが出ます。

remote$ vi foo.c

適当にエディタでファイルを開いて、何か書き込みます。
そこで、セーブしない状態で、ターミナルを強制終了! (右上のxをクリック!)

普通なら悲鳴があがる状態ですが、あわてずさわがずターミナルを開いて再度リモートログイン

local$ ssh remotehost

ここで再度screenコマンドですが、今度はリカバリのために -r オプションをつけて実行。

remote$ screen -r

これでさっきの編集中のviの画面に戻ります。

これはすごい!
乗り物の中からノートパソコンでリモートログインしている時に便利ですね。これでトンネルに入っても大丈夫。



(追記)
ちょっと例が悪かったですね。
viだったら上記のように途中で切断されても、再度ログインしたときに

$ vi -r foo.c

で編集途中のファイルを復活できます。だから悲鳴をあげるほどではないです。
このように-rオプションで開いた時は明示的にファイルを書き込んで終了することを忘れずに。 :wq


(追記2)
コメントでtmuxというのを教えていただきました。
このページが詳しい。
時代はGNU screenからtmuxへ - Dマイナー志向
Ubuntuへのソースからのインストール
tmux 入れてみた - IT戦記
Ubuntu 9.10ならapt-get で入る
Ubuntu – Error