Screenは、UNIXをCUI環境で使わなければならないぼくら視覚障害者にはなくてはならない物です。普通は、Xとか使えば簡単に複数の仕事をすることができますが、CUIつまり、文字だけで作業する物には、screenを使って複数の仕事を同時に行います。仕事と書いているのは、例えば、ftpで、ファイルをgetしている間に、telnetで他のhostへアクセスしたり、muleで原稿の編集をしたりということです。これをマルチタスクとでもいうのかな。ではとりあえず、screenをインストールしてから実際の使い方を紹介しましょう。
なあに、screenのインストールなんてすぐにできます。FreeBSDのcdromには、packagesというdirectoryが有るはずです。そのなかに、Allというdirectoryの下に、screen-x.x.x.tgzという物が有ると思います。ではこれを次のようにやってインストールします。
% suこれでインストールは終了です。そしたら次のファイルを.screenrcという名前で、ご自分のhome directoryの下に置いて下さい。
-------.screenrc------ #3.3 # Do not remove the above line. This screen rc file was updated # by the newsyntax script. startup_message off #processio_code euc #defflow off autodetach on vbell off vbell_msg " Wuff, ---- Wuff!! " bell "Bell in window %." activity "Activity in window %." crlf off #defscrollback 200 msgwait 5 msgminwait 3 #defwrap on #defmonitor off #deflogin off #monitor off #login on escape ^Z^Z # C-z C-z : send ^Z to process bind '^k' bind '^\' bind '^g' bind '?' help # C-z ?: help bind '\\' quit # kill all window and terminate screen. bind 'K' kill # kill current screen bind '}' history bind '^a' other # C-z C-a, C-z a: other window bind 'a' other bind 'Z' suspend # C-z z, C-z Z: suspend screen bind 'z' suspend bind 'G' vbell # vbell toggle bind 'R' reset # reset screen bind 'P' screen 9 ppp term vt100 -----------
ではscreenの使い方を説明します。これから、c-Aとか、c-Zと言う記述がでてきますがこれはCTRL + Aまたは、CTRL + Zのことです。では%と言うプロンプトの後で、 screen と実行して下さい。%とすぐにプロンプトが帰ってくると思います。 ここで例えば vi test.txt 等と、viを立ち上げてみましょう。いやべつにここで、viを使ってなにか書くということではありません。べつになにか書いても良いのですが、でここで、 C-z を入力してから、 c を入力してみて下さい。 %と出てきましたね。ではここで、 man ls とでも入力して、lsのmanualを表示してみましょうか?いやべつにいまlsのmanualを読もうというわけではありませんが。では、 C-z を入力して、 0 を入力してみてください。ほら、先ほど立ち上げた、vi test.txtの画面に戻ったでしょ。次に C-z を入力して、 1 と入力してみて下さい。こんどは先ほど表示した、lsのmanualに行きましたね。このように、screenを使えば、本をめくるような感覚で仕事が切り替わります。ですから、ftpでgetしている間に、他の仕事ができたりするのです。ということで、かなり便利になると思います。ではscreenのもうすこし細かい説明をして行きましょう。
1. screenは、全部で10このshell(性格には10このプログラム)を立ち上げることができます。で、screenと立ち上げたときは、Window 0となります。ですから、Windowは、0から9までで、10ことなります。上の例では、vi test.txtが、Window0で実行されており、man lsが、Window1で実行されています。
2. C-z c と入力すると、新しいWindowを作り、そしてそのWindowに移動します。ですから、Windowは10コマで作れるので、 C-z c を9回やるとWindow9に行きます。
3. Window間を移動するには、上にも書いたとおり、C-zをやってから、Window番号を入力という方法とまた、C-zを入力して、pを入力すると、一つ前の番号のWindowへ、C-zの入力後、nを入力すると、一つ後の番号のWindowへ移動します。
また、C-zを入力後、aを入力すると今開いていた、Windowの直前に開いていた、Windowに移動します。C-zのpとは違うので注意して下さい。実際にやってみれば分かるのですが、次のような事です。
今、Window0を開いていたとします。そして、C-z 3とかやって、Window3に移動します。ここで、C-z pだと、Window2に移動するのですが、C-z aを入力すると、Window0に移動するということです。この、C-z aは便利だと思います。
4. 現在どのWindowにいるか分からなくなったら、 C-z N を入力します'N'は大文字です。 This is window 0 みたいに表示されます。 また C-z w を入力すると 0-$ tcsh 1*$ tcsh と画面の最下行に出てきます。上の意味は次のような意味です。
ですから上の表示は、 現在のWindowは1で、一番最初に起動したアプリは、tcsh、そして、その直前に開いていたWindowは0でこれもtcshが最初に起動されていたアプリだということを表しています。
5. 次にWindowを閉じてみましょう。次の2つの方法があります。
まず、%等のシェルのプロンプトが出たら、 exit を入力する。すると前のWindowに戻ります。そして、 exit を次々と実行して行くと、 screen is terminated と出ます。そしたらscreen事態が終了します。
もう一つは、 C-z k です。これを実行すると同じように、Windowが閉じて行きます。同じように C-z k を複数回行うと、 screen is terminated となって終了します。 また全てのWindowをいっぺんに閉じたいときは、 C-z \ です。
6. では次のようにしてみましょう。
screenを起動して、いくつかアプリケーションを立ち上げます。そして、
C-z d
を入力します。すると、
detached
と出ましたか?では、そのままlogoutしてみましょう。起動したままのアプリが有るって?まあきにしない。
ではloginして、
screen -r
と入力してみましょう。ほらね、先ほどのscreenの状態に戻ったでしょう。こんなこといわなくても分かってるといわれそうだけど、detachとは、引き離すという意味です。
このようにしておけば、ftpでファイルをgetしていても、screenをdetachしておいて、logoutしても、ftpが仕事をしておいてくれます。これ結構便利だと思います。また、モデムなどで学校や、会社のマシンにloginして仕事をしていて、何かのトラブルでモデムが切れたり、また、端末でWindowsマシンを使っていて、Windowsお得意のフリーズに遭遇しても(Windowsを使っているあんたが悪いという話もあるが)screenは自動的にdetachしてくれます。だから再びloginして、
screen -r
を実行すれば、トラブルに有ったときの直前の状態に戻れます。
また、screenをdetachしてたのを忘れてしまって、再びscreenを立ち上げ、detachしたとします。すると、二つのscreenがdetachされている状態になります。ここで
% screen -r
There are screens on:
22303.ttyp0.katsuaki (Detached)
22306.ttyp0.katsuaki (Detached)
2 Sockets in /tmp/screens/S-katsuaki.
つまり、screen -rだけでは、すでにdetachしているscreenが二つ有るからどれですか?と聞いています。このばあいは、ただたんにscreen -rではだめで、次のように入力します。
screen -r 22303.ttyp0.katsuaki
と言うように入力して、どのscreenなのかを入力しなければなりません。上の
でもでも、数字を入力したり、端末名を入力した理なんてめんどくさい。これを避けるために、screenを起動するときに名前を付けて起動しましょう。例えば
screen -S oshigoto1
と入力し起動します。Sは大文字です。
screen -r oshigoto1
で起動できます。
では、oshigoto1をdetachして、oshigoto2と言うscreenを立ち上げてみましょう。
% screen -S oshigoto2
で、oshigoto2もdetachします。と言うことは、今は2このscreenがdetachされています。つまりoshigoto1,oshigoto2です。
では、次のコマンドを入力してみましょう。
% screen -ls
There are screens on:
23481.oshigoto1 (Detached)
23488.oshigoto2 (Detached)
2 Sockets in /tmp/screens/S-katsuaki.
と言うように、oshigoto1、
oshigoto2がdetachされているよと出てます。
ちなみに、-lsはいまscreenがdetachされているかどうかを調べるオプションです。
このようにして、忘れているscreenがないかどうか、たまには確認しましょう。忘れているscreenがいくつもdetachされていると、そのscreenはまだ終了していないので、メモリを使ってます。使わないプログラムは終了させ、メモリを解放しましょう。
7. 実は、screenのデフォルトでは、C-zを使うようにはなっていません。C-aとなっています。screenのコマンドを入力するにはC-aをやってから、cとか入力することになっています。でもね、このC-aというのは、tcshや、muleで行頭へカーソルを移動するときに使うコマンドなのです。ですから、デフォルトのままでは、ぶつかってしまいます。ところが、.screenrcに、C-aのかわりに、C-zを使いたいという設定を書いておけば、C-zが使えるようになります。ですから、上に上げてある、.screenrcはそのようにかかれています。具体的な記述は
escape ^Z^Z # C-z C-z : send ^Z to process
と書いてあるところです。これをたとえば、
escape ^T^T
と書けば、Ctが、C-aのかわりに使えるようになります。ですから、C-zにこだわる必要はありませんが、C-zがいちばんぶなんかなということで、上野.screenrcはそのように書きました。
じゃあ、プログラムをsuspendするためのC-zはどうすればいいんだということになりますが、このsuspendのための、やりかたはC-zを入力して、zを入力するとできるようになっています。
8. べんりなコピーモード
screenでは画面上の文字列を他のWindow等にコピーできます。
C-z [
と入力すると、コピーモードが始まった旨のメッセージがでます。カーソルを移動させて、コピーしたい文字列をバッファにほぞんします。カーソル移動コマンドは、viと同じです。h,j,k,lでカーソルをいどうし、コピーしたい文字列の最初に、会わせてスペースを押します。「マークがついたよ」みたいなメッセージがでます。そして再び
カーソルを移動させて文字列の終わりに移動します。そして再びスペースを押します。これで自動的にコピーモードがおわります。で、貼り付けたい部分にあるいは、Windowに移動して、
C-z ]
を入力するとコピーされます。
コピーモードでのキー割り当てには
などがあります。では、コピーモードのちょっと細かい話をします。コピーモードで、マークされた部分つまり、子の部分をコピーしたいなと思ったところをスペースなどでマークしますね。そして、C-z ]で貼り付けます。そのC-z ]をやるまでのあいだ、コピー部分は、コピーバッファと言うところに格納されています。このコピーバッファというのはメモリのある一部分です。
だから、コピー部分をファイルにも保存したいなと思ったら、そのような手順をふまないとファイルには保存されません。コピーモードを抜けたら、
C-z >
と入力すると
/tmp/screen-xchgと言うファイルに保存したよとメッセージが出ます。と言うことなので、/tmp/screen-xchgをcatなどで確かめてみましょう。ちゃんと書き込まれていたでしょ?
このscreen-xchgをスクリーン交換ファイルと言います。
でふぉるとでは、/tmp/screen-xchgというファイルを使うようになっています。でも、自分の希望のdirectory の希望のファイル名に保存してもらいたいときは次のように入力します。
C-Z : bufferfile /home/katsuaki/mail
などとします。するとこれからscreen交換ファイルは/home/katsuaki/mailになります。いつもこのようにしたいのであれば、.screenrcに
bufferfile /home/katsuaki/mail
と記述しておけば良いでしょう。
そして、スクリーン交換ファイルの内容を、コピーバッファに書き込むには、
C-z <
と入力します。
そして、C-z ]と入力すれば、コピーされます。このようにスクリーン交換ファイルからは、直接貼り付けることはできず、いちどコピーバッファにスクリーン交換ファイルの内容をコピーしてから、C-z ]をやらなければなりません。
もちろん、予めscreen交換ファイルに記述して置いたものも貼り付けることができます。例えば、telnetでniftyにアクセスシテ、
niftyから直接mailをだしたいとします(管理者を信用して無くて、秘密のmailを出したいときなど、でもあまり意味が無いと思いますが)。
予め、秘密のmailをエディタなどで、screen交換ファイルに書いておきます。今野場合は、
/home/katsuaki/mail
とします。そのご、screenを起動し、スクリーン交換fileの内容をコピーバッファにC-z <でコピーします。そして、telnetでniftyにアクセスシテ
mailの本文を書くところに行ったら、C-z ]で貼り付けます。これでmailがniftyから送信されます。
9. hardcopy
画面全体のコピーができます。例えば、window0で
C-z h
と実行すれば、hardcopy.0というファイル名でこぴーできます。試しに、
cat hardcopy.0
と実行してみてください。また、Window1でC-z hを実行すれば、hardcopy.1というファイル名で保存されます。デフォルトでは、hardcopy.nと言うファイルは、ホームディレクトリに作られるようですが、予め次のように設定すれば、希望のディレクトリにファイルを作ることもできます。
% C-z : hardcopydir /home/katsuaki/tmp
とすれば、/home/katsuaki/tmp/hardcopy.nと言うファイル名で保存されます。また、.screenrcに
hardcopydir /home/katsuaki/tmp
等のように書いておけば、screenを起動したときから/home/katsuaki/tmpに保存されるようになります。
10. LOGがとれる
screenには、logを採る機能があります。
C-z H
と入力します。大文字のHです。小文字だとハードコピーです。デフォルトでは、screenを起動したディレクトリに、screenlog.nと言うファイル名で保存されます。nは ウインドー番号です。これでtelnet等でniftyにアクセスするときも
% telnet r2.nifty.ne.jp | tee nif.log
のようにteeコマンドを使わなくてもlogがとれます。
もし、/home/katsuaki/tmp/以下にlogを採りたければ、
C-z : logdir /home/katsuaki/tmp
と入力すれば良いでしょう。これも.screenrcに
logdir /home/katsuaki/tmp
と書いておけば、いつでもこのディレクトリが使われます。
と言うことでscreenの使い方でした。すぐれもののツールでしょ?
前のpageに戻る