Команда remove (Unix)¶
remove — в операционных системах семейства Unix и в POSIX-совместимых средах обобщённое имя для операций и команд, предназначенных для удаления файлов, каталогов, записей или данных. В узком смысле под remove понимают системный вызов unlink() или команду rm, однако термин также используется в контексте других интерфейсов, таких как Remove-Item в PowerShell, метод remove() в языках программирования и операции реестра Windows.
¶Системный вызов unlink
В ядре Unix удаление файла выполняется системным вызовом unlink(), объявленным в заголовочном файле <unistd.h>. Вызов принимает путь к файлу и уменьшает счётчик жёстких ссылок на индексный дескриптор (inode). Фактическое освобождение блоков данных происходит только тогда, когда счётчик ссылок достигает нуля и ни один процесс не держит файл открытым. Если файл открыт, он продолжает существовать до закрытия последнего файлового дескриптора, после чего пространство возвращается в пул свободных блоков.
Для удаления пустого каталога используется системный вызов rmdir(), который отказывается работать, если каталог содержит записи, кроме . и ... Объединённый интерфейс remove() из стандарта C (функция remove(const char *pathname)) автоматически вызывает unlink() для файлов и rmdir() для каталогов, что делает её переносимой между Unix-системами и другими платформами, включая Windows.
¶Команда rm
Основной утилитой удаления в Unix является rm (от англ. remove), входящая в набор базовых команд POSIX. Синтаксис: rm [опции] файл.... Ключевые опции:
-f(force) — игнорировать несуществующие файлы и не запрашивать подтверждение;-i(interactive) — спрашивать подтверждение перед каждым удалением;-rили-R(recursive) — рекурсивно удалять содержимое каталогов;-v(verbose) — выводить информацию о каждом удалённом объекте;--— завершение списка опций, позволяет удалять файлы, имена которых начинаются с дефиса.
Команда rm -rf (рекурсивное принудительное удаление) считается одной из самых опасных в Unix: её ошибочное применение к корневому каталогу или домашней директории приводит к необратимой потере данных. В отличие от «Корзины» в графических средах, rm не перемещает файлы во временное хранилище, а сразу помечает блоки как свободные.
¶Отличия от других операций
В командной строке удаление часто путают с перемещением в «Корзину». В Unix-подобных системах аналогом корзины выступает команда trash-put (из пакета trash-cli) или перемещение в скрытый каталог ~/.local/share/Trash. Графические файловые менеджеры (GNOME Files, Dolphin) используют собственные реализации корзины через интерфейс GVfs, а не системный вызов unlink.
В Windows команда del (или erase) удаляет файлы без возможности восстановления, а rmdir — каталоги. В PowerShell для этих целей используется алиас Remove-Item, поддерживающий параметры -Recurse, -Force и -WhatIf.
¶Remove в языках программирования
Во многих языках высокого уровня функция удаления файла называется remove или unlink:
- C:
remove()из<stdio.h>; - Python:
os.remove()иos.unlink()(синонимы), а такжеpathlib.Path.unlink(); - Java:
Files.delete()иFiles.deleteIfExists()из пакетаjava.nio.file; - JavaScript (Node.js):
fs.unlink()иfs.rm()(с опциейrecursive); - PHP:
unlink().
Метод remove() в контейнерах стандартной библиотеки (например, std::vector::erase в C++ или list.remove() в Python) удаляет элементы по значению или позиции, что не связано с файловой системой, но использует ту же семантику исключения объекта из структуры данных.
¶Безопасное удаление и восстановление
Стандартный rm не затирает данные: он лишь удаляет запись из каталога и помечает индексный дескриптор как свободный. Сами данные остаются на диске до момента перезаписи. Для гарантированного уничтожения конфиденциальной информации применяются утилиты затирания, такие как shred (в составе GNU coreutils), wipe или dd с перезаписью случайными данными. Восстановление удалённых файлов возможно с помощью инструментов вроде extundelete, testdisk или photorec, но успех зависит от файловой системы и активности записи на диск после удаления.
¶Особенности в файловых системах
Поведение удаления зависит от типа файловой системы:
- ext4 — при удалении файла очищается запись в каталоге, но содержимое inode сохраняется до перезаписи;
- Btrfs и ZFS — используют copy-on-write и снапшоты, что позволяет откатывать удаления через снимки состояния;
- FAT32/exFAT — удаление помечает кластеры как свободные, первая буква имени файла заменяется на
0xE5; - NTFS — удаление обновляет MFT-запись, файл помечается как удалённый, но данные остаются в $MFT до дефрагментации.
¶Аналоги в других операционных системах
- MS-DOS / Windows CMD:
del,erase,deltree(в старых версиях),rmdir; - Windows PowerShell:
Remove-Item(алиасыdel,rd,rm); - OpenVMS:
DELETE; - IBM i:
DLTF(Delete File); - Android: команда
rmдоступна через ADB shell или в терминальных эмуляторах.
¶Интересные факты
- В 2016 году разработчик по имени Марко Марсетич случайно выполнил
rm -rfв корневой директории своего сервера, что привело к удалению всех данных проекта. Этот случай стал мемом в IT-сообществе. - В некоторых Unix-системах существует защита от удаления корневого каталога: команда
rm -rf /отклоняется ядром или требует флага--no-preserve-root. - Системный вызов
unlinkназван так потому, что в ранних версиях Unix файл считался «связанным» с именем в каталоге; удаление имени разрывало эту связь.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

