Удаляет ли просто 'rm -rf' какие-либо файлы?

16

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

Терминал

Я был напуган, потому что я боюсь, что он мог удалить некоторые файлы, но это не так. Просто убедитесь, что это могло удалить какие-либо файлы из моего каталога?

user3439894
источник
36
Если вы не уверены (определенно на 100%), не запускайте команду.
Солнечный Майк
5
Никогда не вводите команды, которые вы не понимаете. Все, что вам нужно было. или / и ты собираешься удалить МНОГО вещей.
Нельсон
18
Если вы хотите поэкспериментировать с потенциально опасными командами, рассмотрите возможность установки виртуальной машины.
musicman523
6
Экспериментируйте все, что вы хотите (при условии, что ваши данные надежно зарезервированы). Это только программное обеспечение, и вы всегда можете переустановить его, если что-то пойдет не так. Не позволяйте никому обучать вас бояться компьютера.
Хоббс
3
Абсолютно запустите команду, если вы не уверены на 100%. Есть только так много способов учиться, и на самом деле запуск их - один из них. Будьте бдительны и, конечно же, у вас есть резервные копии, и они используют виртуальные машины и все такое. Но отсутствие чего-либо из страха мало что поможет вам расти. Должно быть очевидно, когда нужно быть очень осторожным (т. Е. rm), Но для многих / большинства других команд, например, для всех команд обработки текста на основе конвейера, простое их использование часто является самым простым / простым из возможных. Вместе с изучением справочной страницы, очевидно.
AnoE

Ответы:

49

Нет, rm -rfне удалит файлы, потому что вы не указали аргумент команды.

fd0
источник
5
И из-за этого -f, это не ошибка запускать его без аргументов. rm -rбудет жаловаться на «отсутствующий операнд», но -fподавляет это, а также подавляет ошибки для файлов, которые не существуют. (Так, например, сценарий можно использовать rm -rf /foo/bar/*для очистки каталога, который уже может быть пустым, без необходимости 2>/dev/null
Питер Кордес
34

Со страницы руководства :

rm удаляет каждый указанный файл.

Это означает, что вы можете использовать его для одновременного удаления списка файлов, например, с

rm -rf test1.txt test2.txt

К счастью, все, что вы сделали, это пропустили пустой список файлов, поэтому он ничего не удалил. Кроме того, что говорит @SolarMike : если вы не знаете, что делает команда, не запускайте ее . MacOS предназначен для «скрытия» всех опасных (но потенциально мощных) операций Unix от конечного пользователя.

Глорфиндель
источник
7
К вашему сведению, этот -rфлаг не нужен, если вы не удаляете каталоги рекурсивно. Если это просто файлы, rmдостаточно - для того -f, чтобы принудительно сделать это, он не спрашивает вас «вы уверены» для каждого файла.
Тим С.
9
Кроме того, -f приводит к тому, что сообщение об использовании не отображается, если вы используете его неправильно. Вот почему не было никакого вывода вообще, когда OP бежал rm -rf. Если бы они запустили 'rm -r' без указанных файлов / каталогов, они бы получили это сообщение об использовании: JanNash ~ $ usage: rm [-f | -i] [-dPRrvW] file ... unlink file
Ян Нэш
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папку, а также папку.

s1ns3nt
источник
6
В настоящее время вам нужно правильно rm -rf / --no-preserve-rootстрелять в ногу.
Галлифреян
1
@Gallifreyan Есть ли способ правильно отстрелить ногу?
PascalVKooten
1
Говорят, что этот работает хорошо. Я не знаю других :)
Галлифреян
1
@Gallifreyan в macOS? pastebin.com/aVAsNcKC указывает на иное
нхилсайд
@Gallifreyan: find / -deleteдолжен «работать» (т.е. фактически удалять вещи, поэтому не запускайте его.)
Питер Кордес
4

Нет, но если вы хотите удалить Вот пример:

После запуска терминала (в папке / Applications / Utilities) введите cd ~ / Desktop, чтобы перейти в каталог Desktop. Если у вас есть файл с именем MyFile.rtf, который вы никогда больше не хотели видеть, вы можете запустить эту команду:

rm MyFile.rtf

Когда вы нажмете Return, файл будет испорчен! Уйдет, тост, история. Вы не можете получить это обратно.

Alvaro
источник
На самом деле rm удаляет все ссылки на файл, не чистит жесткий диск файла, перезаписывая каждый байт, если я правильно понимаю документацию.
NoBugs
@NoBugs Но, честно говоря, именно так все современные «удаляет» работу, включая Windows. Если функция удаления перезаписывает каждый байт, она будет объявлена ​​как таковая (главным образом потому, что она занимает больше времени и в большинстве случаев не нужна).
Безумный