EnvaderでLinuxコマンドを学ぶ第2回(pwd/rm/mkdir/rmdir編)

## この記事の内容
はじめましてa-min3150です。エンジニアへの転職を目標に学習中です。
アウトプットのためEnvaderで学習したこと、ハマったことなどを書いていきたいと思います。

## Linuxコマンドとは
LinuxOSで使うことのできるコマンドで主にサーバーのシステムを操作するのにCUI(いわゆる黒い画面)での操作が必要となるため、サーバー管理やインフラ構築をするエンジニアは知っておかなければならないコマンドとなります。

## 今回の学習アウトプットは
Linuxコマンド基礎の２回目ということで、(pwd/rm/mkdir/rmdir)の4つのコマンドについてです。


第1回(cd/ls/cat編)は[こちら](https://qiita.com/a-min3150/items/1a9cc84d1543e1067f8c)
第3回(mv/cp編)は[こちら](https://qiita.com/a-min3150/items/9458e8ee450966eb749f)

## 知っておきたいディレクトリ名称

| 名称　　| 説明 |
|:-:|:-:|
| ディレクトリ | LinuxやMacOSなどのUnix系OSでは、フォルダの事をディレクトリと呼びます。 
| カレントディレクトリ |現在作業しているディレクトリを指します。
| ルートディレクトリ| Unix系OSのファイルシステムにおける一番上の階層のディレクトリを指します。
| ホームディレクトリ |ユーザーがログインした時に最初に開くディレクトリを指します。

引用元:https://envader.plus/course/1/scenario/1001

## pwdコマンドとは

pwdとは、カレントディレクトリ（あなたが作業しているディレクトリ）の位置を絶対パスで表示・確認するためのコマンドです。

pwdとは「Print Working Directory」または「Present Working Directory」の略と言われています。

### 基本的な使い方

```
pwd

（例）
test_user:~$ pwd   #　実行
/home/hogehoge #現在どのディレクトリにいるか表示される
```
## rmコマンドとは
rmとは、「ReMove」の略で、既存のファイルを削除する際に使用するコマンドです。
ここで取り扱うファイルとは、.txt .img .mpeg 等のデータファイルのことを指します。

### rmの基本的な使い方

```
rm [オプション]　ファイル名

（例）
test_user:~$ ls   #　カレントディレクトリの中を確認します。
hoge.txt sample.txt

test_user:~$ rm hoge.txt   #　実行

test_user:~$ ls   #　再度ディレクトリの中を確認すると...
sample.txt        #　hoge.txtの削除に成功!
```
主なオプション
| オプション |	説明 |
|:-:|:-:|
| -v |	実行内容の経過が表示されます。
|-f |確認メッセージを出さずにファイルを削除します。
| -i | 削除の実行前に確認メッセージが表示されます。
|-r|ディレクトリを対象にします。ディレクトリの中の、ファイルやディレクトリも削除します。

一度削除されたファイルを復元する事は原則できません。自分の作業に自信を持てるようになるまでは、rm -iオプションを使用した方がよいかもしれません。

またrm *と入力すると、作業中のディレクトリ内の全てのファイルを削除する事ができます。

*はワイルドカードといい、“任意の文字”という意味を持ちます。


## mkdirコマンドとは
mkdirとは、「make directory」の略で、新たにディレクトリを作成する際に使用するコマンドです。

### mkdirの基本的な使い方
```
mkdir [オプション] ディレクトリ名

(例）
test_user:~$ ls   #　カレントディレクトリの中を確認します。
hoge.txt sample.txt

test_user:~$ mkdir hoge　　　#　実行

test_user:~$ ls   #　再度カレントディレクトリの中を確認すると

hoge.txt sample.txt hoge #　hogeディレクトリの作成に成功!
```
主なオプション
|オプション|	説明|
|:-:|:-:|
|-m	|パーミッション(実行権限)を指定して、ディレクトリを作成します|
|-p	|ディレクトリを階層的に作成します。|
|-v	|ディレクトリ作成時の情報を表示します。|
|-m|オプションを使用すると、指定した実行権限が付与されたディレクトリが作成されます。|

実行権限については下記の記事を参考にしてみてください。
[Linuxの権限確認と変更(chmod)](https://qiita.com/shisama/items/5f4c4fa768642aad9e06)

また-pオプションを使用すると、階層的にディレクトリを作成することができます。これは言い換えると、親子関係を持った状態のディレクトリ構造が作成できるということです。

階層的、親子については、下記の例をご覧下さい。
```
test_user:~$ ls   # 空のカレントディレクトリで... 

test_user:~$ mkdir -p hoge1/hoge2 　#　-pを使用してディレクトリを作成してみましょう。

test_user:~$ find  #　カレントディレクトリ内を一覧表示で確認すると
./hoge1　　　　　　　　　　　　　　　　　　　　　　　　　　　　
./hoge1/hoge2  #　hoge1を親、hoge2を子とする階層的なディレクトリの作成に成功!

test_user:~$ mkdir -p hoge1/hoge2/hoge3 　# hoge2内にhoge3を追加できるでしょうか。

test_user:~$ find  #　再度カレントディレクトリ内を一覧表示で確認すると...
./hoge1　　　　　　　　　　　　　　　　　　　　　　　　　　　　
./hoge1/hoge2
./hoge1/hoge2/hoge3　  # hoge2を親とするhoge3ディレクトリの作成に成功！
```
ディレクトリの作成と移動を繰り返す必要がないので、とても便利なオプションですね。

## rmdirコマンドとは
rmdirとは、[remove directory]の略で、既存のディレクトリを削除する際に使用するコマンドです。

### 基本的な使い方
rmdir [オプション] ディレクトリ名
主なオプション
| オプション |	説明 |
|:-:|:-:|
| -p |	指定したディレクトリの親ディレクトリも含めて削除する
| -v |ディレクトリ削除時の情報を表示します。

オプションの作用は、mkdirコマンドと同様と考えてよさそうです。

ところでこのrmdirコマンド、中身が空のディレクトリしか削除する事ができません(注1)。中に何かしらのファイルが入っている場合、このrmdirコマンドは使用できないのです。

ディレクトリの中身ごと削除したい時は、以下のコマンドを使用して下さい。

```
rm -r ディレクトリ名
-fオプションを加えれば、一思いに全てを消し去ることができます。ぜひ覚えておいて下さい。
```
```rmdir```コマンドよりも上記の(注1)の理由からディレクトリもファイルも削除のできる```rm -r```または```rm -rf```の方が使いやすい印象です。

## まとめ
今回はLinuxの基本コマンド(pwd/rm/mkdir/rmdir)の4つのコマンドについて解説しました。
実際に手を動かして学ぶことをお勧めします。下記の引用サイトを参考にされてみたはいかがでしょうか?
最後までお読みいただき、ありがとうございました。

次回は[EnvaderでLinuxコマンドを学ぶ第3回(mv/cp編)](https://qiita.com/a-min3150/items/9458e8ee450966eb749f)についてです。

## 引用サイト/資料
Linux mkdirコマンド:https://qiita.com/gupitasoftbank/items/bed437c7d747cb78f9a3
Envader(エンベーダー):https://envader.plus/
Envaderコース一覧:https://envader.plus/course
基本的なコマンドの練習(pwd/rm/mkdir/rmdir編):https://envader.plus/course/1/scenario/1002
Linux基礎コース:https://envader.plus/course/1
Linux標準教科書:https://lpi.or.jp/news/press/page/20180327_01/