初心者によるCLI（Command Line Interface）の使い方まとめ

## 初めに
このノートはJavaScriptを勉強して3ヶ月以来の振り返りであり、まだまだ勉強中の者ですので不適切な表現があればご指摘いただけると幸いです。
また、日本語と英語が混在して読みづらいと思いますが、どちらでも身につけたい能力として習慣化されるまで頑張って書いてみたいと考えています。どうかご了承ください。 #どちらもネイティブではありません

## CLI（Command Line Interface）とは（自分なりの解釈で）
ユーザが、GUI（Graphical User Interface、図形画面端末による視覚的な操作）を通さず、コンピュータが分かる言語で、直接会話する端末のことです。

### OS環境による別々のCLI名称
CLIと聞いて、
**Mac → terminal.app
Windows → cmd.exe**
が頭に浮かぶと思います。
（自分のこの分類の仕方がかなり不適切でいい加減な説明です）

OS環境が違うので、コマンドの約束語（命令の書き方）も若干違ってくるわけでもありますが、やってることほぼ一緒です。何よりも自分が身につけたい、学びたいCLIかGUIに合わせて練習を重ねれば上達になると思います！

## よく使われるコマンド一覧＆実践
筆者はWindows10でLinux系やUnix系コマンドを覚えていきたい、またGithubの使い方も早く慣れたいと思い、Git-bashをCLIとして使って練習しています。ここからGit-bashを前提として、自分が勉強中でよく使っているコマンドを紹介したいと思います。

  コマンド  |  実例  |  意味  |
:-----------|:-------|:-------|
pwd (present<br>working directory)| pwd |  現在位置を表示する。 |
ls (list segments)<br>ls -a | ls<br>ls -a |  現在位置のファイル／ディレクトリを表示する。<br>隠しファイル／ディレクトリを含めて全部(all)表示する。<br>(ピリオド始まりのファイルやディレクトリも表示。) |
cd (change directory)  | cd ディレクトリ<br>cd ..<br>cd ../..<br>cd または cd ~ | 指定したディレクトリに移動。<br>一つ上のディレクトリに移動。<br>二つ上のディレクトリに移動。<br>ルートディレクトリに移動。 | 
touch | touch ファイル名/ディレクトリ名<br>touch ファイル名 | ファイルかディレクトリの、最終更新時刻を変更できる。<br>同じ名前のファイルが存在しない場合、今のディレクトリに新しいファイアを作成することになる。（touchでディレクトリを作成できません） |
rm (remove) | rm ファイル名 | 指定したファイルを削除する。 |
mkdir (make directory) | mkdir ディレクトリ名 | 新しいディレクトリを作成し名前を付ける。|
rmdir (remove directory) | rmdir ディレクトリ名 | 指定したディレクトリ削除。（削除したいディレクトリにいる、または中にファイルが入ってる状態は削除できません。）|
rm -f (remove -force)<br>rm -r (remove -recursive)<br>rm -rf (remove -recursive force) | rm -f ファイル名<br><br>rm -r ディレクトリ名<br><br>rm -rf ディレクトリ名 | 保護されているファイル、確認なしで強制的に削除。<br>**再帰的にディレクトリ（ディレクトリツリー）ごと削除する。（使用上要注意）<br>再帰的にディレクトリ（ディレクトリツリー）ごと確認なしで強制的に削除する。（使用上要注意）** |
mv (move) | mv ファイル名 新しい位置<br>mv ファイル名 新しいファイル名 | ファイルを移動させる。<br><br>移動先を指定しない場合は、ファイルの名前を変更するようになる。 |
man (manual) | man コマンド | 特定のコマンドに関するマニュアルを呼び出す。読み終わったらqで出ることができる。<br>(注意書き：Git-bashにはこのコマンドがありません。別の方法でインストールできるが、ここでは省略させていただきます。) |
clear | clear | CLIの画面をクリアする。 |
echo | echo “任意文字” | 任意文字をCLI画面に出力する。 |
'>' (redirection) | echo “任意文字” > ファイル名<br>echo “任意文字” >> ファイル名 | ファイル内容を任意文字で上書きする。<br><br>元の内容を上書きせず一番後ろから挿入する。<br>(append to the end of file) |
cat (catenate) | cat ファイル名 | ファイル内容を出力する。（内容を確認するためによく使われる） |
grep (g/RE/p) | grep キーワード ファイル名 | 特定のファイルから、キーワードと一致した内容をCLI画面に表示させる。 |

## コマンドの組み合わせ技－|(pipe)

```
$ ls | grep 1
'意味：lsで一覧したファイルの中から、”1”というキーワードを含めたファイル名だけ表示させる。'
```
```
$ cat test.txt | grep 1 > result.txt
'意味：test.txtの中から、”1”というキーワードを含めたところ（通常は行単位）を取り出して、
result.txtというファイルに導く(redireciton)。
（出力先(redireciton)のファイルが存在しなかったら新しいファイルを作成する）'
```

## 現段階ではあまり使わないけど結構有用なコマンド
### wget（ダブルゲット）
```
$ wget URL
'意味：指定したURLにアクセスしてファイル、ソースコードなどをダウンロードする。
（注意書き：Git-bashにはこのコマンドありません。詳細は参考資料へ）'
```

### curl
```
$ curl URL
'意味：URLのサーバ側にリクエストを送信し、GETしたらデータがリスポンスされる。'
$ curl URL -I
'意味：HTTPのヘッダーを見る。'
```

## キーボードでの実用技
一般のGUIではコピペの指令が「Ctrl + C / Ctrl + V」ですが、**CLIでは「Ctrl + C」は実行しているコマンドから中断するという意味です**。マウスポインタ（カーソル）でコピーしたい文字を選択して、そして右クリックしてもよいのですが、
**Ctrl + Insert　：コマンドメッセージのコピー。
shift + insert　：コピーしたメッセージをペスト。**
この二つを使えば、何度もポインタで選択しなくてもコピペできます。（最初だけ）

また、過去に使ったコマンドをチェックしたいとき、
**上方向キー↑**
押せばいいです！

## 初心者によるCLIコマンド実践編
  心の声  |  関連コマンド  |  実例  |
:---------|:---------------|:-------|
プロジェクトファイルを管理するために<br>二つのディレクトリを設置する | mkdir | mkdir folder1<br>mkdir folder2 |
まず一つ目のディレクトリに移動しよう。 | cd | cd folder1 |
試しにテキストを設置してみる。<br>（二つ作成して以下のコマンドに使う） | touch | touch hello1.txt<br>touch hello2.txt |
先設置したファイル、または今のディレクトリに<br>隠しファイル入ってるかどうか、リストで見たい。 | ls | ls -a |
やっぱり一つ目のファイルをなしに、削除する。 | rm | rm hello1.txt |
二つ目のファイルをコピーしてほかに移動させたいので、まずコピーをして新しい名前を付ける。 | cp | cp hello2.txt hello3.txt |
（暫く作業して...） | - | - |
新しいファイルを作って別のディレクトリに移動させたいけど、毎回少しずつ移動するの面倒だ... | touch | touch test1.txt<br>touch test2.txt |
現在位置がわかった。マウスポインタ―で位置を表示した文字を選択して、**ctrl + insertを使ってコピー、使う時shift + insertでペスト！** | pwd | pwd |
**相対パスと<br>絶対パス**を使ってみる。 | mv | mv test1.txt ../folder1<br>mv test2.txt /User/folder1 |
ディレクトリの間でも**相対パスか絶対パス**を使ったら楽です。 | cd | cd ../folder1<br>cd /User/folder1 |
一つ上の階層のディレクトリに移動 | cd | cd .. |
プロジェクトも終わったし、二つ目のディレクトリもう使わないから削除しよう。 | rmdir | rmdir folder2 |
(中にまだhello3.txtが残っててemptyじゃなかったので削除できませんでした) | - | - |
いちいちrmで入れるのが面倒くさいー、フォルダ丸ごと削除してほしいな...やっぱりあの必殺技使うしかない！よし、できた！ | rm -r | rm -r folder2 |
（↑注意書き：慎重に考えてからこのコマンドを使ってください。） | - | - |


## ほかにGitbashで使われるコマンドリソース（あくまでも参考）
https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058

コマンドでも一つ一つのプログラムでできたので、ほかの場所からダウンロードして取り付けることができます。（CLI自体はコマンドプログラムたちの組み込みシステムインタフェースです）