17
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

いえらぶGROUPAdvent Calendar 2023

Day 4

ついにやらかしたお話し

Last updated at Posted at 2023-12-03

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

ある日、開発中の自分

わ「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で確認していこうかな・・・・」

image.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

今いるディレクトリは/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 コマンドを使って、削除されたファイルを確認
  2. git log コマンドを使って、コミット履歴から最新のcommit_hashを確認
  3. git checkout <commit_hash> -- <deleted_file_path> コマンドを使って、削除されたファイルを特定のコミットから復元
  4. 念のため最後にgit pull
  5. git 管理されてないファイルとか、他のサーバーとかcomposerを使って元に戻す。

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


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

[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_hash1>>
Author: kurieight
Date:   Mon Nov 27 15:06:52 2023 +0900

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

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

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

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


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

わ「1で出した[deleted: huga/apploication/1.php]みたいなパスを全部コピー!」
わ「サクラエディタとかで、[git checkout <commit_hash> -- <deleted_file_path>]の形に成形!」

-- 完成したのがこちら
git checkout commit_hash1 -- huga/application/1.php
git checkout commit_hash1 -- huga/application/2.php
git checkout commit_hash1 -- huga/application/3.php
git checkout commit_hash1 -- 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
                 ・
                 ・
                 ・

わ「戻ってきてる!!!!!!!!」

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


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

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

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

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

Amen

17
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?