Найти в Дзене
IT.Genius

❗️Осторожно❗️, rm -rf: как одна команда чуть не стоила мне работы

Всем привет! Сегодня хочу рассказать историю своего самого большого провала. Ту, о которой я стараюсь забыть, но которая навсегда изменила мой подход к работе. Речь пойдет о той самой команде rm -rf, которая стала для меня не строчкой в учебнике, а огненным шаром, испепелившим три дня моей жизни. Это был не просто плохой день. Это был крах. Спокойное утро перед бурей Был обычный четверг. Я работал над новым функционалом и столкнулся с «мусором» — папкой со старыми логами и кешем, которая весила гигабайты. Она мешала сборке проекта и занимала место. «Что может быть проще?» — подумал я. Открываю терминал, нахожу папку и... привычной командой удаляю ее. rm -rf ./logs_temp Я был уверен в себе, как никогда. Enter. И тут началось. Катастрофа: Тишина, которая оглушает Через секунду я понял, что делаю что-то не так. Терминал завис на несколько секунд, что уже было странно. А потом я посмотрел на путь в консоли. Я был не в той директории. Вместо ~/projects/new_feature/logs_temp я б

Всем привет! Сегодня хочу рассказать историю своего самого большого провала. Ту, о которой я стараюсь забыть, но которая навсегда изменила мой подход к работе. Речь пойдет о той самой команде rm -rf, которая стала для меня не строчкой в учебнике, а огненным шаром, испепелившим три дня моей жизни.

Это был не просто плохой день. Это был крах.

Спокойное утро перед бурей

Был обычный четверг. Я работал над новым функционалом и столкнулся с «мусором» — папкой со старыми логами и кешем, которая весила гигабайты. Она мешала сборке проекта и занимала место.

«Что может быть проще?» — подумал я. Открываю терминал, нахожу папку и... привычной командой удаляю ее.

rm -rf ./logs_temp

Я был уверен в себе, как никогда. Enter.

И тут началось.

Катастрофа: Тишина, которая оглушает

Через секунду я понял, что делаю что-то не так. Терминал завис на несколько секунд, что уже было странно. А потом я посмотрел на путь в консоли.

Я был не в той директории.

Вместо ~/projects/new_feature/logs_temp я был в корне проекта ~/projects/. И моя команда, по воле злого рока и автодополнения, превратилась в:

rm -rf . /logs_temp

Вы видите пробел? Я — нет. Пробел между точкой и слешем. Для системы это означало одну простую вещь: «удалить рекурсивно и без подтверждения ВСЁ (./) и папку /logs_temp (которой не существует)».

За 3 секунды команда прошла по всему каталогу проекта.

Папки src, node_modules, документация, конфиги Docker, скрипты развертывания — всё исчезло. Терминал снова мигал приглашающей строкой, как ни в чем не бывало. А у меня в голове была только одна мысль: «Этого не может быть».

Первый порыв — проверить Корзину. Но в Linux ее нет. Второй порыв — громко выругаться.

Спасательная операция: 72 часа ада

1. Паника (Первые 10 минут): Я вскочил с кресла, пытаясь осознать масштаб трагедии. В слаке уже начали писать: «У меня что-то перестало работать...», «А у меня билд упал».

2. Признание (Самый сложный шаг): Я написал в общий чат: «Ребята, это я. Кажется, я только что удалил основной репозиторий. Начинаю разбираться». Стыд был жгучим. Но реакция команды оказалась лучше, чем я ожидал — все бросились на помощь.

3. Решение (3 дня и 2 бессонные ночи):

  · Бэкапы? Конечно, они были! Но последний полный бэкап был недельной давности. Полдня ушло только на его развертывание.

  · Git в помощь? Последние коммиты у каждого разработчика были свои, и собирать проект по кусочкам из 20 разных веток — это ад.

  · Восстановление файлов? Мы пробовали утилиты вроде testdisk и photorec. Они что-то восстановили, но大部分 файлов были с битыми именами и путями.

В итоге мы потратили три дня, чтобы вручную, по кусочкам, восстановить проект из того, что было, и перенести поверх свежие наработки из наших локальных репозиториев.

Главные выводы, которые остались со мной навсегда

Этот кошмар научил меня большему, чем любой учебник или ментор.

1. Никогда не доверяй автодополнению. Всегда полностью проверяй команду, особенно с rm -rf, перед нажатием Enter.

2. Бэкапы — это не опция, это обязанность. И они должны быть:

  · Регулярными (каждый день).

  · Автоматическими (чтобы никто не забыл).

  · Проверяемыми (нужно быть уверенным, что их можно восстановить).

3. alias rm='rm -i' — твой лучший друг. Эта команда в .bashrc заставляет систему спрашивать подтверждение на каждое удаление. Она спасла меня уже десятки раз