Tech Sketch Bucket of Technical Chips by TIS Inc.

今日から使えるbash/zshショートカットキー

Pocket

昨今の開発ではLinux上に開発環境を構築することも珍しくなくなりました。こういった環境で作業を行う場合、必然的にbashやzshといったシェルを使うことになるかと思います。今後の開発を加速するためにも、実際の使用例を見ながらショートカットキーを覚えていきましょう。一度覚えれば一生物なので、新しく黒い画面を使うことになった新人の方にもオススメです。

ショートカットキーの覚え方

ショートカットキーは覚えてしまえば便利なものですが、こういった記事を読むだけではなく、実際に使わないと身につかない物でもあります。いきなり全部を覚えよう、使おうとするのではなく、この記事を読んで「便利そう」と思ったものがあれば、今日のSSHセッションの中でその内の1つだけでも打ってみて下さい。

何度も使っているうちにそのキーが身に付き、考えずに指が動くようになった頃、またこの記事を見に来てもらえれば、新たな「便利そう」が見つかるかと思います。

動作確認環境

  • zsh 5.0.7
  • bash 4.1.2

カーソル移動 (Ctrl + a / e / b / f, Alt + b / f)

ショートカットキー 効果
Ctrl + a カーソル位置を先頭に移動
Ctrl + e カーソル位置を終端に移動
Ctrl + b カーソル位置を一文字左に移動
Ctrl + f カーソル位置を一文字右に移動
Alt + b 1 カーソル位置を一単語左に移動
Alt + f カーソル位置を一単語右に移動

カーソルキーはホームポジションから遠いですし、出来る限りホームポジションから手を離したくないというのは、人類すべての願いと言えるでしょう。(個人的な調査による / N=2)

1つ1つは基本的なカーソル移動ですが、使う機会の多さや他ショートカットキーとの組み合わせを考えると使いこなせるようになっておきたい所です。Ahead, End, Back, Forwardの頭文字と覚えると多少は覚えやすいかもしれませんが、カーソル移動の度に思い出しているわけにもいかないため、結局は数を打って指に覚えさせるのが一番のようです。

削除 (Ctrl + d / h / w)

ショートカットキー 効果
Ctrl + d カーソル位置の文字を削除(Deleteキー相当)
Ctrl + h カーソル位置の左の文字を削除(Backspaceキー相当)
Ctrl + w カーソル位置の左の単語を削除

Backspace / Deleteキーもホームポジションから遠いキーのため、ショートカットキーを活用していきましょう。Ctrl + wは単語単位で削除が行えますが、Linuxコマンドはスペース区切りで引数を指定する為、相性の良いショートカットとなっています。

Ctrl + dはDeleteの頭文字、Ctrl + wはWordの頭文字かと思いますが、Ctrl + hはシェルが処理しているのではなく、hが8文字目のため0x08(= Backspace)がターミナルソフトから送られているのかと思います。

(あまり使うことはないですが、同じ理由でCtrl + j/mは改行(LF/CR)、Ctrl + iはタブになります。vim使いにはおなじみのCtrl + [でESCも同じ理由ですね)

コマンド入力履歴をたどる (Ctrl + p / n)

ショートカットキー 効果
Ctrl + p 前の履歴を参照
Ctrl + n 次の履歴を参照

bash/zsh共に一度入力したコマンドはhistoryに記録されているため、以前打ったコマンドを使いたい場合には履歴をたどることができます。 Ctrl + pがPrevious、Ctrl + nがNextの頭文字になります。

使用例1: 付け忘れたsudoを付与

ここまでのショートカットキーを組み合わせて、実際の使用例を見てみたいと思います。まずはこんなシチュエーション。

yum install gcc と入力したが、sudoを付け忘れたためにエラーになってしまった場合

  1. Ctrl + pで直前のコマンドを表示
  2. Ctrl + aで先頭に移動
  3. sudoと入力してEnter

使用例1: 付け忘れたsudoを付与

全部打ったら21ストロークかかる所が、8ストロークで済みました。打ち間違いの可能性も減って一石二鳥です。

使用例2: サービスのステータスを確認して起動

service crond status と入力してステータスを確認したところ、crondが止まっているようなので、起動したい場合

  1. Ctrl + pで直前のコマンドを表示
  2. Ctrl + wstatusを削除
  3. startと入力してEnter

使用例2: サービスのステータスを確認して起動

コマンド入力履歴からの検索 (Ctrl + r / s)

ショートカットキー 効果
Ctrl + r (今の履歴位置から見て)過去の履歴から検索
Ctrl + s 2 (今の履歴位置から見て)未来の履歴から検索

Ctrl + p / nは便利ですが、ずっと昔に入力したコマンドまでCtrl + pで遡るのは効率が悪いです。そんな時はCtrl + rに続いて検索文字列を入力することで、その文字列を含んだ履歴まで遡ることができます。また、検索結果が複数ある場合は、検索中にCtrl + rを再度押すと、さらに過去の結果から検索することができるようになっています。

この機能を使う際はbash/zshの設定を変更して履歴の保持数を増やしておくのがオススメです。「だいぶ前に打ったことはあるんだけど、何だったっけな……」といううろ覚えのコマンドも引っ張りだせるため、Google検索に掛かる時間を短縮することができます。

なお、Ctrl + rは(今の履歴位置から見て)過去の履歴からのみ検索する為、Ctrl + pCtrl + rで履歴を遡っている状態で使用すると、履歴中には存在するのに検索に引っかからないことがあります。その場合はCtrl + sを使用したり、Ctrl + cで履歴の最後に戻してから再度Ctrl + rを実行してください。

使用例3: 以前表示したファイルを編集

以前表示したファイルを編集したくなった場合

  1. Ctrl + rで検索モードに入る
  2. ファイル名の一部を入力して以前のコマンドまで遡る
  3. Ctrl + aで先頭に移動
  4. Ctrl + dを3回押してcat部分を削除
  5. viと入力してEnter

使用例3: 以前表示したファイルを編集

カット&ペースト (Ctrl + k / y)

ショートカットキー 効果
Ctrl + k カーソル位置より後ろの文字列をカット(切り取り)
Ctrl + y Ctrl + kCtrl + wでカットした文字列をペースト(貼り付け)

Ctrl + k / yを使用することでカーソル位置より後ろの文字列をカット&ペースト(ヤンク)することができます。通常通りにカット&ペーストとして使うこともできますが、Ctrl + aと組み合わせてコマンドの一時保存に使うことも多いです。zshの場合はAlt + qも便利ですが、間に複数コマンドを挟めるのでこちらを使う方が多いです。

使用例4: コマンドの一時保存

mvコマンドを入力した後、実行前に移動先のディレクトリが無いことに気づいた場合

  1. Ctrl + aで先頭に移動
  2. Ctrl + kでコマンド全体を切り取りして一時保存
  3. mkdir configと入力してEnter
  4. Ctrl + yで保存しておいたコマンドを戻してEnter

使用例4: コマンドの一時保存

直前に実行したコマンド引数の再入力 (Alt + .)

ショートカットキー 効果
Alt + . 1 直前に実行したコマンドの「最後の引数」を再入力
Escを押してから.

直前に実行したコマンドに含まれる「最後の引数」を再入力することができます。引数はスペース区切りで扱われるため、例えばcp source.txt dest.txtを実行した直後にAlt + .を押すとdest.txtが入力されることになります。 !$に近い挙動ですが、Alt + .の場合は実際の値を確認・編集することができますし、押しやすいという利点もあるため、こちらをオススメします。なお、Alt + .と表記していますが、実際にはMeta + .のため、Escapeキーを押してから.キーを押すことでも同様の機能を使うことができます。

使用例をいくつか挙げておきますが、この他にも様々な場所で使用することができ、足を向けて寝られないショートカットキーです。

使用例5: 中身を確認してから削除したい

削除対象のファイルを間違えないように中身を確認してから削除したい

  1. 深い階層のファイルをcatで表示
  2. rmと入力してAlt + .

使用例5: 中身を確認してから削除したい

使用例6: コピーしたファイルを編集

コピーしたファイルを編集したい

  1. ファイルをコピー
  2. viと入力してAlt + .

使用例6: コピーしたファイルを編集

使用例7: ディレクトリを作って移動

作成したディレクトリに移動したい

  1. ディレクトリを作成
  2. cdと入力してAlt + .

ディレクトリを作って移動

履歴を辿りながらコマンドを実行 (Ctrl + o)

ショートカットキー 効果
Ctrl + o 現在の行を実行して次の履歴を表示

Ctrl + rCtrl + pと組み合わせて使用するショートカットキーです。履歴を遡っている状態でEnterキーを押すと、そのコマンドを実行した後最新の履歴に戻りますが、Ctrl + oを押した場合はコマンド実行後に次の履歴を表示してくれます。

これが便利なのがCLIツールなどを用いたテストを行う場合です。テストを行っていると、一連のコマンドを順に実行することがあるかと思います。まとめて実行してしまってよいコマンドであればシェルスクリプト化や、単純にセミコロンで区切る形にまとめることができますが、一手順毎にDBやWebブラウザから状態を確認したい場合、Ctrl + rCtrl + oの組み合わせが便利です。

使用例8: テスト手順の再実行

初回のテストで複数コマンドを流し終わった後、再試験を行いたい場合

  1. Ctrl + rを利用してテスト手順の先頭まで履歴を遡る
  2. Ctrl + oを押して手順を実行する

使用例8: テスト手順の再実行

最後に

最初に書いた内容をもう一度。ショートカットキーは実際に使わないと身につかないものです。さぁ、SSHクライアントを起動しましょう。


  1. MacOSの場合、ターミナルの環境設定で「メタキーとしてOptionキーを使用」のチェックをつける必要があります 

  2. デフォルトではCtrl + sはターミナル描画の停止に割り当てられているため、押すとフリーズしたようになってしまいます。Ctrl + qで解除できますがあまり使う機能でもないため、stty stop undefで無効化してしまっても良いと思います。 

エンジニア採用中!私たちと一緒に働いてみませんか?