screenコマンドの小さな話
ターミナル操作をいい感じにできる仮想端末マネージャコマンドscreen
を最近知りました。メモしておきます。
私の理解では、ターミナルをラップして、通常のシェル操作に加え、セッション、ウィンドウ、領域という概念を取り込み、それらを操作できるようにするものです。
screen
を実行すると仮想端末のセッション(session)とそれに紐づく一つのウィンドウ(window)が起動します。ウィンドウ内ではいつも通りのシェルの操作に加え、セッションに紐づくウィンドウを複数起動できるようになるので、ssh
等でサーバに接続した後で起動すると便利です。今まで複数ログインしていた場合、一度ログインしてウィンドウを複数起動することで済ますことができます。(TeraTermのセッションの複製に似た感じです。詳しく見ていないですが内部的に使っているのでしょうか?)
使うことのメリットとして、
- 複数ウィンドウを起動できるので、面倒な踏み台経由の
ssh
接続時に結構楽できます。 - 接続が切れてもセッションが残っていてくれるので、再度つなぎなおした時に作業をすぐに再開できます。一つのウィンドウで長い処理を走らせて寝かせておくこともできます。
他にも、コマンドによるコピー&ペーストの操作をキーボードのみでできるようになることも、なかなか嬉しいことです。
基本的な使い方
触っていてよく使っているコマンドを羅列します。
セッション管理系
コマンド | 内容 |
---|---|
screen | 新しいsessionとそれに紐づいた一つのwindowを起動します。 |
screen -ls | 現在起動しているsessionの一覧を表示します |
screen -r | 最後に繋いでいたsessionを再開します。sessionのidを渡せば指定したセッションにつなぎ直すことができます |
Ctrl+a d | session起動中に現在のsessionから抜ける(detach)ことができます。detach後もsessionは起動しているので、一覧で確認できます |
Ctrl+a \ | session起動中、session自体を削除します。一覧からも消えます。起動中の紐づいた全てのwindowも削除されます。私の環境だとCtrl+a Ctrl+¥ になっていました |
チートシート
セッション起動後は、Ctrl+a ?
でコマンドのチートシートが表示されます。私のメモの存在意義を奪いかねないですが、ただ表示されるコマンドがアルファベット順なのでちょっと見にくいです。そこに漬け込みます。
以下主にセッション起動後のコマンドになります。
ウィンドウ管理系
コマンド | 内容 |
---|---|
Ctrl+a c | 新しいwindowを開きます |
Ctrl+a k | windowを削除します、正確には削除しますか?と(y/n)で聞かれます |
Ctrl+a " | windowの一覧を表示します。j ,k でwindowを切り替えることができます |
Ctrl+a N | 現在開いているwindowの名前(Name?)を表示します |
Ctrl+a n, Ctrl+a p | 別のwindowに切り替えます。多分切り替え先はprevious ,next に対応していると思います |
Ctrl+a Ctrl+a | 切り替え前のwindowに切り替えます |
領域管理系
コマンド | 内容 |
---|---|
Ctrl+a S | windowを水平に分割します。windowが紐づかない新しい領域(region)を作成します |
Ctrl+a | | windowを垂直に分割します。windowが紐づかない新しいregionを作成します |
Ctrl+a TAB | 分割されたregion間を移動します |
Ctrl+a X | 分割時、現在有効になっているregionを削除します |
Ctrl+a Q | 分割時、現在有効になっていない他のregionを削除します |
メタ操作系(未整理)
コマンド | 内容 |
---|---|
Ctrl+[ | コピーモードに入ります。hjkl 等のvim ライクな入力で移動することができます。space を押すとコピー開始位置を指定、もう一度space を押すと選択範囲をコピーします |
Ctrl+] | バッファのコピーした内容をペーストします |
使っていての感想
色々あります。
Ctrl+a
がシェルの行頭移動を奪ってしまいます。Ctrl+a a
に行頭移動が振り分けられているので頭を切り替えて使っています。セッションの中にいる、と言うことを意識できるのでこれはこれでいいかもしれないです。キーバインドを変えるのは嫌なので私はこのままです。慣れました。vim
の画面分割と一緒に使うと結構混乱します。vim
のCtrl+w
系の画面移動とごっちゃになったり、screen
でのコピー範囲が行単位なので行番号入っちゃったりしました。これは対応方法がわからないですが、慣れました。- スクロールについて最初どうすればいいか不明でした。ログ出力等で流れてしまった時は、コピーモードに入って遡っています。別にコピーしたいわけではないのでちょっと気持ち悪いです。
vim
の気分で操作しています、less
同様いまだに正しい移動操作がわかりません。 - macにデフォルトで入っている
screen
はヴァージョンが古いようで垂直分割ができないです(2016/12/14に確認)。homebrew
で入れ直しました。あと、ssh
接続時に便利とか書いていましたが意外にコマンド自体が入っていないことがあったりします、注意です。
他にもウィンドウ操作を記録することができたりするのですが、使い道がわからず今のところ使っていないです。さらに他にも複数人で同じセッションを共有するマルチディスプレーモードという便利なものもあるそうですが、私はぼっちなので使っていません。
感想
コピー&ペーストがキーボードから手を動かさずに使えるので、嬉しくてローカルでも使っています。早く使いこなせるようになるといいのですが。まだまだ不明点が多いです。
上記内容に間違いがあれば申し訳ないですが、修正しますので是非教えていただきたいです。