Webteko 第10回で Screen について発表した
11/28(土)に神戸でWebteko(ウェブテコ)第10回が開かれた(告知ページ)。今回のテーマは Google。最近 Google は新しいサービスとか発表してるので、なかなか良いタイミングのテーマだなと思いながら参加した。
僕の発表
で、僕も発表した。発表のネタは Screen (GNU Screen)。テーマとは全然関係ないんだけど、それはそれということで気にしないで突っ走った。
あとは実際に 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 必須。
導入方法
# source /path/to/cdd # 今回の例の場合、以下を書く source ~/scripts/cdd # これも書く function chpwd() { _reg_pwd_screennum }
これで準備完了。
使い方
- 2つウィンドウを開いて作業してる
- 1つめのウィンドウで、2つめのウィンドウと同じディレクトリに移動したくなった
- そんなときは
cdd WINDOW番号
- WINDOW番号で指定したウィンドウのカレントディレクトリに移動する
最後に
というわけで、Screen について発表しました。これをきっかけに Screen を活用してくれる人が増えたらうれしいです。