Чи просто 'rm -rf' видаляє будь-які файли?


16

Я нещодавно бігав rm -rf, ні rm -rf /, але нічого не сталося. Я просто отримую такий результат:

Термінал

Мені було страшно, тому що я переживаю, що він міг би видалити деякі файли, але цього не сталося. Просто будьте впевнені, чи могло це видалити будь-які файли з мого каталогу?


36
Якщо ви не впевнені (100%), не виконуйте команди.
Сонячний Майк

5
Ніколи не вводьте команди, які ви не розумієте. Все, що вам було потрібно, - це. або а / і ви збираєтесь видаляти багато речей.
Нельсон

18
Якщо ви хочете експериментувати з потенційно небезпечними командами, подумайте про встановлення віртуальної машини.
musicman523

6
Експериментуйте все, що потрібно (до тих пір, поки ваші дані будуть безпечно створені). Це лише програмне забезпечення, і ви завжди можете його перевстановити, якщо щось піде не так. Не дозволяйте нікому навчати вас боятися комп’ютера.
варення

3
Абсолютно виконайте команду, якщо ви не впевнені на 100%. Навчитися існує лише стільки способів, і насправді їх запуск - один з них. Очевидно, у Caveat Emptor і є резервне копіювання, і ви використовуєте VM та все таке. Але якщо нічого не стратити від страху, мало допоможе вам рости. Це повинно бути очевидним, коли слід бути особливо обережними (тобто rm), але для багатьох / більшості інших команд, наприклад, для всіх команд маніпулювання текстовими командами, просто їх пробування найчастіше є найпростішим / найпростішим. Разом із вивченням сторінки чоловіка, очевидно.
AnoE

Відповіді:


49

Ні, rm -rfне буде видалено жодні файли, оскільки ви не подали аргумент команді.


5
І через -fце не помилка запустити її без аргументів. rm -rбуде скаржитися на "відсутній операнд", але -fпригнічує це, а також пригнічує помилки для файлів, які не існують. (Так, наприклад, сценарій може використовуватись rm -rf /foo/bar/*для очищення каталогу, який може бути вже порожнім, без того, 2>/dev/nullщоб видаляти помилки.)
Пітер Кордес

34

З сторінки керівництва :

rm видаляє кожен вказаний файл.

Це означає, що ви можете скористатися ним, щоб одночасно видалити список файлів, наприклад, з

rm -rf test1.txt test2.txt

На щастя, все, що ви робили, - це пропустити порожній список файлів, тому він нічого не видалив. Крім того, що говорить @SolarMike : якщо ви не знаєте, що робить команда, не виконуйте її . macOS призначений для "приховування" всіх небезпечних (але потенційно потужних) операцій Unix від кінцевого користувача.


7
FYI -rпрапор непотрібний, якщо ви не видаляєте каталоги рекурсивно. Якщо це лише файли, rmдостатньо - -fце сила для того, щоб не запитати вас "ви впевнені" для кожного файлу.
Тім С.

9
Крім того, -f призводить до того, що повідомлення про використання не відображається при неправильному використанні. Ось чому взагалі не було результатів, коли працює ОП rm -rf. Якби вони виконували 'rm -r' без вказаних файлів / каталогів, вони отримали б це повідомлення про використання: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Jan Nash

2
@barrycarter Це абсолютно не вірно - він все одно буде намагатися видалити /, він просто пропустить неіснуючий файл xyz*(який просто не розшириться через відсутність відповідності).
пухнастий

3
@barrycarter Така поведінка залежить від конфігурації вашої оболонки. Принаймні, за замовчуванням bash на macOS, він насправді видаляє, aа bдля мене - навіть без вказівки -f. Виконайте ті самі команди, echo rm -f a b c*щоб замість них побачити фактичну поведінку.
пухнастий

2
@barrycarter і пухнастий: Що станеться , залежить від того, якщо змінна оболонки nonomatch встановлюються чи ні.
Томас Падрон-Маккарті

13

Для початківців / Linux / Unix:

rm один не робить нічого, тому що ви не сказали, чого слід позбутися.

man rm Ви можете пояснити більшість цього, якщо ви це розумієте.

-r означає рекурсивний, оскільки в "включати все в папки"

-f означає примусовий режим, "не вимагайте підтвердження"

rm -rf(Не робіть цього)/ скажіть, видаліть усе під /(кореневу папку), не перевіряючи (у останніх версіях macOS SIP не дозволить вам видалити macOS цим самим, але багато іншого буде видалено)

rm [some file name] просто видалить цей файл.

rm -rf /home/myuser/booksвидалив би все в папці myuser's books, а також папку.


6
Сьогодні вам потрібно зробити, rm -rf / --no-preserve-rootщоб правильно відстріляти ногу.
Галліфрейян

1
@Gallifreyan Чи є коли-небудь спосіб правильно застрелити ногу?
PascalVKooten

1
Цей, як кажуть, працює добре. Я не знаю інших :)
Галліфрейян

1
@Gallifreyan на macOS? pastebin.com/aVAsNcKC вказує інакше
nohillside

@Gallifreyan: find / -deleteповинен "працювати" (тобто фактично видаляти речі, тому не запускайте його)
Пітер Кордес

4

Ні, але якщо ви хочете видалити Ось приклад:

Після запуску терміналу (у папці / Applications / Utilities) введіть cd ~ / Desktop для переходу до каталогу Desktop. Якщо у вас був файл з ім'ям MyFile.rtf, якого ви ніколи і ніколи не хотіли бачити знову, ви можете запустити цю команду:

rm MyFile.rtf

Коли ви натиснете кнопку Return, файл перетвориться на пуф! Зникне, тост, історія. Ви не можете його повернути.


Насправді rm видаляє всі посилання на файл, не очищає жорсткий диск файлу, перезаписуючи кожен байт, якщо я правильно розумію документацію.
NoBugs

@NoBugs Але, чесно кажучи, так працюють усі сучасні 'видалення', включаючи Windows. Якщо функція видалення перезаписує кожен байт, то вона буде рекламована як така (головним чином через те, що вона займає більше часу і є непотрібною більшість часу).
Божевільний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.