Linux Tips

screenコマンドでリモートマシン操作

ネットワーク経由でLinuxなどのUNIXシステムを管理する場合、ネットワーク接続が不安定なために作業が中断されたり、思いもよらず作業時間が長引 いて端末の電源を切れなくなったりといった問題にたびたび遭遇します。Teratermやscreenコマンドでリモートマシン操作、Poderosaといったターミナルソフトウェアで接続した場 合、そのセッションが完了すると基本的に実行していたコマンドも連動してすべて停止してしまうことが原因です。
Linuxシステムではパッケージとして「screen」コマンドを簡単に追加導入できます。screenコマンドを利用することで、ログインサーバ上に 「死なないshell」のようなもの(実際にはscreenコマンドはターミナルエミュレーションソフト)を作り出し、このshellをサーバ上で動かし 続けることでいったんログアウトした後で改めてscreenに再接続することができます。詳細な使い方は以下に記載します。

screenのインストール


screen環境を利用するために、screenパッケージを導入します。
# yum -y install screen

セッションの開始


screenコマンドを発行するとscreenのセッションが始まります。
$ screen
screenセッション開始後、特に画面は変わった変化はありません。

セッションの終了


screenセッションを終了する場合、画面からexit(シェルを抜けるコマンド)を入力します。
$ exit
[screen is terminating]
screenセッションが終了すると、[screen is terminating]が表示されます。

セッションの一時離脱(デタッチ)


セッションを一時的に切断します。実行中のプロセスは残ります。後でセッションに接続する際には必ず必要になる操作です。 Ctl+a(コントロールキーを押しながらaを入力:以下、C-aと記載) につづき、Ctl+dを入力します。
$ C-a C-d ←画面には何も表示されません
[detached]

セッションへの再接続(他のユーザがデタッチしたscreenに接続していない場合)


自分自身でデタッチして、他のユーザがアタッチしていないセッションに接続する際にはscreenコマンドに引数【-r】をつけて起動します。
$ screen -r
基本的には、以上のscreenのデタッチ、アタッチを覚えておけばscreen機能を有効活用できます。

セッションの一覧表示


現在のscreenセッションを表示します
$ screen -ls
21436.pts-6.pacific (Detached)
21819.pts-4.pacific (Detached)
2 Sockets in /var/run/screen/S-ksakurai.
複数のscreenコマンドをデタッチしている場合には接続IDを確認する必要があります。それぞれにアタッチする場合には1列目のIDを【-r】引数に続いて入力します。
$ screen -r 21819.pts-4.pacific

セッションのアタッチ(マルチディスプレーモード)


screenコマンドが非常に便利なのは、複数の人間が同じターミナルを共有できることにあります。 ただし、同じアカウント(uid)でログインする必要がありますのでご注意ください。 マルチディスプレーモードへの接続は引数に【-x】を利用します。
$ screen -x
コマンドの実行や、実行結果の出力などを共有することができます。遠隔地からサポートを受ける時など非常に便利です。複数のscreenセッションが存在する場合には【-r】での接続と同様にscreenのIDを引数に続けて入力します。

そのほかの利用方法


screenコマンドはその他様々なコマンド利用可能です。マニュアルを参照してください。
$ man screen