超初心者向け Command Line の書き方

コマンドラインは開発をする上で必須のツールです。
コマンドと呼ばれる命令を使うことで、コンピュータに様々なプログラムを実行させることができます。


コマンドラインとは、普段パソコンをGUI(Graphical User Interface)で操作をするのに対して、CUI(Character-based User Interface)でパソコンを操作するためのものです。Macでは、Terminalというアプリがデフォルトでインストールされていて、そこにコマンドを書いて操作することができます。

[英語のコマンドライン説明動画](https://www.youtube.com/watch?v=uwAqEzhyjtw)

## [Anki](https://apps.ankiweb.net/)
Ankiを使って復習できるようにしました。よかったら試してみてください。
[Anki Deck](https://ankiweb.net/shared/info/2127679460)


## ファイルの作成

ファイルを作成するには、`touch`コマンドを使います。
`touch ファイル名`と入力して実行することで、空のファイルを作成することができます。
コマンドは入力した後にEnterキーを押すことによって、実行することができます。

```
~$ touch sample.txt
```
と入力して、Enterキーを押すと`sample.txt`ファイルが作成されます。行頭の`~$`は、初めから入力されているので、入力する必要はありません。

## ファイルの中身を表示する

`cat`コマンドでファイルの中身を表示することができます。
`cat`コマンドは`cat ファイル名`と入力することで使うことができます。

**補完機能**
コマンドラインには補完機能があります。ファイル名やフォルダ名を入力するときにファイル名の入力途中にTabキーを押すことで、残りのファイル名を補完してくれる機能です。

```
~$ cat sample.txt
catコマンドはファイルの中身を
表示するコマンドです。
ここにファイルの内容が表示されます。
```

## ディレクトリを作成する

コマンドラインではフォルダをディレクトリと呼びます。
ディレクトリを作成するには、`mkdir`コマンドを使います。
`mkdir`コマンドは`mkdir ディレクトリ名`と入力することで使うことができます。

```
~$ mkdir sample
```
`mkdir -p`と`p`オプションを使うと一気に中の階層のディレクトリまで作ることができます。
```
~$ mkdir -p sample/css
```
`sample`ディレクトリが作られ、その中に`css`ディレクトリが作られます。

## ディレクトリの移動

ディレクトリを移動するためには`cd`コマンドを使います。
`cd ディレクトリ名`とすることで、指定したディレクトリに移動することができます。
`$`の左にはカレントディレクトリが表示されています。

```
~$ cd sample
```

## カレントディレクトリの確認
1番親のディレクトリにルートディレクトリがあります。ルートディレクトリは`/`で表されます。
`pwd`コマンドを実行すると、ルートディレクトリからカレントディレクトリまでの階層が全て表示されます。

```
~$ pwd
/home/sample
```

## ディレクトリの中身を表示する
ディレクトリの中身を確認するには、`ls`コマンドを使います。

```
~$ ls
sample.txt sample
```

## 1つ親のディレクトリ

1つ親のディレクトリに移動したい場合のコマンドは`cd ..`を実行する。
```
~$ cd ..
```

## ホームディレクトリ
cdコマンドでは、ディレクトリを指定せずに`cd`のみで実行すると、ホームディレクトリに移動することができます。
```
~$ cd
```

## ファイル・ディレクトリを移動させる/変更する
### ファイルを移動させる
ファイルを移動させるには、`mv`コマンドを使います。`mv ファイル名 ディレクトリ名`とすることで指定したディレクトリにファイルを移動させることができます。

```
~$ mv sample.txt sample
```

### ディレクトリごと移動させる
`mv ディレクトリ名 ディレクトリ名`とすることで指定したディレクトリにディレクトリごと移動させることができます。
``` mv home sample
```

### ファイル名・ディレクトリ名を変更する
`mv ファイル名 新しいファイル名`とすることでファイル名を、`mv ディレクトリ名 新しいディレクトリ名`とすることでディレクトリ名を変更できます。
```
~$ mv sample.txt new.txt

~$ mv sample new
```
## ファイル・ディレクトリのコピー
### ファイルのコピー
`cp コピーするファイル名 新しいファイル名`とすることでコピーすることができます。
```
~$ cp new.txt copy.txt
```
### ディレクトリのコピー
`cp -r コピーするディレクトリ名 新しいディレクトリ名`とすることでコピーすることができます。
```
~$ cp -r new copy
```

## ファイル・ディレクトリの削除
### ファイルの削除
`rm ファイル名`とすることで削除できます。
```
~$ rm copy.txt
```

### ディレクトリの削除
`rm ディレクトリ名`とすることで削除できます。
```
~$ rm -r copy
```

## コマンドの履歴
コマンドラインでは、過去に実行したコマンドを上矢印キー`↑`で入力することができます。

`rmdir　ディレクトリ名`でも削除できますが、中にファイルが入っているとできません。中身が空の状態で、削除することができます。

`以下編集中`
---

## 日時を表示する
`date`を使うと日時を表示できます。

```
~$ date
```
## カレンダーを表示する
`cal`を使うとカレンダーを表示できます。
```
~$ cal
```
## コマンドを実行しない
`Ctrl` + `C`でコマンドを実行せずに次のプロンプトに移ることができます。
```
~$ cal ^c
~$ 
```
## コマンドをクリア
`Ctrl` + `U`でコマンドをクリアできます。
```
~$
```
## 画面全体をクリアする
`clear` + `Enter` または、`Ctrl` + `L`で画面全体をクリアできます。
```
~$
```

## ルートディレクトリに移動する
`cd /`とするとルートディレクトリに移動できます。
```
~$ cd /
/$
```
## etcディレクトリに移動する
`et`と打った後に`tab`キーを押すと、`etc`と補完してくれます。他のディレクトリやファイル名でもすでにその階層に存在しているものは、`tab`キーの補完が効きます。打ち間違えの回避、時間短縮になるのでぜひ活用してみましょう！
```
/$ cd /etc
/etc$
```
## 一覧を表示する
`cd /`を打って、`tab`キーを2回押すと一覧が表示されます。その階層のディレクトリやファイルを確認するのに便利です。`ls`キーでも確認することができますが、状況によって使い分けるといいと思います。

## homeからetcに移動する
`../../`で２つ上の階層に行って、`etc`で一つ下の階層の`etc`ディレクトリに移動する。`../`は、相対パスで、一つ上の階層にいくときに使います。直接`etc`などディレクトリを入力すると一つ下のその名前のディレクトリに移動することができます。
```
~$ cd ../../etc
/etc$
```

## 隠しファイルを表示する
`ls -a`とすると`.`から始まる隠しファイルを表示することができます。
```
~$ ls -a
```
`ls -al`とするとより詳細な情報が表示できます。順不同で、続けて描いても描かなくてもいいので、`ls -la`、`ls -l -a`でも同じ結果になります。
```
~$ ls -al
```
`ls -al /etc/`とすると`etc`ディレクトリの詳細な情報を見ることができます。
```
~$ ls -al /etc/
```
## `ls`のオプションを表示する
`ls --help`とすると`ls`のオプションを一覧で確認することができます。
```
~$ ls --help
```
`ls -alS`とするとファイルのサイズ順に並べて表示することができます。
```
~$ls -alS
```

## マニュアルを表示する
`man ls`とすると`ls`コマンドについての詳細な説明を表示することができます。`space`キーで次のページへ、`q`キーで終了させることができます。
```
~$ man ls
```

## ワイルドカードを使う
`ls -l *.conf`とすると`.conf`を含むファイルのみを表示させることができます。

```
~$ ls -l *.conf
```
`ls -l s?????`とすると`s`で始まる6文字のファイルを表示させることができます。

```
~$ ls -l s?????
```
`ls -l [ps]?????`とすると`p`か`s`で始まる6文字のファイルを表示させることができます。

```
~$ ls -l [ps]?????
```
`ls -l [f-h]*`とすると`f`,`g`,`h`で始まるファイルを表示させることができます。

```
~$ ls -l [f-h]*
```
`ls -l {sh,ho}*`とすると`sh`か`ho`で始まるファイルを表示させることができます。

```
~$ ls -l {sh,ho}*
```

## シンボリックリンクを作る
`ln -s`を使うとシンボリックリンクを作ることができます。
```
~$ mkdir -p mysite/css/common
```
として、複数階層のディレクトリを作った場合、毎回一番下の階層にアクセスするのは大変です。そこで、
```
~$ ln -s mysite/css/common mycommon
```
とすることで、`mycommon`というシンボリックリンクを作ります。

```
~$ ls -l
```
すると`mycommon`が作られていることがわかります。
これで、`mysite/css/common`の中に`common.css`ファイルを作る場合、
```
~$ touch mycommon/common.css
```
とすれば、`mysite/css/common`の中に`common.css`ファイルが作られます。

シンボリックリンクを削除する場合は、通常通り`rm mycommon`として消すことができます。


私は下記のProgateとdotinstallというサイトで、基礎を勉強しました。この記事では、コマンドラインの基本的な記法を紹介したいと思います。

https://prog-8.com/lessons/commandline/study/1

プロゲートでは、基本的なコマンドを勉強することができます。

https://dotinstall.com/lessons/basic_unix_v3

ドットインストールでは、さらに詳しく勉強できます。
最初にプロゲートでコマンドに慣れてから、ドットインストールで勉強することをお勧めします。

https://dotinstall.com/lessons/basic_shellscript_v2

https://dotinstall.com/lessons/basic_vim

https://dotinstall.com/lessons/basic_emacs