ついにやらかしたお話し

:::note warn
ここでは、エンジニアなら誰もが知っている、あのコマンドの恐ろしいお話をお届けします。
過去のトラウマがよみがえってしまったとしても、私は責任を負えませんのでご了承ください。
:::

## ある日、開発中の自分
わ「APIの検証、うーんいちいち確認するのめんどいな、やること増えるし…」
わ「そうだ、**検証環境のサーバー**に直接はいってログ仕込んじゃえばいいか」

```
[root@ip-000-00-00-000 bin]# cd /home/hoge.jp/huga/
```

わ「**huga直下からGit**管理されてるやろ？」
わ「ここから、各ファイルにログ``vi``でログを仕込みながら開発しちゃお」

```
[root@ip-000-00-00-000 bin]# cd /home/hoge.jp/huga/
[root@ip-000-00-00-000 huga]# vi application/....
```
わ「お！ログ見れるようになっとるやんけ！」
わ「ここでこういうjsonがレスポンスとして帰ってくるんやな、」
わ「じゃあ次は、このレスポンスを使って[Postman](https://www.postman.com/)で確認していこうかな・・・・」

### ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596047/2425264c-6732-b5a0-0cbc-7a11a5de7c60.png)

## 確認のつもりが・・・
わ「どのくらいログがたまってるか一旦確認するか。」

わ「確か、``/home/hoge.jp/huga/data/tmp/``直下にlogファイルがたまってるはずや！」
```
[root@ip-000-00-00-000 huga]# cd /home/hoge.jp/huga/data/tmp/
[root@ip-000-00-00-000 tmp]# ll
hoge2.log
hoge3.log
hoge14.log
hoge15.log
hoge16.log
hoge17.log
hoge18.log
hoge11.log
hoge1.log
```
わ「100ファイルぐらいたまっとるやんけ」
わ「ログためている場所わかってるし、**rm -rf** でで全部消しちゃおうかな」

```
[root@ip-000-00-00-000 huga]# rm -rf *
```
わ「これを打てばいいはずや!!!!」
#### わ「**ポチ！**」。。。。。。
```
[root@ip-000-00-00-000 huga]# rm -rf *
[root@ip-000-00-00-000 huga]#
```



   　
# おわかりいただけただろうか。。。
自分はてっきり、``/home/hoge.jp/huga/data/tmp/``に移動しているものと思い、``rm -rf``のコマンドをたたいたが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596047/626b72e2-5cea-edde-bff8-9477f1b7e068.png)

今いるディレクトリは``/home/hoge.jp/huga/``だったのだと、、、、

## 時すでに遅し
```
[root@ip-000-00-00-000 huga]# ll
0
```
わ「 (。´・ω・)ん?? 」
### わ「 (。´・ω・)ん???????? 」

わ「``huga``直下**全部消えてね！！？！🐎!🐏！？🐒**」

## さー、まずいことなった
わ「まあ、当然のように画面は開かないよな」
わ「まず**落ち着いて**、報告してから復元方法を考えよう」

わ「じょうちょー。ま、まずいことになりました……（かくかくしかじか）」
###### じ「・・（＃＾ω＾）そんな奴ホントにいるんだな＃＃」

## 復元方法の選定
わ「い、一旦報告終わったし、復元方法をかんがえよ・・」

わ「この検証サーバーは**AWS**上で稼働してるよな」
わ「なら、AMIからEC2立ち上げる方法があるな」
わ「ただ、運よく ``/home/hoge.jp/huga/``直下は**Git管理**されてるから」
わ「**Git**でも復旧できるか」

## Gitで復元する
わ「検証環境の**AMI**がいつのかわかんないし、起動と設定に時間かかりそうだな」
わ「**Git**で復元するのが早そうだし、その方法で復元しようか」

わ「googleとGPT先生によると、``git status``とか``git log``使ってやるんやな」

## とりあえずやってみる
わ「手順としてはこうや！」

1. ``git status`` コマンドを使って、削除されたファイルを確認
1. ``git log`` コマンドを使って、コミット履歴から最新のcommit_hashを確認
1. ``git checkout <commit_hash> -- <deleted_file_path>`` コマンドを使って、削除されたファイルを特定のコミットから復元
1. 念のため最後に``git pull``
1. git 管理されてないファイルとか、他のサーバーとかcomposerを使って元に戻す。

※ commit_hash：git log コマンドで表示されるコミットのID
※ deleted_file_path：削除されたファイルのパス

-----

### 1. ``git status`` コマンドを使って、削除されたファイルを確認

```git
[root@ip-000-00-00-000 huga]# git status
        deleted:    huga/application/1.php
        deleted:    huga/application/2.php
        deleted:    huga/application/3.php
        deleted:    huga/application/4.php
        deleted:    huga/application/5.php
        deleted:    huga/application/6.php
        deleted:    huga/application/7.php
        deleted:    huga/application/8.php
        deleted:    huga/application/9.php
        deleted:    huga/application/0.php
              　  ・
              　  ・
              　  ・
              　  ・
```

わ「3000ファイルぐらい消えてるわ、、、」

-----

### 2. ``git log`` コマンドを使って、コミット履歴から最新のcommit_hashを確認

```
-- 下記いろいろ省略してます

[root@ip-000-00-00-000 huga]# git log
commit <<commit_hash１>>
Author: kurieight
Date:   Mon Nov 27 15:06:52 2023 +0900

    【テスト】コミットコメント１

commit <<commit_hash２>>
Author: kurieight
Date:   Mon Nov 27 15:05:58 2023 +0900

　　 【テスト】コミットコメント２
```

わ「一旦最新の状態に戻ればいいから、``commit_hash１``を使ってそれぞれ復元させよう。」

-----

### 3. ``git checkout <commit_hash> -- <deleted_file_path>`` コマンドを使って、削除されたファイルを特定のコミットから復元

わ「１で出した``[deleted:    huga/apploication/1.php]``みたいなパスを全部コピー！」
わ「サクラエディタとかで、``[git checkout <commit_hash> -- <deleted_file_path>]``の形に成形！」
```
-- 完成したのがこちら
git checkout commit_hash１ -- huga/application/1.php
git checkout commit_hash１ -- huga/application/2.php
git checkout commit_hash１ -- huga/application/3.php
git checkout commit_hash１ -- huga/application/4.php
```
わ「出来上がったものを消しちゃったEC2に**流す！！！**」

```
[root@ip-000-00-00-000 apploication]# ll
drwxr-xr-x 7 root root   0 Nov 23 16:22 1.php
drwxr-xr-x 7 root root   0 Nov 23 16:22 2.php
drwxr-xr-x 7 root root   0 Nov 23 16:22 3.php
drwxr-xr-x 7 root root   0 Nov 23 16:22 4.php
drwxr-xr-x 7 root root   0 Nov 23 16:22 5.php
              　  ・
              　  ・
              　  ・
```

### わ「戻ってきてる！！！！！！！！」
わ「あとは４と５の手順をやって完了か。」
わ「意外と簡単に戻せたけど、寿命が縮んだわ。」
わ「もう二度とhomeからpath直打ちで作業しないことをここで誓います。」

-----

普段やらないようなミスも、ふと油断した瞬間とかイレギュラーな対応をしてる時に起きるのが大体です。

1. **cdコマンドで実行対象のファイルがあるディレクトリに移動**
1. **pwdコマンドで今いるディレクトリを確認後、コマンドを実行する**

テスト環境だからと言って「rm -rf *」のように大着するやめましょう。

この記事を見てくれている皆様はこんな事しないと思っておりますが、自戒として共有させていただきました。
#### Amen