🔍 Изучаем Патч Бармина: опасности и удивительные возможности на Unix-системах
Вы, наверное, сталкивались с комментариями вроде: "Просто выполните команду sudo rm -rf /*, и ваша проблема исчезнет". Но знали ли вы, что эта команда именуется как "Патч Бармина"?
Патч Бармина - это юмористическое описание универсального способа "починки" любых неполадок на Unix-системах. Этот "патч" представляет собой всего лишь одну строку, которую следует ввести в терминале от имени root.
Осторожно: данная команда действительно удалит все проблемы, включая саму систему. Используйте ее только на тестовых машинах ради интереса, но никак не на рабочих системах. Надеюсь, вы дочитали до этого абзаца 🤒, не бросив вызов судьбе на рабочем окружении.
Теперь давайте разберемся, как это "чудо" работает.
По умолчанию команда rm проверяет аргументы на соответствие корневой директории. Если передать аргумент /, будет выведено предупреждение. Однако флаг --no-preserve-root позволяет отключить это предупреждение.
При использовании команды rm -rf /* аргументами будут файлы и папки корневой директории. Bash передает этот список команде rm. Чтобы посмотреть, какие элементы в списке, выполните:
printf '%s\n' /*
Вы получите список папок и файлов. Но корневой директории в нем не будет. Далее команда rm начнет удалять все, до чего может достать. Даже если запустить ее от обычного пользователя, многие файлы будут уничтожены.
Для этого процессу достаточно иметь разрешения на чтение, запись и выполнение (rwx) для директории, в которой удаляются файлы, и чтение и выполнение (r-x) для компонентов пути к этой директории.
Если путь известен полностью и передан как аргумент, права на чтение не обязательны.
Пример: rm -ri /*. Таким образом, можно удалить содержимое домашней директории пользователя. Но перед каждым удалением будет задан вопрос (ключ -i).
Правда, иногда бывает, что что-то не хочется удалять. В таком случае просто нажмите Enter. Для подтверждения удаления наберите "y" и снова Enter.
Также есть опция --preserve-root. Без аргументов она включает проверку, которая отключается флагом --no-preserve-root. При указании опции с аргументом "all" пропускаются директории, родители которых находятся на другой файловой системе. Например, домашний каталог пользователя может быть на отдельном разделе.
Пример: rm -ri --preserve-root=all /*
Вывод будет следующим:
rm: пропускается '/dev', так как он на другом устройстве
rm: и действует --preserve-root=all
rm: пропускается '/run', так как он на другом устройстве
rm: и действует --preserve-root=all
rm: пропускается '/tmp', так как он на другом устройстве
rm: и действует --preserve-root=all
Выводы следующие: даже без --no-preserve-root команда rm может вызвать неприятности. Всегда изучайте и думайте, прежде чем слепо копировать и запускать что-либо. Ну и всегда стоит оглядываться на скрипты bash от других, особенно если они взяты у Васи Нонейма.
Берегите свои системы и продолжайте исследовать мир Linux! 🐧💻
#LinuxЭнтузиасты #ПатчБармина #UnixСистемы #Осторожно #Безопасность
Вы, наверное, сталкивались с комментариями вроде: "Просто выполните команду sudo rm -rf /*, и ваша проблема исчезнет". Но знали ли вы, что эта команда именуется как "Патч Бармина"?
Патч Бармина - это юмористическое описание универсального способа "починки" любых неполадок на Unix-системах. Этот "патч" представляет собой всего лишь одну строку, которую следует ввести в терминале от имени root.
Осторожно: данная команда действительно удалит все проблемы, включая саму систему. Используйте ее только на тестовых машинах ради интереса, но никак не на рабочих системах. Надеюсь, вы дочитали до этого абзаца 🤒, не бросив вызов судьбе на рабочем окружении.
Теперь давайте разберемся, как это "чудо" работает.
По умолчанию команда rm проверяет аргументы на соответствие корневой директории. Если передать аргумент /, будет выведено предупреждение. Однако флаг --no-preserve-root позволяет отключить это предупреждение.
При использовании команды rm -rf /* аргументами будут файлы и папки корневой директории. Bash передает этот список команде rm. Чтобы посмотреть, какие элементы в списке, выполните:
printf '%s\n' /*
Вы получите список папок и файлов. Но корневой директории в нем не будет. Далее команда rm начнет удалять все, до чего может достать. Даже если запустить ее от обычного пользователя, многие файлы будут уничтожены.
Для этого процессу достаточно иметь разрешения на чтение, запись и выполнение (rwx) для директории, в которой удаляются файлы, и чтение и выполнение (r-x) для компонентов пути к этой директории.
Если путь известен полностью и передан как аргумент, права на чтение не обязательны.
Пример: rm -ri /*. Таким образом, можно удалить содержимое домашней директории пользователя. Но перед каждым удалением будет задан вопрос (ключ -i).
Правда, иногда бывает, что что-то не хочется удалять. В таком случае просто нажмите Enter. Для подтверждения удаления наберите "y" и снова Enter.
Также есть опция --preserve-root. Без аргументов она включает проверку, которая отключается флагом --no-preserve-root. При указании опции с аргументом "all" пропускаются директории, родители которых находятся на другой файловой системе. Например, домашний каталог пользователя может быть на отдельном разделе.
Пример: rm -ri --preserve-root=all /*
Вывод будет следующим:
rm: пропускается '/dev', так как он на другом устройстве
rm: и действует --preserve-root=all
rm: пропускается '/run', так как он на другом устройстве
rm: и действует --preserve-root=all
rm: пропускается '/tmp', так как он на другом устройстве
rm: и действует --preserve-root=all
Выводы следующие: даже без --no-preserve-root команда rm может вызвать неприятности. Всегда изучайте и думайте, прежде чем слепо копировать и запускать что-либо. Ну и всегда стоит оглядываться на скрипты bash от других, особенно если они взяты у Васи Нонейма.
Берегите свои системы и продолжайте исследовать мир Linux! 🐧💻
#LinuxЭнтузиасты #ПатчБармина #UnixСистемы #Осторожно #Безопасность