linux files

rm

Удалить файлы и директории (без корзины)

Описание

rm (от remove) — команда удаления файлов и директорий. Это одна из наиболее опасных команд в Unix/Linux: удалённые файлы не попадают в корзину и, как правило, не подлежат восстановлению стандартными средствами. Команда удаляет ссылку на файл в каталоге (unlink) — данные освобождаются, когда счётчик ссылок падает до нуля и ни один процесс не держит файл открытым.

По умолчанию rm удаляет только файлы, но не директории. Для удаления директорий необходим флаг -r (рекурсивно). Сочетание rm -rf — самое мощное и самое опасное: оно рекурсивно удаляет всё без вопросов, игнорируя права доступа на запись.

Понимание rm критически важно: ошибочный rm -rf с неверным путём может уничтожить систему или важные данные за секунды. Поэтому хорошей практикой является использование -i в интерактивной работе и тщательная проверка путей перед удалением. Для «мягкого» удаления существуют утилиты типа trash-cli, которые перемещают файлы в корзину вместо немедленного удаления.

Синтаксис

rm [ОПЦИИ] ФАЙЛ... rm [ОПЦИИ] -r ДИРЕКТОРИЯ...
# Удалить файл rm file.txt # Удалить несколько файлов rm file1.txt file2.txt file3.txt # Удалить директорию rm -r mydir/ # Удалить без подтверждений (ОСТОРОЖНО!) rm -rf old_project/

Флаги и опции

Флаг Описание Пример
-r, -R, --recursive Рекурсивно удалять содержимое директорий. Обязателен для удаления директорий. rm -r old_dir/
-f, --force Игнорировать несуществующие файлы, не запрашивать подтверждений, игнорировать ошибки прав доступа rm -f *.tmp
-i Запрашивать подтверждение перед каждым удалением rm -i important.txt
-I Запрашивать подтверждение один раз при удалении более 3 файлов или при рекурсии rm -I *.log
-v, --verbose Выводить имя каждого удаляемого файла rm -rv build/
-d, --dir Удалить пустую директорию (аналог rmdir) rm -d emptydir/
--no-preserve-root Разрешить удаление корневой директории / (крайне опасно, требует явного указания) rm -rf --no-preserve-root /
--preserve-root Запретить рекурсивное удаление / (поведение по умолчанию) rm -rf --preserve-root /tmp/
-- Конец флагов: всё после -- трактуется как имена файлов (защита от имён, начинающихся с -) rm -- -weirdfile

Паттерны использования

Удалить один файл

rm file.txt
rm /tmp/tempfile.dat

Базовое удаление файла. Если файл защищён от записи, rm спросит подтверждение (если вывод в терминал).

Удалить файлы по шаблону

# Все .log файлы в текущей директории
rm *.log

# Временные файлы
rm *.tmp *.bak *~

Glob-шаблоны раскрываются оболочкой перед передачей в rm. Проверьте шаблон через ls *.log перед удалением.

Удалить директорию со всем содержимым

rm -r old_project/
rm -rf build/ dist/ __pycache__/

Флаг -r обязателен для директорий. -f подавляет запросы подтверждения. Убедитесь в правильности пути!

Интерактивное удаление (безопасный режим)

rm -i *.conf
# rm: remove 'app.conf'? y
# rm: remove 'test.conf'? n

# Одно подтверждение на всю партию
rm -I *.log

Используйте -i при удалении важных данных. -I — компромисс: подтверждение только если файлов больше 3.

Удалить файлы, найденные find

# Удалить все .pyc файлы рекурсивно
find . -name "*.pyc" -delete

# Через xargs (быстрее для большого числа файлов)
find . -name "*.tmp" | xargs rm -f

# С обработкой пробелов в именах
find . -name "*.log" -print0 | xargs -0 rm -f

Комбинация find + rm позволяет удалять файлы по сложным критериям: возрасту, размеру, правам доступа.

Удалить файл с именем, начинающимся с дефиса

# Использовать -- для завершения флагов
rm -- -oddname.txt

# Или через явный путь
rm ./-oddname.txt

Файлы, начинающиеся с -, интерпретируются rm как флаги. -- сигнализирует конец опций.

Советы и предупреждения

Совет: проверяйте шаблон через ls перед rm
Перед выполнением rm *.txt запустите ls *.txt — вы увидите точный список файлов, которые будут удалены. Это простая привычка, которая много раз спасала от случайных потерь.
Совет: trash-cli как безопасная альтернатива
Установите утилиту trash-cli (pip install trash-cli) и используйте trash file.txt вместо rm в повседневной работе. Файлы попадают в корзину и их можно восстановить через trash-restore. rm оставьте для скриптов и ситуаций, где нужно гарантированное удаление.
Совет: alias rm='rm -I' в ~/.bashrc
Добавьте alias rm='rm -I --preserve-root' в ~/.bashrc. Флаг -I задаёт одно подтверждение при удалении более 3 файлов или при рекурсии — достаточно безопасно и не раздражает при удалении одного файла.
ОПАСНО: rm -rf без тщательной проверки пути
rm -rf /wrong/path, rm -rf $UNSET_VAR/ (пустая переменная даёт rm -rf /), rm -rf . (текущая директория) — всё это необратимо. Всегда проверяйте путь визуально. В скриптах защищайтесь: проверяйте, что переменная непустая, прежде чем включать её в путь удаления.
ОПАСНО: rm -rf с glob в корне
Разница между rm -rf /tmp/myapp/* (удалить содержимое) и rm -rf /tmp/myapp * (пробел вместо / — удалит и /tmp/myapp, и всё в текущей директории) — один символ. Будьте особенно внимательны с пробелами при использовании glob в сочетании с -rf.