rm -rf, Идиот!
29 декабря я случайно удалил все исходники со всех сайтов.
Как это было…
Я собирался начать новый проект на FuelPHP и игрался с настройками домена и консольной утилитой oil. В какой-то момент я решил, что начну с начала. Отчасти потому, что oil при генерации проекта создает общедоступный каталог public
, а я в конфиге Apache для тестового домена сделал public_html
. Перенастроив Apache, я решил удалить сгенерированный проект и создать его с нуля.
В консоли я ввел команду: rm -rf * /var/www/sites/test.com
. Я лишь хотел удалить рекурсивно все файлы по заданному пути. А оказалось, что напутал синтаксис и удалил все в текущем каталоге.
И хорошо еще, что я в тот момент оказался в каталоге /var/www/sites
(в котором храню исходники всех проектов). Если бы эту же команду ввести с корня сервера, удалилась бы вся система со всеми настройками.
В тот момент, когда я осознал что что-то пошло не так, я просто офигел. Внутри меня был просто взрыв. Хотелось просто биться головой об стену. Я материл себя, свои кривые руки, тот день, когда я связался с программированием и т. д. Цензурных слов было мало.
Представьте, что вы строите карточный домик. Очень большой. Из 1000 колод карт. Вы уже поставили почти все карты, осталась последняя колода. И тут вы чихаете, и работа за месяц разлетается на ваших глазах.
Самый сок заключался в том, что я не делал backup (никогда не оставляйте ваши данные без резервного копирования, а еще лучше используйте backup совместно с SVN / Git). Первым делом я решил восстановить удаленные файлы. Потратив полчаса в поисках готового решения, понял, что ничего не выйдет. Уже отчаявшись, я заметил одну деталь, которая меня спасла. Но для начала небольшое предисловие.
Со своим сервером я работал по SSH. Для выполнения команд – Putty, для копирования файлов – WinSCP, исходники на сервере редактировал прямо из WinSCP, используя Notepad++.
Как оказалось, при редактировании файла с сервера, в папке TEMP
текущего пользователя создается его полная копия. Для примера, только что открыл файл .htaccess
с этого блога, в итоге создалась копия по адресу:
C:\Users\Damange\AppData\Local\Temp\scp17810\var\www\sites\tarlyun.com\public_html\.htaccess
Зайдя в папку Temp я обнаружил около 50 различных папок вида scp_номер_, внутри которых содержались почти все файлы, которые я редактировал на сервере за последний месяц. А в начале декабря у меня был переезд, и была сохранена полная резервная копия со всех сайтов. В итоге я восстановил почти 90% исходников (то есть 90% новых, измененных после переезда). Еще 5% были переписаны в течении часа. А оставшиеся 5% были утеряны. В основном – это сложные SQL запросы, которые навскидку не вспомнить.
Это был хороший урок для меня:
1. Прежде, чем выполнять в консоли опасные команды — читайте описание. Еще лучше разобраться во всех командах, которые вы хотите выполнить на сервере. Компромисс – выписывать в блокнотик все незнакомые команды и в свободное время их изучать.
2. Backup! Возьмите за правило выполнение резервного копирования. Причем это касается не только информации на серверах, но и на локальных компьютерах тоже (про мой печальный опыт в этом плане расскажу в другой раз).
3. Используйте SVN / Git для вашего кода. Это позволит не только избежать полного краха при удалении, но и ошибок при изменении кода.
4. И никаких rm -rf *
А я не стал основывать утилиту OIL пока что она глючная, лучше чем GII генератор в Yii не придумали, но мне пока что не охота заниматься созданием генератора, но такие планы есть.
Ещё от себя добавлю что старайтесь господа не пользоваться клавишами в Windows -> Shift + DEL. Это удаление мимо корзины. У меня привычка уже пользоваться таким сочетанием и я уже не раз поплатился.
Кстати, С новым Годом Тебя и Рождеством! 🙂
Ахаха)) А представь как круто было если бы не восстановил — все сначала, это тоже очень круто, код бы смог улучшить %)