Ctrl+Zを使いこなす

bashでいろいろ操作をしていると、ファイルAを開いて、次にファイルBを開いて、またファイルBを開いて……という風に同じことを繰り返すことがあるのではないでしょうか。(僕はあります)

そんな時にジョブ関係のコマンドを使いこなせると時間短縮になります。

いろいろコマンドはありますが今回は特に紹介したいものだけご紹介します。

そもそもジョブとは

ジョブはシェルから見た仕事の最小単位みたいなことを言われたりします。カーネルから見た仕事の最小単位はプロセスと言われます。どう違うかというと、例えば

# sysctl -a | grep somaxconn

というコマンドを実行すると、プロセスは’sysctl -a’と’grep somaxconn’の2つが作られます。一方、ジョブは1つのみです。

コマンド紹介

とりあえずCtrl+Zとfgは紹介したい。

何かコマンドの実行中にCtrl+Cを押すと実行を強制終了するのは多くの人が知っているかもしれません。それとは違ってCtrl+Zはコマンドの実行を中断します。中断なので、いつでも戻ってこれます。そして、fgが戻ってくるためのコマンドです。

具体的に見てみましょう。 vimでa.txtを開いてからCtrl+Zすると、

[1]+  停止                  vim a.txt

みたいな感じで出ます。この時、テキストの状態はCtrl+Zした時点から変わりません。カーソルの位置すらそのままです。 そして、別のコマンドを打ち込めるようになっています。

ここで、他のコマンドを実行してからもう一度a.txtを編集したいときは、fgというコマンドを打つだけで、中断していなかったかのように編集を再開できます。

ちなみにCtrl+Zでストックできるジョブはもちろん1つだけではありません。

2個目のジョブをCtrl+Zで中断すると

[2]+  停止                  vim b.txt

みたいに出ます。このときはfgを押してもb.txtの編集が始まるだけで、a.txtの編集を再開することは出来ません。 fg %1のように、[]の中にある数字を指定する必要があります。(この数字をジョブ番号とかいいます。) ジョブ番号なんだっけとなったときはjobsというコマンドを打つと良いでしょう。


[1]- 停止 vim a.txt [2]+ 停止 vim b.txt

みたいに確認できます。 ちなみに番号の隣に+と出ているジョブをカレントジョブと言ってカレントジョブに戻りたいときはfgを実行する時にジョブ番号の指定を省略できます。

とりあえずざっくり紹介してみました。この他にもジョブやプロセスに関して調べてみると、意外に使えるコマンドが見つかるかもしれませんよ。