В Linux для удаления файлов предназначена утилита rm
(сокращение от англ. «remove» — «удалять»).
[methody@localhost methody]$ rm examples/text
[methody@localhost methody]$ ls -l text-hardlink
-rw-r--r-- 1 methody methody 653 Сен 30 10:04 text-hardlink
[methody@localhost methody]$ rm text-hardlink
[methody@localhost methody]$ ls -l text-hardlink
ls: text-hardlink: No such file or directory
Пример 16. Удаление файла
Разобравшись в ссылках, Мефодий решил удалить файл text
в каталоге examples
. После этого файл text-hardlink
в домашнем каталоге Мефодия, который является жёсткой ссылкой на удалённый файл text
продолжает благополучно существовать. Единственное отличие, которое заметил Мефодий — количество жёстких ссылок на этот файл теперь уменьшилось с «2
» до «1
» — действительно, text-hardlink
— теперь единственное имя этого файла. Получается, что Мефодий удалил только одно из имён этого файла (жёсткую ссылку), сам файл остался нетронутым.
Однако если Мефодий удалит и жёсткую ссылку text-hardlink
— у этого файла больше не останется ни одного имени, он станет недоступным пользователю файловой системы и будет уничтожен.
Утилита rm
предназначена именно для удаления жёстких ссылок, а не самих файлов. В Linux, чтобы полностью удалить файл, требуется последовательно удалить все жёсткие ссылки на него. При этом все жёсткие ссылки на файл (его имена) равноправны — среди них нет «главной», с исчезновением которой исчезнет файл. Пока есть хоть одна ссылка, файл продолжает существовать. Впрочем, у большинства файлов в Linux есть только одно имя (одна жёсткая сслылка на файл), поэтому команда rm имя файла
успешно удалит файл в большинстве случаев.
Как уже говорилось, символьные ссылки — это отдельные файлы, поэтому после того, как Мефодий удалил файл text
, text-symlink
, который ссылался на этот файл, продолжает существовать, однако теперь это — «битая ссылка», поэтому его также можно удалить командой rm
.
Мефодий решил создать каталог для разных упражнений — test
, а потом решил обойтись одним каталогом examples
. Однако команда rm
не сработала, заявив, что test
— это каталог:
[methody@localhost methody]$ mkdir test
[methody@localhost methody]$ rm test
rm: невозможно удалить `test': Is a directory
[methody@localhost methody]$ rmdir test
[methody@localhost methody]$
Пример 17. Удаление каталога
Для удаления каталогов предназначена другая утилита — rmdir
(от англ. «remove directory»). Впрочем, rmdir
согласится удалить каталог только в том случае, если он пуст: в нём нет никаких файлов и подкаталогов. Удалить каталог вместе со всем его содержимым можно командой rm
с ключом «-r
» (recursive). Команда rm -r каталог
— очень удобный способ потерять в одночасье все файлы: она рекурсивно обходит весь каталог
, удаляя всё, что попадётся: файлы, подкаталоги, символьные ссылки... а ключ «-f
» (force) делает её работу ещё неотвратимее, так как подавляет запросы вида «удалить защищённый от записи файл», так что rm работает безмолвно и безостановочно.
«Рекурсивно» по отношению к каталогам обозначает, что действие будет произведено над самим каталогом, его подкаталогами, подкаталогами его подкаталогов и т. д.
Помните: если вы удалили файл, значит, он уже не нужен, и не подлежит восстановлению!
В Linux не предусмотрено процедуры восстановления удалённых файлов и каталогов. Поэтому стоит быть очень внимательным, отдавая команду rm
и, тем более, rm -r
: нет никакой гарантии, что удастся восстановить случайно удалённые данные. Узнав об этом, Мефодий не огорчился, но подумал, что впредь будет удалять только действительно ненужные файлы, а всё сомнительное — перемещать с помощью mv
в подкаталог ~/tmp
, где оно не будет мозолить глаза, и где можно периодически наводить порядок.