Linux をコマンドで操作するときは、キーボードのショートカットキーを覚えておくと、作業効率が上がります。この記事では、Ctrl キーを使う、よく使うショートカットキーをまとめます。
カーソルの移動や文字の削除は、bash がコマンドラインの編集に使っている readline の機能です。標準では、Emacs に似たキーの割り当てになっています。また、処理の停止(Ctrl + C)と中断(Ctrl + Z)は、端末(ターミナル)の機能で、実行中のプロセスに対して働きます。
Ctrl + A、Ctrl + E、Ctrl + F、Ctrl + Bで、カーソルを行の先頭、最後、右、左へ動かせることCtrl + D、Ctrl + H、Ctrl + U、Ctrl + K、Ctrl + Wで文字を削除でき、U・K・Wで削除した文字はCtrl + Yで貼り付けられることCtrl + Cは処理の停止、Ctrl + Zは処理の中断(一時停止)で、中断した処理はjobsとfgで再開できること
カーソルの移動
コマンドを入力している行の中で、カーソルを動かすキーです。長いコマンドの途中を直したいときに、矢印キーを何度も押さずに移動できます。
Ctrl + A (カーソルを行の先頭へ移動)
カーソルが行の先頭に移動します。Aは、アルファベットの最初の文字なので、行の最初と覚えます。
Ctrl + E (カーソルを行の最後へ移動)
カーソルが行の最後に移動します。Eは、End(最後)と覚えます。
Ctrl + F (カーソルを右側へ移動)
カーソルが右側に1文字移動します。Fは、Forward(前へ)と覚えます。右矢印キーと同じ動きです。
Ctrl + B (カーソルを左側へ移動)
カーソルが左側に1文字移動します。Bは、Backward(後ろへ)と覚えます。左矢印キーと同じ動きです。
文字の削除
カーソルの位置を基準に、文字を削除するキーです。削除したあとの扱いが、キーによって2種類に分かれます。Ctrl + U、Ctrl + K、Ctrl + W は、削除した文字を記憶(キルリング)に残すので、あとから Ctrl + Y で貼り付けられます。Ctrl + D と Ctrl + H は、記憶に残さない削除です。
Ctrl + D (カーソルされた文字を削除)
カーソルされていた文字を削除します。Dは、Delete(削除)と覚えます。
何も入力していない行(プロンプトだけの状態)で Ctrl + D を押すと、シェルが終了します。ssh でログインしている場合は、ログアウトして接続が切れます。
Ctrl + H (カーソルの左側にある文字を削除)
カーソルの左にある文字を削除します。Backspace キーと同じ動きです。こじつけですが、Hidari(左側)と覚えます。
Ctrl + U (カーソルの左から行頭まで削除)
カーソルの左部分から行頭までの文字が削除されます。カーソルの位置の文字は残ります。イギリス(UK)で、Uは左側と覚えます。
Ctrl + K (カーソル文字含め、右から行末まで削除)
カーソルの右側を、カーソルされた文字を含めて、行末まで削除します。イギリス(UK)で、Kは右側と覚えます。
Ctrl + W (直前の1単語を削除)
カーソルの左から、前のスペースまでを削除します。これにより、直前の1単語を削除できます。WはWord(単語)と覚えます。
Ctrl + W は、スペースで区切られた部分を1単語として扱います。そのため、/usr/local/bin のようなパスは、全体が1単語として削除されます。/ などの記号で区切って、1つずつ削除したいときは、Alt + Backspace を使います。
Ctrl + Y (直前に削除した文字を貼り付け)
直前に削除した文字を、カーソルの位置に貼り付けます。Yは、Yank(引っ張り出す)と覚えます。Ctrl + U、Ctrl + K、Ctrl + W で削除した文字が対象なので、消しすぎたときに戻せます。
Ctrl + D と Ctrl + H で削除した文字は、貼り付けられません。また、Ctrl + Y は「元に戻す」操作ではありません。入力や削除を取り消したいときは、Ctrl + X に続けて Ctrl + U を押します。
Ctrl + L (ターミナルのクリア)
(ごちゃごちゃした)ターミナルの表示をクリアします。LはcLear(クリア)と覚えます。
処理の停止・中断
実行中のコマンドを止めるキーです。これらは、bash のコマンドラインの編集ではなく、端末が受け取って、実行中のプロセスに伝えます。
この記事の画面は、実際の画面ではなく、実行時の画面から見るポイントを抜き出して描いたイメージです。長い出力は途中を省略しています。
Ctrl + C (処理を停止)
処理を停止(キャンセル)します。次の画面のとおり、ping を実行すると、処理がずっと継続します。このような場合に、Ctrl + C で処理を停止させます。
$ ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=105 time=2.42 ms64 bytes from 8.8.8.8: icmp_seq=2 ttl=105 time=2.52 ms…64 bytes from 8.8.8.8: icmp_seq=8 ttl=105 time=2.49 ms1^C--- 8.8.8.8 ping statistics ---28 packets transmitted, 8 received, 0% packet loss, time 7012msrtt min/avg/max/mdev = 2.428/2.477/2.528/0.032 ms
Ctrl + C で ping を停止する(実際の画面ではなく、表示内容のポイントを示したイメージです。途中の行は省略しています)| No. | 表示 | 意味 |
|---|---|---|
| 1 | ^C | Ctrl + C を押した位置。ping が停止して、シェルのプロンプトに戻る |
| 2 | 8 packets transmitted, 8 received | 停止するまでに、送信したパケットの数と、受信した数。ping は、停止したときに統計を表示する |
Ctrl + Z (処理を中断)
処理を中断(一時停止)します。Ctrl + C と違い、中断した処理を再開できます。次の画面のとおり、ping を実行し、処理を中断させます。
$ ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=105 time=2.39 ms64 bytes from 8.8.8.8: icmp_seq=2 ttl=105 time=2.44 ms…64 bytes from 8.8.8.8: icmp_seq=8 ttl=105 time=2.50 ms1^Z2[1]+ 停止 ping 8.8.8.8
Ctrl + Z で ping を中断する(実際の画面ではなく、表示内容のポイントを示したイメージです。途中の行は省略しています)| No. | 表示 | 意味 |
|---|---|---|
| 1 | ^Z | Ctrl + Z を押した位置 |
| 2 | [1]+ 停止 ping 8.8.8.8 | ping 8.8.8.8 が、ジョブ番号 1 として停止(中断)した。処理は終了せずに、シェルに残っている |
jobs コマンドを実行すると、今、一時停止しているジョブと、その番号が表示されます。
1$ jobs2[1]+ 停止 ping 8.8.8.8
jobs コマンドで、停止しているジョブを確認する(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | jobs | シェルが管理しているジョブの一覧を表示するコマンド |
| 2 | [1]+ 停止 ping 8.8.8.8 | ジョブ番号 1 として、ping 8.8.8.8 が停止していることを確認できる。+ は、現在のジョブを表す |
番号 1 として、ping 8.8.8.8 のジョブが停止していることを確認します。このジョブを再開するには、fg コマンドを実行します。fg は、フォアグラウンド(foreground)の略です。ジョブ番号は、fg 1 のように指定します。%1 の形でも指定できます。
1$ fg 1ping 8.8.8.864 bytes from 8.8.8.8: icmp_seq=9 ttl=105 time=2.43 ms264 bytes from 8.8.8.8: icmp_seq=10 ttl=105 time=2.46 ms64 bytes from 8.8.8.8: icmp_seq=11 ttl=105 time=2.47 ms64 bytes from 8.8.8.8: icmp_seq=12 ttl=105 time=2.45 ms
fg 1 でジョブを再開する(実際の画面ではなく、表示内容のポイントを示したイメージです)| No. | 表示 | 意味 |
|---|---|---|
| 1 | fg 1 | ジョブ番号 1 を、フォアグラウンドで再開する |
| 2 | icmp_seq=10 など | 中断前の続き(icmp_seq=9 から)で、ping 8.8.8.8 が再開された |
中断したジョブは、fg のほかに、bg コマンドで、バックグラウンドで再開することもできます。バックグラウンドで動かしたジョブは、jobs で確認できます。
まとめ
カーソルの移動と文字の削除は、bash の編集機能(readline)のキーです。処理の停止と中断は、端末が実行中のプロセスに伝えるキーです。まず、よく使う Ctrl + A、Ctrl + E、Ctrl + C、Ctrl + L から覚えると、すぐに作業が楽になります。
| キー | 動作 | 覚え方 |
|---|---|---|
Ctrl + A | カーソルを行の先頭へ移動 | アルファベットの最初 |
Ctrl + E | カーソルを行の最後へ移動 | End |
Ctrl + F | カーソルを1文字右へ移動 | Forward |
Ctrl + B | カーソルを1文字左へ移動 | Backward |
Ctrl + D | カーソルの文字を削除(空の行ではシェルが終了) | Delete |
Ctrl + H | カーソルの左の文字を削除(Backspace と同じ) | Hidari(左側) |
Ctrl + U | カーソルの左から行頭までを削除(貼り付け可) | UK のU(左側) |
Ctrl + K | カーソルの文字から行末までを削除(貼り付け可) | UK のK(右側) |
Ctrl + W | 直前の1単語を削除(貼り付け可) | Word |
Ctrl + Y | 直前に削除した文字を貼り付け | Yank |
Ctrl + L | ターミナルの表示をクリア | cLear |
Ctrl + C | 実行中の処理を停止 | ― |
Ctrl + Z | 実行中の処理を中断(fg で再開) | ― |
コメント