Проверить шаблон до удаления
Шаблон раскрывает оболочка (см. globbing), и ls с тем же шаблоном покажет
ровно тот список, который получит rm.
Команда rm удаляет файлы и каталоги сразу и без корзины; ключи -i и -I спрашивают, -r удаляет дерево.
rm notes.txt
удалить файл
rm -i *.log
спрашивать про каждый файл
rm -I *.log
спросить один раз, если файлов больше трёх
rm -r old-project
каталог со всем содержимым
rm -rf build/
без вопросов и без ошибок о несуществующем
rm -d empty-dir
пустой каталог (как rmdir)
rm -v *.tmp
печатать каждое удаление
rm -- -file.txt
имя, которое начинается с минуса
ls *.log && rm -i *.log
сначала посмотреть, потом удалить
rm (remove) удаляет имена файлов из каталога. Корзины в терминале нет: удалённое
не лежит где-то ещё, и команды «вернуть» тоже нет.
Каталог rm удаляет только с -r (рекурсивно, вместе с содержимым) или, если он
пуст, с -d. Ключ -f (force) убирает вопросы и ошибки о несуществующих файлах:
rm -rf молча удалит всё, что сможет.
Для удаления нужно право записи в каталог, где лежит файл. Права самого файла
решают только одно: спросит ли rm подтверждение у файла, защищённого от
записи.
Полный список — man rm. На практике хватает -i, -I, -r, -f, -v.
| Ключ | Что делает | Пример |
|---|---|---|
-r |
Удалить каталог вместе со всем содержимым (то же — -R). | rm -r old-project |
-f |
Не спрашивать и молчать о несуществующих файлах. опасно | rm -rf build/ |
-i |
Спрашивать подтверждение перед каждым удалением. | rm -i *.log |
-I |
Спросить один раз — если файлов больше трёх или удаление рекурсивное. | rm -I *.log |
-v |
Печатать каждое удаление — removed 'x'. | rm -v *.tmp |
-d |
Удалить пустой каталог. | rm -d empty-dir |
--one-file-system |
При рекурсивном удалении не заходить на другие смонтированные разделы. | rm -r --one-file-system /mnt/old |
Ничего не найдено. Попробуй запрос короче.
Шаблон раскрывает оболочка (см. globbing), и ls с тем же шаблоном покажет
ровно тот список, который получит rm.
rm не умеет выбирать по дате и размеру — это работа find.
rm -rf с пустой переменной${VAR:?} останавливает команду, если переменная пуста или не задана.
Аргумент — каталог. Пустой удаляет rm -d, с содержимым — rm -r (сначала
посмотри, что внутри: ls -R dir).
Нет права записи в каталог, где лежит файл. Посмотри ls -ld $(dirname путь).
Системные файлы удаляют через sudo rm, но сначала убедись, что файл не нужен
пакету или службе.
У файла нет права w. rm спрашивает, а не отказывает: ответь y или удали с
-f, если уверен.
На файле стоит атрибут «неизменяемый» (lsattr файл покажет i) или это чужой
файл в каталоге с битом t, как /tmp. Снять атрибут: sudo chattr -i файл.
Файл ещё открыт процессом: имя удалено, данные — нет. Найди держателя:
sudo lsof +L1 — см. lsof и disk-usage. Место вернётся после перезапуска
этого процесса.
Под шаблон попало слишком много файлов для одной команды. Удаляй через find:
find . -name '*.tmp' -delete.
rm не переносит файлы в корзину. Если файл не в резервной копии и не в git,
считай, что его больше нет. Перед массовым удалением — ls с тем же шаблоном или
rm -I.
rm -rf с пробелом или пустой переменнойrm -rf / tmp/build (лишний пробел) просит удалить корень. От / защищает
встроенная проверка (it is dangerous to operate recursively on '/'), но от
/*, ~ и . защиты нет: rm -rf "$DIR"/* при пустом $DIR превращается в
rm -rf /*. Пиши "${DIR:?}" и читай команду целиком перед Enter.
Есть неточность? Сообщить об ошибке в статье