改めてLinuxコマンドを理解する[mkdir,rmdir,rm編]

## はじめに
ITスクールRareTECHでCS（Customer Support）を担当している池村です！
今回はディレクトリを作成したり、消したりするコマンドを解説します。こちらの記事は『改めてLinuxコマンドを理解する③[cat,touch,echo編]』の続きとなっています。もしよかったら順番に見ていただけると嬉しいです。

https://qiita.com/ikemura-ren/items/85fc8bc46d286cca3e01?1


※こちらの記事は完全に初心者向けに執筆しています。

## `mkdir`コマンド
まずは`mkdir`コマンドからご紹介します。これはシンプルにディレクトリを作成するコマンドですね。早速使い方を見ていきましょう。
```Bash:使い方
mkdir ディレクトリ名
```
ディレクトリ名は大体なんでも大丈夫です。
実際の実行結果が以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/977335aa-a59c-02fe-94a1-213f731b7453.png)

実際に中に入ってみましょう。ディレクトリの中身も確認。
```Bash:作成したディレクトリに入る
cd test && ls
```

現状は何も表示されないと思います。（細かく言うと親ディレクトリと今いるディレクトリの情報はあります）

ここで紹介した`&&`は、左のコマンドが問題なく実行されたら右のコマンドを実行してくれる便利な演算子です。

次に複数ディレクトリを一気に作成してみます。
```Bash:使い方
mkdir test1 test2 test3 && ls
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/3bb02435-74b8-eea8-2a47-4fee94a5e187.png)

全て作成されていることが確認できます。

mkdirのオプションについて
| **オプション**     | **説明**                                                                 |
|--------------------|--------------------------------------------------------------------------|
| `-p`              | 親ディレクトリが無い場合に、一緒に親ディレクトリも作成する。   |
| `-v`              | 作成したディレクトリの情報を表示する                                 |
| `-m`     | 作成するディレクトリのパーミッションを指定する           |

パーミッションについてはここまでの記事で出てきていないので一旦置いておいて、`-p`と`-v`だけ見ていきましょう。まずはあまり使うことのない`-v`から使っていきます。

### `-v`オプション
```Bash:-vの使い方
mkdir -v ディレクトリ名
```
これを実行すると、『このディレクトリ作ったよ〜』と教えてくれます。ここで画面に表示される内容はLinuxやMacではそれぞれ違いそうですね。
Alpine Linuxで試した際のメッセージ👇
`created directory: 'test'`
Macで試した際のメッセージ
`test`

Macはメッセージというかディレクトリ名だけ投げられて、淡白だなぁという感想です。

### `-p`オプション
```Bash:-pの使い方
mkdir -p 親ディレクトリ名/子ディレクトリ
mkdir -p test/test1
```

この`-p`を使わないと、階層を跨いで一気にディレクトリを作ることはできません。（親ディレクトリが無い場合です）これはよく使うオプションだと思って大丈夫です。
私の環境ではこんな形で作られています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/57ed9360-f904-0023-928d-3bdd19a0d2a2.png)

## `tree`コマンド
せっかくなので`tree`コマンドについても少しだけご紹介します。
これは階層を綺麗に表示してくれるコマンドです。ただ最初からPCに入っている訳ではないので、インストールは必要です。
それぞれディストリビューションに合わせてインストールしてください。一部載せておきます。
```Bash:Debian/Ubuntu系の場合
sudo apt-get install tree
もしくは
sudo apt install tree
```

```Bash:Red Hat/CentOS系の場合
sudo yum install tree
```

```Bash:Macの場合
brew install tree
```

:::note warn
※Windowsにも`tree`コマンドはありますが、微妙に挙動が違う別のコマンドです。こちらの`tree`コマンドを使いたい場合はWSLをご利用ください。
:::


```Bash:treeコマンドの使い方
tree
```
だけで使えます。ただホームディレクトリなどでそのまま`tree`を使うとすごい量の出力がありますので、オプションを使って調整もできます。よく使うものだけご紹介します。

### `-L`（指定した数字の分だけの階層を表示）
例えば
```Bash:-Lの使い方
tree -L 2
```
上記の場合、今いるディレクトリから見て2階層分の一覧が表示されます。
他に使うとしたら、`-a`で隠しファイル・ディレクトリを出したり、`-d`でディレクトリだけ出したりといったところでしょうか。使いやすいコマンドですので、興味がありましたら深ぼってみてほしいです。


## `rmdir`コマンド
このコマンドは空のディレクトリを消すコマンドです。正直いってほぼ使わないです。この後紹介する`rm`コマンドをよく使うので。
```Bash:rmdirコマンドの使い方
rmdir ディレクトリ名
```
:::note warn
ただ、たくさんあるディレクトリの中から空のディレクトリを削除する際、`rm`コマンドでまとめて削除しようとするのは若干危険です。間違って大事なファイルが入ったディレクトリを指定した場合、`rmdir`の方がより安全と思ってください。
:::


## `rm`コマンド
`rmdir`のかわりによく使うのが`rm`コマンドです。
これはファイルを消すためのコマンドですが、オプションを使えばディレクトリもその中身のファイルごとまとめて削除が可能です。

```Bash:rmコマンドの使い方
rm ファイル名
```
`rm`コマンドのオプションについて
| **オプション**  | **説明**                                                                 |
|-----------------|--------------------------------------------------------------------------|
| `-r`           | ディレクトリとその中身を再帰的に削除する。（よく使うオプション）      |
| `-f`           | 確認せず強制的に削除します。                                             |
| `-i`           | 各ファイルを削除する前に確認を求めます。                                   |
| `-v`           | 削除するファイルやディレクトリの名前を表示します。                         |

今回こんなディレクトリ構造の環境で試していきましょう。
```Bash:今回の環境
.
├── test.py
├── test.txt
├── test1
└── test2
    └── test.go

3 directories, 3 files
```
```Bash:同じ環境を作成する時はこちらを実行
mkdir test1 test2 && touch test.py test.txt test2/test.go 
```


### `-r`オプション（ディレクトリとその中身を削除する）
このオプションはディレクトリを消し、その中身も消します。なので、ディレクトリの中にあるファイルやディレクトリもまとめて消えるので気をつけていきましょう。

```Bash:-rの使い方
rm -r ディレクトリ名
```
今回の環境で使ってみましょう。
```Bash:実践
rm -r test1 && ls
```
削除が確認できたと思います。

### `-i`オプション（削除する際に確認を行う）
```Bash:安全に消すために
rm -ri test2 && ls
```
より安全に削除したいときはこのオプションをつけましょう。いくつか質問が来るので、OKであればy（yes）、ダメな時はn（no）を打ち込んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/3e97658f-fd96-6bed-adf4-a3881a7f7896.png)

### `f`オプション（確認を無視して強制的に削除）
`-f`オプションは基本的に**危険**です。もう一回言いますが**危険**です。
これは『本当に消していいですか？』というメッセージを完全に無視しちゃいます。
Linuxのファイルシステムの中には、システムの根幹になっている重要なシステムファイルなどがあるのですが、これは消そうとすると必ず確認メッセージが出ます。これを無視して重要なファイル類を消してしまう恐れがあるんですね。

```Bash:使い方
rm -f ファイル名
rm -rf ディレクトリ名
```
ちなみに、世の中には叩いていないコマンドがあります。それが俗にいうバルスコマンドです。

:::note alert
この赤いアラートに挟まれたコマンドは絶対に使用しないでください。
責任は取れません。
:::

```Bash:バルスコマンド
sudo rm -rf /*
```

:::note alert
この赤いアラートに挟まれたコマンドは絶対に使用しないでください。
責任は取れません。

:::
これを打ってしまうと、Linuxのファイルシステムは**崩壊**します。外部の記事などではこれが書かれている記事も多いですし、間違って打ってしまったらまずいので紹介はしておきます。

`-rf`：ディレクトリを指定しつつ、確認を取らない
`/*`：ルートディレクトリから下の階層全てを

ちなみにDockerコンテナ内で叩いてみた結果が以下です。`ls`コマンドすら打てなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/d02340dc-8671-0122-4266-8075e2383f43.png)

:::note warn
Dockerコンテナは切り離された環境であり、使用しても問題ない状況でしたので使いました。Dockerを使えるようになったら使用する分にはいいですが、初学者が手を出すものではありません。ご注意ください。
:::



## おわりに
今回はLinuxコマンドの基本④を解説しました。
私自身、まだまだLinuxの学習はし続けますが記事を書くたびに新しい発見があって良いですね。少しでも初学者の学習の足しになれば嬉しいです。シェルは美しい。

次の記事はこちら👇

https://qiita.com/ikemura-ren/items/73f7986764c1b21a9cec?2

まとめ記事はこちら👇

https://qiita.com/ikemura-ren/items/3e7b6ec1b0cd9b3928d6