Bashのコマンドライン操作 -- 知っていると作業が捗るかもしれないコマンド選

#はじめに
本記事はターミナルでのコマンドライン操作が少しでも捗るように、よく使うコマンドを紹介しています。
shellはBashで、Emacsモードでのコマンドライン操作を想定しています。なので、いつもVimモードなんだけれどという方には、この記事は役に立たないかもしれないので、回れ右をしてそっと閉じて頂いたほうが良いかもしれません。
記述内容で何か間違いがありましたら、ご指摘をよろしくお願いします。

#環境
- Bashのバージョン:4.4.19(1)-release (x86_64-pc-linux-gnu)
- Windowsのキーボードを使用

#用語解説
Bashとは何ぞやEmacsとは何ぞやという方もおられると思うので、まずは軽く用語解説をします。

##Bashとは
Bashはshellです。
じゃあ、shellってなんだよって話ですよね。
shellはユーザーとOSをつなぐインターフェースです。ユーザーがOSに何か命令したい時(ファイル操作etc)、shellを介してOSに命令するということです。
shellの詳細な説明は以下の記事にお任せしたいと思います。

- [シェル--コトバンク](https://kotobank.jp/word/%E3%82%B7%E3%82%A7%E3%83%AB-4083)
- [初心者が調べた。shellとは](https://qiita.com/ycoda/items/87d23b818cb06ba1c348)

##Emacsとは
Emacsはエディタです。
でも、今回の記事は、エディタとしてのEmacsの紹介というよりはターミナルのコマンドライン操作でEmacsモードでのコマンドを紹介したいと思います。
ターミナルのコマンドライン操作は、以下のような画面でBashと対話的にコマンド操作することを指しています。そして、Emacsモードではコマンドライン操作でもEmacsのコマンドを使用できます。
![bash1](https://cl.ly/28eafe88fc34/Image%202018-10-28%20at%208.43.43%20AM.png)

また、コマンドライン操作はBashのデフォルト設定でEmacsモードであり、以下のコマンドでEmacsモードとVimモードを切り替えることができます。

```bash
$set -o emacs #Emacsモードに切り替える
$set -o vim   #Vimモードに切り替える
```

前置きはこれぐらいで、さっそくコマンドの紹介をしてゆきたいと思います。

#履歴操作
コマンドライン操作で最も使うであろうと言っても過言ではないのは履歴操作かと思います。
以前に実行したコマンドを呼び出したり、検索するコマンドです。
以前実行したコマンドを再度実行したかったり、以前実行したコマンドの一部だけを変えて実行したかったりする時に便利です。

**履歴操作**

| コマンド          |コマンド内容        |
|:-----------------|:------------------|
| "↑"または"Ctr+P"|履歴を前に移動する|
| "↓"または"Ctr+N"|履歴を後ろに移動する|
| "Ctr+R"|履歴を検索する|
※"↑""↓"はそれぞれキーボードの上下矢印、"Ctr"はControlキーを指します

"↑""↓"で今までコマンドラインで実行したコマンドを1つずつ、前後に移動して表示します。ですが、長時間作業していると実行コマンドも大量になるので、"↑""↓"で1つずつ移動して目的のコマンドを探し出すのはメンドクサイものです。そんな時には"Ctr+R"で履歴の検索が便利です。"Ctr+R"と実行すると、以下のような表示がコマンドラインにされます。

```
(reverse-i-search)`':
```

そうしたら、検索したいワードを入力すると、履歴からキーワードと一致するコマンドの一つが表示されます。そのコマンドが目的のコマンドであれば、そのまま実行すれば良いのですが、そうでない場合はさらに詳細なキーワードを追加するか、もう一度"Ctr+R"を実行することでキーワードに一致する別なコマンドが表示されます。"Ctr+R"は目的のコマンドが表示されるまで連続して実行できます。

#カーソル移動/文字削除
ターミナルでのコマンドライン入力はカーソルを起点として、文字を入力すると思います。ターミナルの種類よるかもしれませんが、カーソルを移動させたい時にその部分をマウスでクリックしたとしても単純にカーソルは移動してくれません。そんな時にカーソル移動のコマンドを知っていると便利です。
また、入力は往々にして間違えるもので、そんな時に削除コマンドも合わせて覚えておくと便利です。
カーソルは、以下の画面では白い四角のことを指しています。
![bash2](https://cl.ly/a8cf16b13bd5/Image%202018-10-28%20at%208.40.32%20AM.png)

**カーソル移動**

| コマンド          |コマンド内容        |
|:-----------------|:------------------|
| "←"または"Ctr+B"|カーソルを左へ移動する|
| "→"または"Ctr+F"|カーソルを右へ移動する|
| "Ctr+A"|カーソルをコマンドラインの先頭へ移動する|
| "Ctr+E"|カーソルをコマンドラインの末尾へ移動する|
| "Esc+B"|カーソルを1ワード左へ移動する|
| "Esc+F"|カーソルを1ワード右へ移動する|
※"←""→"はそれぞれキーボードの左右矢印、"Ctr"はControlキー、"Esc"はEscapeキーを指します

**文字削除**

| コマンド          |コマンド内容        |
|:-----------------|:------------------|
| "Backspace"|左に1文字削除する|
| "Ctr+D"|右に1文字削除する|
| "Esc+Del"|左に1ワード削除する|
| "Esc+D"|右に1ワード削除する|
| "Ctr+K"|カーソルの位置から末尾まで削除する|
※"Ctr"はControlキー、"Esc"はEscapeキーを指します

「ワード」について補足しておきたいと思います。
「ワード」は1文字以上の英数字の連続と定義します。
以下の画面のようなコマンドを例にします。

![bash2](https://cl.ly/a8cf16b13bd5/Image%202018-10-28%20at%208.40.32%20AM.png)

この状態で"Esc+B"を実行すると、ワードの定義から「/」はワードとみなされず、そのすぐ右の「s」までがワードとなり、以下の画像のようにカーソルが移動します。

![bash3](https://cl.ly/89cd658ef486/Image%202018-10-28%20at%208.48.43%20AM.png)

また、上記の画像の状態から"Esc+B"を再度実行すると、カーソルすぐ左の「/」はワードではないので、無視されてさらに左の「d」までがワードとなり、以下の画像のようにカーソルが移動します。

![bash4](https://cl.ly/6e5edd8850a5/Image%202018-10-28%20at%209.10.35%20AM.png)

#テキスト補完
テキスト補完は、あるコマンドやディレクトリ名,ファイル名の頭数文字を入力した時に(場合によっては入力しなくても)、テキスト補完コマンドを実行すると該当するコマンドやディレクトリ名,ファイル名を補完してくれたり、一覧を表示してくれたりします。
コマンドを入力していて、あのコマンドの完全なスペルを思い出せないとか、ファイル操作でディレクトリ名やファイル名を思い出せないといった状況の時に便利です。

**テキスト補完**

| コマンド          |コマンド内容        |
|:-----------------|:------------------|
| "Tab"|標準的な補完を行う|
| "Esc+?"|補完候補の一覧を表示する|
| "Esc+/"|ディレクトリ名やファイル名の補完を行う|
※"Esc"はEscapeキーを指します

"Tab"の補完はコマンドでもディレクトリ名,ファイル名でも万能に補完してくれます。
一方で補完したいのがディレクトリ名,ファイル名と明確にわかっている場合には、"Esc+/"を実行した方が補完の精度が上がると思います。
また、補完候補が複数ある場合には、補完コマンドを実行しても完全に補完されないことがあります。その場合には、もう一度同じ補完コマンドを実行することで補完候補の一覧を表示してくれます。そういった場合にも"Tab"と"Esc+/"を使いわけておけば、表示される補完候補の一覧を絞ることができるので、"Tab"と"Esc+/"の使いわけは少し意識しておいた方が良いかもしれません。

#おわりに
記事の内容は以上です。
閲覧をありがとうございました。