Чи існує сценарій, коли потрібен rm -rf -no -serve-root?


27

Я бачив тут деякі питання, де люди випадково роблять rm -rf --no-preserve-rootабо rm -rf *, витираючи більшість або всю свою файлову систему, перш ніж вони зможуть реагувати.

Чи коли-небудь є причина використовувати --no-preserve-root, як у звичайному користуванні, як розробник чи як адміністратор?


4
Я не можу уявити жодного корисного випадку ... Я думаю, що цей варіант просто існує для ортогональності принципу UNIX (з точки зору збереження одних і тих же речей без винятків). Ви, ймовірно, хочете, щоб виняток був у випадку /, але "загальний випадок" все ж представлений. Іншими словами: «Не моя робота в моєму комп’ютері говорити мені, що робити». І цього не повинно бути.
Andreas Wiese

1
Саме там є можлива зброя, яку можна використовувати, коли SkyNet переймає на себе.
Мітч Дарт

Відповіді:


27

ВАЖЛИВО: Сучасні системи UEFI монтують мікропрограмне забезпечення під /sysкаталог і роблять його доступним для ОС. НЕ запускайте цю команду в сучасній системі, оскільки вона видалить цю прошивку, по суті, прискоривши вашу машину.


Найпростіший сценарій, про який я можу придумати, - це хтось, хто хоче видалити всі дані зі свого накопичувача. Для цього можуть бути цілком законні причини і найпростіший спосіб, який я можу придумати

rm -rf --no-preserve-root /

Виявляється, цей фактично поданий як приклад у info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Ще одна ідеально хороша причина полягає в тому, що ви хочете видалити змонтовану файлову систему, в яку ви входили chroot. У такому випадку rm -rf --no-preserve-root /буде видалено систему в chrootоточенні, але залишить вашу недоторканою.

Я впевнений, що є більше можливих причин, але загалом здається, що моя система дозволяє мені робити з нею все, що завгодно. Це моя робота бути обережним, система повинна дозволяти мені робити те, що я хочу зробити. Якщо те, що я хочу, є дурним, це моя проблема, а не проблема ОС.

Так чи інакше, це відносно нове обмеження, воно було додане в 7-й версії специфікації POSIX ( попередня - тут), до цього rm -rf /була цілком коректною командою. Як свідчить історична примітка, .і ..каталоги завжди були захищені rm, починаючи з 1979 року, коли rmвперше придбали можливість видаляти каталоги. Більше про це тут .


22
НЕ ВИКОРИСТОВУЙТЕ ЦЕ ДИСТАВЛЕННЯ ВСІХ ДАНИХ, якщо ваша система є UEFI (нові комп’ютери). Якщо це видалити всі змінні вбудованого програмного забезпечення, то материнська плата буде такою ж марною, як і цегла
Suici Doga

6
@SuiciDoga: Джерело чи додаткове пояснення? Прошивки материнської плати не повинні зберігатись на жорсткому диску, інакше вони втратяться, якщо потягнути накопичувач.
Тарка

15
@Tarka: / sys / firmware / efi / efivars / може бути встановлено, а видалення рекурсивно може видалити ці зміни. Це дійсно не повинно цеглити систему, але може. Див thenextweb.com/insider/2016/02/01 / ...
ціанистий

4
@Tarka вони не зберігаються на жорсткому диску, і потягнення диска не вплине на них. Однак з причин, які я ще не зрозумів, вони встановлені так, що насправді доступні під /.
тердон

20
Правильний спосіб очищення диска - це переформатувати його розділи (або перерозподілити його взагалі). Далеко не всі файлові системи є жорсткими дисками, тому, використовуючи rm -rf /ви, можливо, зачистите віддалену машину над чиїмсь NFS / CIFS / SSHFS кріпленням.
Score_Under

12

Існування --no-preserve-rootкомутатора полягає не в тому, щоб додати додаткову функціональність, а щоб перекрити дуже розумне зниження функціональності. Цей перемикач, ймовірно, ґрунтується на філософії, що комп'ютер повинен виконувати те, що йому сказано, і що команди повинні бути доступними для вираження будь-яких бажаних дій. Цей перемикач датував UEFI, і, виходячи з мого досвіду, я кажу, що він зараз застарів.

У сучасній практиці без цього перемикача rmкоманда уникає випадкового видалення кореневого каталогу при використанні неініціалізованої змінної або пробільного простору.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Примітка примітки: Захист не був його наміром. Згідно з блогом Sun Microsystems, видалення /каталогу неявно видалить поточний робочий каталог, що порушує особливу увагу, яка вже зроблена для каталогів .та ..каталогів. Ось чому їх комітет зі стандартів допустив цей особливий виняток - не для запобігання аварії. Ця зміна була вперше введена в Solaris 10 build 36.

http://archive.is/5lmc9


Дякуємо за посилання! Сподівався, що історичний охайний шматочок буде цитований, тому що мені було цікаво, в чому причина змін.
Камерон Ганьон

Цікава додаткова інформація - дякую
Марк

1

Можливо, це не відповідь, яку хоче оригінальний запитувач, але є випадок використання, який повинен видаляти всі файли рекурсивно з кореневого каталогу. Хоча це не через rmкоманду, вона є частиною процесу switch_root (8) під час завантаження вашої ( невбудованої ) системи Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.