screenコマンドの使い方についてのメモ
お知らせ: 新しくホームページを作りました! これから記事を増やしていくつもりなので, 良かったら見て下さい!! ホームページはこちらになります.
screenコマンドについての使い方メモ。
sshでつないで作業している時に、長時間プログラムを実行するときは、通信が切れてしまいますよね。そんな時に便利なのが、screenです。screenコマンドを使うと、仮想的にTerminalを作れて、任意のタイミングで入ったり出たりできます。(用語的に正しいかは定かでは無いですが、仮想的なTerminalのことを、以下socketと呼びます。)
よって、長時間プログラムを実行するときは、まずsshでリモート環境に入って、screenコマンドでsocket作ります。その上で、プログラムを実行しておいて、そこから出れば、好きなときに入り直せます。そして、プログラムはもちろん中断されません。
ということで、使い方を。
一番単純なのは、
$ screen
とすることです。これでもう新しいsocketができたことになります。では、このsocketを消すために、ctrl+d
を押してみましょう。すると、
[screen is terminating]
と表示され、元の画面に戻ったと思います。ただ、これだとさっきのsocketは消えてしまっているので、次はsocketを消さないでsocketから出るようにしましょう。もう一度、screen
コマンドを打ってみましょう。そして、次は、ctrl+a, d
と押してみてください。今度は、
[detached]
と表示され、また元の画面に戻ったと思います。では、さっきのsocketが残っているか確認するために、
$ screen -ls
と打ってみましょう。自分の環境では、以下のように表示されました。
There is a screen on: 23277.ttys001.hogehoge (Detached) 1 Socket in ・・・
(hogehogeは自分のパソコンの名前になると思います。1 Socket inの後の点々の部分には、このソケットが保存されている場所が表示されています。)
さて、socketの名前が一つ書いてあって、その右に(Detached)と書いてあります。これは、socketを離れていることを示します。ということで、うまくいっていますね。ちなみに、socketが無いときは、
No Sockets found in ・・・
と表示されます。
では、detachしたsocketに戻ってみましょう。今回の場合、socketの名前が、23277.tty001.hogehoge
となっているので、以下のような戻り方があります。
$ screen -r $ screen -r 23277 $ screen -r tty001 $ screen -r 23277.tty001
もちろん、23277.tty001.hogehoge
と、名前全体を書いてもいいのですが、めんどくさいです。一番上が明らかに簡単ですが、これは、socketの数が1つの時だけ可能な書き方になります。また、複数作った時に、tty001
などがかぶった場合は、3つめの書き方ではダメです。名前の、番号の部分はおそらくかぶらないので、(経験的にかぶって無いだけなので、確証はないです)2つめが割りとらくだと思います。では、次に自分で好きな名前をつけてみましょう。自分で名前をつけることのメリットは、
- 何をやっているsocketかをわかりやすくできる。
- screen -r socket-nameみたいにできるので、戻りやすい。
では、実践として、次にように打ってみましょう。
$ screen -S test
確認してみると、自分は以下の様なsocketができていました。
23440.test (Detached)
この場合、作ったsocketに戻るのには、
$ screen -r test
すればいいことになります。もちろん番号でも大丈夫です。
基本はこんな感じです。では、最後にsocketを外から消す方法を書きます。
自分で指定した名前のsocketを消したい場合は、
$ screen -S socke-name -X quit
として(scket-nameのところに消したいsocketの名前をいれます。-r
の時みたいに、番号だけとかで大丈夫です)、socketが一つしか無い場合は、
$ screen -r -X quit
とすれば消えます。
また、一気に全て消したい場合は、socketが保存されているフォルダ(screen -ls で表示させた時に、書いてある場所)の中身を全て消すとsocketを消せます。
以上、screenコマンドの使い方解説でした。