screenを使おう

isdはじめに

僕がサーバー構築作業をするときに必ず使用している、screenというLinuxツールについて書きます。

といっても、screenの詳細な設定方法や使い方はここには書きません。
過去に多くの方が記載されているので、そちらを参照してください。

(参考)
・ターミナルを切り替えて使えるscreenコマンドとは – @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/692usescreen.html

・screenコマンドの要点 – Qiita
https://qiita.com/ryounagaoka/items/8203e9c149b542986c92

・Linux screenコマンド使い方 – Qiita
https://qiita.com/hnishi/items/3190f2901f88e2594a5f

・screenを初めて使うためのチュートリアル – UNIX的なアレ
http://wadap.hatenablog.com/entry/20080114/1200288402

isdscreenの便利な機能

僕が便利だと感じているscreenの機能は次のとおりです。

  1. 一度のSSH接続で複数の仮想端末(ターミナル)を開いて切り替えられる。
  2. 接続が切れても、セッションが残っている。
  3. 画面をスクロールしてさかのぼれる(スクロールバッファ)。

僕がとくに気に入っているのは、1.の機能で、例えば「SFTPの操作ログ書き出し設定」を行うときは、

  • 仮想端末-0: vim や systemctl など設定のためのさまざまなコマンド操作
  • 仮想端末-1: tail -f で /var/log/sftp.log を垂れ流し
  • 仮想端末-2: tail -f で /var/log/secure を垂れ流し
  • 仮想端末-3: tail -f で /var/log/messages を垂れ流し

のようにして、操作をしながら意図したとおりの動作をしているか、仮想端末をスイッチしつつ複数のログファイルを確認します。
他にも、Apache/Nginxのアクセスログやエラーログ、メールログなどを流すなど、設定作業をしながらログを見て動作確認をするのにとても便利です。
Webブラウザも、タブで複数のWebサイトを表示して、タブ切り替えで行ったり来たりしますよね。
それと同じような感覚で仮想端末の切り替えができます。

「複数の仮想端末(ターミナル)、シェルを開く」という点では、Poderosaなど他のPCソフトウェアで同じことができるかもしれません。
ですが、クライアントPC上で複数のウィンドウ画面を表示するのではなく、PC上ではウィンドウ画面をひとつだけ開いて、そのウィンドウ画面上で同一サーバー上の複数の仮想端末をスイッチするので、見た目はすっきりしています。

2. については、無線LANが不安定などで、PCとサーバー間のセッションが切れてしまうと、操作中のコマンドが途中で失敗してしまうことがあります。
screenを使えば、サーバー上にscreenセッションが残っていますから、操作中のコマンドは継続されます。
例えば、職場から外出先のように、異なるネットワーク環境、インターネット接続環境に移動しても、以前の仮想端末を継続できます。

3. については、さかのぼって標準出力を確認したり、検索、コピーペースなどもできます。

その他、画面分割は僕は使ったことはありませんが、emacsに慣れている人はうれしいのかもしれませんね。

screenセッションは複数のクライアントから同時にアタッチすることもできます。
この場合、複数クライアントから仮想端末が同じように見れますし、どちらからでもコマンド入力ができます。
以前、この機能を利用して、リモート箇所で作業している同僚の操作を見守ったことがあります。
(ペアプログラミングっぽい?)

isdscreenの環境設定

僕のscreen環境設定(.screenrc)はこんな感じです。

defkanji utf-8
defencoding utf-8
encoding utf-8 utf-8
hardstatus alwayslastline "%w"
defscrollback 10000
escape ^Tt
startup_message off
term vt100
shell -$SHELL

 

一つずつ見ていきます。
 

defkanji utf-8
defencoding utf-8
encoding utf-8 utf-8

文字コードはUTF-8。
 

hardstatus alwayslastline "%w"

いちばん下のステータス行に仮想ウィンドウ番号を表示。
 

defscrollback 10000

スクロールバックの行数は10,000行。
 

escape ^Tt

Ctl-tでscreenの操作へ。
 

startup_message off

screen起動時のメッセージは表示しない。
 

term vt100

シェルの環境変数 $TERM に vt100 をセット。
これはふつうは指定しなくてもよいのかもしれませんが、僕はvimエディタを使用するときに色がついているとごちゃごちゃして好きじゃないので、vt100を指定して、あえて色がつかないようにしています。
 

shell -$SHELL

screenで新しく仮想端末を開くときのシェルは、ユーザーのシェルと同じとする。
これを指定しないと、新しく仮想端末を開くときに .bash_profile が読み込まれないので、必ず指定するようにしています。

isdおわりに

僕は、お客様のご依頼で、スポットで稼働中のサーバーに対して何らかの設定作業を行うことがあるのですが、ほとんどの場合、screenがインストールされていません。
全然使われていないんだな、screen使えなくてツラいな、と残念に思うことが多いので、書いてみました。
もっと便利なツールを僕が知らないだけかもしれませんが(笑)
 

Follow me!