Webteko 第10回で Screen について発表した

11/28(土)に神戸でWebteko(ウェブテコ)第10回が開かれた(告知ページ)。今回のテーマは Google。最近 Google は新しいサービスとか発表してるので、なかなか良いタイミングのテーマだなと思いながら参加した。

僕の発表

で、僕も発表した。発表のネタは Screen (GNU Screen)。テーマとは全然関係ないんだけど、それはそれということで気にしないで突っ走った。

Screen
View more documents from mollifier.

あとは実際に Screen を操作しながら基本的な使い方について説明した。こんな感じ。

screen とは?

ターミナル(端末)を「タブブラウザ」みたいにするツール。

1つの「タブみたいなもの」を「ウィンドウ」と呼ぶ。複数のウィンドウを作ったり、そいつらの間をいったりきたりできるようになる。

1. screen の基本的な使い方

screen を起動する

まずは screen を起動する。

% screen

とりあえず一つウィンドウが開く。

ウィンドウを増やす

もう1枚ウィンドウが欲しくなったら、C-a c または C-a C-c で新しいウィンドウを開く。(C-a は Control を押しながら a)

それぞれのウィンドウで作業できる。

ウィンドウを移動する

C-a n または C-a C-n で次(右)のウィンドウに移動する。
C-a p または C-a C-p で前(左)のウィンドウに移動する。

2. よく使うコマンド

C-a ? (help)

ヘルプを見る。環境によってキーバインドが違うことがあるので重要。

C-a c または C-a C-c (screen)

新しいウィンドウを作る。

C-a n または C-a C-n (next)

次のウィンドウに移動する

C-a p または C-a C-p (prev)

前のウィンドウに移動する。

C-a 0 (select 0)

...

C-a 9 (select 9)

番号 0 ~ 9 までのウィンドウに移動する。

C-a C-a (other)

前に表示していたウィンドウに戻る。2つのウィンドウをいったりきたりするのに便利。

C-a k または C-a C-k (kill)

現在のウィンドウを閉じる。

C-a \ (quit)

全てのウィンドウを閉じてscreenを終了する。デタッチ(後述)しない。

C-a : (colon)

コマンドモードに入る。

コマンドモードに入って "コマンド名" で任意のコマンドが実行できる。

例: C-a : の後 quit

3. 設定ファイルの書き方

HOME ディレクトリの下に .screenrc というファイルを作って、そこに書く。

screenrc の例。

# コマンド文字(デフォルトでは C-a)を変更する
# screen は「C-a の後、何か」というキーで操作する
# 「C-a」は押しにくいので変える人が多い
escape ^tt
# C-a C-a (other) コマンドは「コマンド文字を2回」であることに注意する
# この場合、 C-t C-t で other コマンドになる

# ステータスライン
# 色無し
#hardstatus alwayslastline "%-w[%n %t]%+w"
# 色付き
hardstatus alwayslastline "%{= Kw}%-w%{=b bw}[%n %t]%{-}%+w"
# %{= Kw}
#   背景が明るい黒、文字が白 に変更する
# %{=b bw}
#   ボールド 背景が青、文字が白 に変更する
# %{-}
#   色を元に戻す
#
# 詳細は man screen の 「文字エスケープ」参照

# on の場合、起動時に著作権表示が出る
# いらないので消す
startup_message off

# キーバインド設定の例
# k (kill) コマンドを無効にする
bind k
bind ^k
# うっかり押して「あーー!!」ってならないために

# 代わりに Shift-k を kill コマンドにする
bind K kill

僕の普段使ってる screenrc は以下にあるよ。
http://github.com/mollifier/config/blob/master/dot.screenrc

4. デタッチの使い方

デタッチとは

デタッチとは、現在の screen で開いているウィンドウ、実行中のプログラムをセッションとして保存すること。

デタッチする方法

detach コマンド(C-a d または C-a C-d)を実行する。または、~/.screenrc に autodetach on と書いておくと、ハングアップしたときに勝手にデタッチされる。

デタッチしたセッションを復元する方法
# screen を起動していない状態で以下のコマンドを実行する
% screen -r

複数のセッションがデタッチされているときの方法

# まずはデタッチされているセッション情報を確認して ...
% screen -ls
There are screens on:
    8247.pts-3.minimum  (2009年11月29日 15時12分53秒)   (Detached)
    8222.pts-3.minimum  (2009年11月29日 15時12分49秒)   (Detached)
    3665.pts-0.minimum  (2009年11月29日 12時45分28秒)   (Attached)
3 Sockets in /var/run/screen/S-mollifier.

# 番号を指定して復元
% screen -r 8247
デタッチが役に立つ場面
  • サーバにログインして作業してるけど、ネットワークの接続が不安定だ。

-> autodetach on しておくと接続がとぎれても復元できるので安心。

  • サーバにログインして、そこで時間がかかる作業を始めた。全然終わる気配がない。さっさと家に帰りたい。

-> 一旦デタッチしたらローカルPCの電源を切ってもOK。サーバ側が動いている限り実行し続けてくれる。

5. cdd コマンドの紹介

別のウィンドウのカレントディレクトリに移動するコマンド。
詳細は以下のページ参照。
http://d.hatena.ne.jp/secondlife/20080218/1203303528

あと、zsh 必須。

導入方法
  1. cdd 本体を取ってきて、適当な場所に置く。(~/scripts/cdd に置いたとする)
  2. ~/.zsh ディレクトリを作成する
  3. ~/.zshrc に以下を書く
# source /path/to/cdd
# 今回の例の場合、以下を書く
source ~/scripts/cdd

# これも書く
function chpwd() {
    _reg_pwd_screennum
}

これで準備完了。

使い方
  1. 2つウィンドウを開いて作業してる
  2. 1つめのウィンドウで、2つめのウィンドウと同じディレクトリに移動したくなった
  3. そんなときは cdd WINDOW番号
  4. WINDOW番号で指定したウィンドウのカレントディレクトリに移動する

最後に

というわけで、Screen について発表しました。これをきっかけに Screen を活用してくれる人が増えたらうれしいです。