Sudo rm rf шутка
Обновлено: 25.12.2024
На днях пользователь сайта Serverfault разместил на ресурсе интересный вопрос. Марко Марсала (Marco Marsala) спросил у других пользователей, можно ли после запуска команды rm -rf / оперативно восстановить данные. Как оказалось, Марсала является владельцем небольшой хостинг-компании, обслуживающей около 1500 клиентов. Для управления данными и автоматизации процессов он использовал Ansible.
Некоторые комментаторы считают, что данные можно спасти, поскольку «rm -rf» просто помечает блоки данных, как пустые. И если поверх ничего не записывалось, в теории, восстановить можно почти все. Тем не менее, на восстановление понадобится много времени и денег.
Интересно, что два года назад на этом же ресурсе был задан аналогичный вопрос. Тогда за помощью обратился системный администратор, запустивший вот такую вот команду:
sudo rm -rf --no-preserve-root /mnt/hetznerbackup /
По словам незадачливого сисадмина, он осознал ошибку через несколько секунд, но было уже поздно, все данные потихоньку уничтожались. Тогда оказалось, что большинство важных данных были уничтожены, и восстановить их не удалось.
Что же, совет здесь может быть только один — делать бэкапы. Много бэкапов не бывает, при этом они должны храниться так, чтобы не быть случайно уничтоженными, как в этом случае.
UPD. Владелец обратился за помощью к компании, которая занимается восстановлением данных. Как оказалось, все файлы на месте. Но вот позволить себе восстановить эти файлы хостинг-провайдер не в состоянии — слишком большие требуются средства на проведение такой работы для дисков с 1500 серверов.
Следующий анекдот
У этой страницы нет проверенных версий, вероятно, её качество не оценивалось на соответствие стандартам. Перейти к: навигация, поиск
Р-т, такой р-т. Говорят, гентушнегом был.
Следующий анекдот
В этой версии ожидают проверки 22 изменения. Опубликованная версия была проверена 8 августа 2015. Перейти к: навигация, поиск
sudo rm -rf *
rm -rf — линуксовая команда (если быть более точным, Unix'овая, однако в интернетах больше ассоциируется с Линуксом). Обычно употребляется в виде «rm -rf /*» (почему — см. ниже)
Содержание
- Сама команда rm — удалить (remove) (файл(ы) и/или каталог(и)).
- Ключ -r — recursively (рекурсивно) — позволяет удалять каталоги со всем содержимым, без этого ключа команда отвечает «каталог не пуст».
- Ключ -f — force — не спрашивать подтверждения (вообще команды Linux не страдают обычным маздаевским назойливым переспрашиванием «а Вы точно уверены?», это редкое исключение (и то, только потому, что почти всегда по умолчанию в .bashrc прописано alias rm='rm -i')). Некоторые побочные эффекты опции описаны в мане.
- Традиции Unix позволяют в большинстве программ объединять ключи, то бишь «-rf» эквивалентно «-r -f».
- Фактически ключ «-rf» по действию аналогичен фразе «Всё и сразу!».
Таким образом, суть команды — удалить каталог рекурсивно, не спрашивая подтверждения. Обычно речь идёт о «/» — корневом каталоге. Большинство современных юниксов (свежие версии OpenSolaris и GNU/Linux) не дают ламеру выстрелить себе в ногу: rm -rf / не работают. Хотя всё спокойно удаляется при использовании ключа «--no-preserve-root». Кагбэ так: «rm -rf / --no-preserve-root» Kekeke. Есть и другой вариант: rm -rf /*
FreeBSD понимает эту команду в несколько изменённом виде: rm -fr /, а в последних версиях данная вещь не работает из-за использования флагов файловой системы (их надо сначала снять — chflags -R −0 /). В зависимости от уровня безопасности системы, может потребоваться перезагрузка в однопользовательский режим, что есть геморойно.
Windows понимает эту команду как rmdir /s /q C:\ или rd /s /q C:\, где /s — аналог -r, а /q — аналог -f. При этом удаляется только содержимое диска C: из-за отличий в файловой системе: в мелкомягких ОС начиная с MS-DOS 1.0 рут не один, а до 26 разных, и одной «страшной» командой типа rmdir /s, deltree или format можно грохнуть только один диск за раз. В винде теоретически есть суперкорень «Мой компьютер», но этот каталог виртуальный, фиктивный и не существует в реальной файловой системе, поэтому «страшные команды» по нему не проходят как по негодному аргументу. Впрочем, есть и другой способ: установить Cygwin и воспользоваться традиционной командой.
Пример использования
Использование команды двояко:
- В качестве травли линукс-нубов или тонкого намёка пойти нахуй; [1]
- В качестве травли ламеров, которые работают в системе, в том числе сидят в интернетах, из-под рута. Обычно в этом случае заветная строчка маскируется (ибо примитивный вариант проходит только с нубами):
А вот что происходит в Perl'овом коде — совсем не очевидно из-за того, что это язык вуду преднамеренно запутанного написания. В сущности, всё просто: в данной строчке записано всего три последовательно выполняемых команды. Произведём первую итерацию и запишем поданную команду следующим образом:
Вторая команда транслирует содержимое «аккумулятора» по достаточно сложным правилам. В левой части указано четыре диапазона символов, в правой — один. Если раскрыть эти диапазоны, получим следующее соответствие:
В результате содержимое $_ принимает вид system"rm -rf /" .
Третья же команда дважды (как инструктирует флаг ee ) «вычисляет» содержимое аккумулятора — вышеуказанную деструктивную команду — и пытается заменить пустую строку в аккумуляторе на результат сего вычисления, но автору результат замены уже не интересен. Еще подробнее
Есть еще один вариант, уже для нубов, считающих себя Ъ-линуксоидами:
Под Windows 9x данный патч был всё-таки портирован и принял вид deltree /y e: d: c:
Почему такой порядок дисков? Чтобы сначала удалились мегабайты прона на отдельных хардах/разделах (тогда гигами не меряли), а затем система. Также предлагался «универсальный ключ реестра для избавления от шароварности программ», который записывал сию команду в Run, а заодно отключал мышь и клаву. При следующей загрузке, если юзер и догадывался о причине странного жужжания винта, спасти мог только быстрый, решительный Reset (но юзер загипнотизированно смотрел на зависший мышекурсор и вспоминал о кнопке, когда было уже поздно).
Также, вариант для новых coreutils :
Недавний пример случайного использования мема случился летом 2011 года в проекте Bumblebee, представляющем собой костыль для поддержки технологии NVidia Optimus в ноутбуках с двумя видеокартами. Файл install.sh в исходниках данного проекта содержал безобидную строчку с лишним пробелом:
Эта строка, как нетрудно заметить, удаляет директорию /usr, в которой в современных линуксах содержатся чуть менее, чем все библиотеки, бинарники, и всё остальное. Баг был быстро пойман и исправлен, что не помешало багтрекеру проекта на github стать на несколько дней филиалом форчана, с макросами, пони и прочим.
В конце ноября — начале декабря 2013 г. счастливые пользователи Яндекс.Диска были обрадованы тем, что их ОС либо наотрез отказалась запускаться, либо запускалась, но без установленных программ. Как выяснилось, всему виной оказалось обновление Яндекс.Диска, которое отличилось широкой русской душой и вместо папки со старой версией «Диска» удаляло весь диск C:, на котором тот находился. Что характерно, проблема возникала прежде всего у пользователей, нарушивших заповедь «Не работай под рутом», вот только у многих считающих себя умнее системных архитекторов Windows юзверей это — нормальная ситуация. Особенно доставили объяснения менеджера Яндекса, призвавшего пользователей не удалять Яндекс.Диск, потому что патч Бармина скрывался именно в модуле деинсталляции. Спешите видеть — Яндекс взял в заложники ваш жесткий диск и хладнокровно убьет его, если вы попытаетесь удалить захватчика!
Марко Марсала, который когда-то был хостинг-провайдером. Небольшим таким хостинг-провайдером с полутора тысячами пользователей. И он случайно запустил на всех серверах bash-скрипт, содержащий строчку rm -rf /. И всё бы ничего, но он забыл придать какие-нибудь значения переменным foo и bar… Когда Марко пришёл на айтишный форум спрашивать, как теперь можно починить всё взад, ему так и не удалось добиться внятного ответа, потому что форумные петросяны, вместо того, чтобы посочувствовать, наперебой спешили сообщить ему, что он смог одной строчкой кода удалить свою компанию.
В околофидошных кругах rm -rf часто называют патчем Бармина — в честь Владимира Бармина, UNIX-админа. Последний, в релкомовской группе новостей, на вопросы вида «как починить <…> в SCO Unix?» несколько раз ответил «универсальным патчем: rm -rf / от рута».
На основе данного патча была разработана комбинация, получившая название Русской Рулетки.
Играть в Русскую Рулетку имеют право только администраторы (root), желательно на сервере, имеющем свыше 3000 посещений в день. Как было выяснено админами Ниеншанца (на практике), данная комбинация успешно работает в Linux и FreeBSD в последних версиях coreutils.
Версия Русской Рулетки под Windows:
Сей перл не заработает, если перед этим не включить расширенную обработку команд:
А всё потому, что в этой вашей винде она по умолчанию выключена, а вытащить переменную в знаках «!» можно только при ней включенной. Nuff said.
В 2013 году вышла версия системы статистики и управления Avaya Call Management System R17, которая наконец-то была портирована с этих ваших соларисов на Linux. В частности, там содержался скрипт cleanup, который по замыслу индусов должен был чистить мусор. В самом конце был такой код:
Забавный эффект обнаруживался, если директория /tmp была пустая. Корпорация объяснила это тем, что в solaris путь для find — обязателен, а в Linux — нет.
В конце января 2016 некий арчевод решил поиграться этим известным патчем перед тем как переразметить свой диск. Он старательно вписал в команду даже специальный ключ, без которого этот патч не запускается… Ну… и… получил кирпич из своего MSI нетбука — после включения даже подсветка экрана не загоралась!
Как нетрудно догадаться патч вытер вместе с корнем еще и переменные UEFI в NVRAM, которые монтируются в /sys/firmware/efi/efivars/, но принципиально это не могло быть проблемой, потому как по стандарту UEFI должна проверять целостность данных в NVRAM, и в случае нарушения целостности она ОБЯЗАНА осуществить инициализацию NVRAM до состояния настроек по умолчанию/фабричных (Factory Default). Но вот в MSI решили подзабить на проверку целостности NVRAM, и незадачливый арчевод потащил свой нетбук кирпич в сервис.
Самое же примечательное в этой истории то, что 20 лет назад отпущенная шутка, до сих пор стреляет, да еще с невиданной доселе мощью.
- Пост про rm -rf /, 23 февраля 1996
- Бармин о SCO, 3 октября 1996
- Копия письма выше и упоминание патча
- «Универсальное решение — rm», 16 октября 1996
- А. Лисовский подробно рассказывает о назначении патча, 02 февраля 1996
- Настоящий Владимир Бармин и его патч для шлимыла, 06 августа 1998
- Порт патча под винду? конец 1997 года
- Типичное использование, 2007 год
- Просьба о помощи Perl-программисту на LOR'е
- PSN Avaya об удалении файлов
- О новой супер-силе патча на сиcтемах с UEFI
Есть более кровожадный вариант sudo dd if=/dev/zero of=/dev/sda, который заполняет раздел носитель /dev/sda нулями, вероятность сохранения данных обратно пропорциональна времени реакции поциэнта (с момента нажатия на [Enter] до момента прерывания команды нервным нажатием Ctrl+C).
После этого уже в первую секунду даже на дешевом механическом 5400RPM HDD занулит 40 мегабайт вместе с таблицей разделов, загрузчиком и остальными метаданными файловой системы. И оно уже никогда не загрузится без дополнительного геморроя.
Вообще довольно странно, что rm -rf победил dataset definition в массовом сознании. Ведь он гораздо более разрушителен и кошерен.
Можно например сделать адовый скример перенаправив весь жесткий диск в звуковую карту.
Или тупо забивать оперативную память случайными числами.
Жаль что там нет псевдоустройства для доступа к BIOS прошивке, тогда можно было бы окончательно решить вопрос с материнской платой красноглазика, если у него (U)EFI BIOS и то благодаря Поттерингу: [3]
Следующий анекдот
Команда rm -rf / является довольно популярной в узких кругах. Но не потому, что ей постоянно пользуются, а наоборот. Это что-то вроде шутки у заядлых линуксоидов.
Видео: выполнение команды rm -rf / на реальной системе Linux
Все, что вы прочитаете ниже, написано только в информационных целях, не повторяйте этого на своем компьютере.
Команда rm -rf / , выполненная от имени суперпользователя, уничтожит все данные с корневого раздела диска.
Ключ -r используется для того, чтобы выполнять рекурсивный обход всех директорий.
Ключ -f — force — не запрашивать никаких подтверждений.
Если выполнить эту команду в терминале, а именно выполнить:
то появится предупреждение о том, что выполнение команды опасно:
Таким образом программа rm защищает сама себя от плохих действий. Но сразу же сообщает нам, что мы можем использовать ключ --no-preserve-root , чтобы обойти это предупреждение.
Если выполнить команду:
то все данные с корневого раздела диска будут удалены!
Иногда данная команда используется, чтобы «подшутить» над новичками в Linux. Некоторые пользователи на форумах советуют «чайникам» выполнить данную команду, чтобы решить свои проблемы. Чтобы шутка удалась, саму команду иногда маскируют, например, вставляют ее внутрь другой длинной команды, чтобы она не так выделялась.
Процесс работы rm -rf / примерно следующий:
- Команда выполняется от имени суперпользователя.
- Копия программы rm загружается в оперативную память.
- Программа rm начинает удаление всех файлов с корневого раздела /.
- Во время удаления файлов программа rm в какой-то момент удаляет и саму себя (исполняемый файл программы, файл /bin/rm). Но так как копия программы находится в оперативной памяти, то она продолжает работать, не смотря на то, что исполняемый файл уже удален.
- Когда удаление файлов завершено, программа rm выгружается из оперативной памяти.
- На данном этапе в памяти находятся только те программы, которые уже были там до выполнения команды rm (например, ядро, драйвера, окно терминала и так далее).
Очень важный момент, который нужно учитывать. Современные UEFI системы монтируют директорию с прошивками в директорию /sys. Так как rm удаляет все файлы и с примонтированных разделов, то прошивки также будут удалены. Таким образом можно получить не только неработающую систему, но и неработающий компьютер. Будьте внимательны.
Содержание
«Root» — это такая учётная запись, характерная для операционных систем, основанных на Unix, которая имеет доступ ко всем без исключения действиям. Да, вообще ко всем. Из этого вытекает вывод, что, работая на root, можно своими непродуманными действиями так отредактировать ОСь, что сам Линус Торвальдс не сможет вернуть её к жизни. И никаких предупреждений о том, что пользователь делает щито не то, не выскочит, никаких окон с запрещением на выполнение действия тоже.
Многим пользователям того же Linux просто лень создавать себе учётную запись, где было бы меньше прав, что у наименее аккуратных из них и выливается в разрушение системы. Посему нубьё необразованное и предостерегают — не работай на root, сцуко.
- Программа из одной строчки на Perl
- chmod -R 666 /
- chmod -R -x /proc
- Тысячи их!
Альтернативой руту является wheel с sudo. Права вила также позволяют выполнять команды от рута, но не по умолчанию, а через специальную команду sudo (что делает случайное выполнение атомного пиздеца несколько менее вероятным). Если в системе используется wheel, вилоносители также могут выполнить команду sudo /bin/bash, которая открывает временную вторую оболочку bash с правами рута. Это делает рут как таковой ненужным, поэтому ряд админов считает, что рут следует выпиливать нахуй как доступную для логина учётку.
На ЛОРе выложен (де)мотиватор на сабжевую тему в двух вариантах. Первый вариант не понравился особо дотошным регистратам, так как в новых версиях coreutils таким способом хуй себе уже не прищемить.
Читайте также: