Материал предоставлен http://it.rfet.ru

Удаление файлов и каталогов

В Linux для удаления файлов предназначена утилита rm (сокращение от англ. ”remove” - ”удалять”):

[ivan@localhost ivan]$ rm examples/text
[ivan@localhost ivan]$ ls -l text-hardlink
-rw-r--r-- 1 ivan ivan 653 Сен 30 10:04 text-hardlink
[ivan@localhost ivan]$ rm text-hardlink
[ivan@localhost ivan]$ ls -l text-hardlink
ls: text-hardlink: No such file or directory

Пример 4.16. Удаление файла

Разобравшись в ссылках, Иван решил удалить файл text в каталоге examples. После этого файл text-hardlink в домашнем каталоге Ивана, который является жесткой ссылкой на удаленный файл text, продолжает благополучно существовать. Единственное отличие, которое заметил Иван - количество жестких ссылок на этот файл теперь уменьшилось с ”2” до ”1” - действительно, text-hardlink - теперь единственное имя этого файла. Получается, что Иван удалил только одно из имен этого файла (жесткую ссылку) - сам же файл остался нетронутым.

Однако если Иван удалит и жесткую ссылку text-hardlink, у этого файла больше не останется ни одного имени, он станет недоступным пользователю файловой системы и будет уничтожен.

Утилита rm предназначена именно для удаления жестких ссылок, а не самих файлов. В Linux, чтобы полностью удалить файл, требуется последовательно удалить все жесткие ссылки на него. При этом все жесткие ссылки на файл (его имена) равноправны - среди них нет “главной”, с исчезновением которой исчезнет файл. Пока есть хоть одна ссылка, файл продолжает существовать. Впрочем, у большинства файлов в Linux есть только одно имя (одна жесткая ссылка на файл), поэтому команда rm имя_файла в большинстве случаев успешно удаляет файл.

Как уже говорилось, символьные ссылки - это отдельные файлы, поэтому после того, как Иван удалил файл text, text-symlink, который ссылался на этот файл, продолжает существовать, однако теперь это - ”битая ссылка”, поэтому его также можно удалить командой rm.

Иван решил создать каталог для разных упражнений - test, а потом решил обойтись одним каталогом examples. Однако команда rm не сработала, заявив, что test - это каталог:

[ivan@localhost ivan]$ mkdir test
[ivan@localhost ivan]$ rm test
rm: невозможно удалить `test': Is a directory
[ivan@localhost ivan]$ rmdir test
[ivan@localhost ivan]$

Пример 4.17. Удаление каталога

Для удаления каталогов предназначена другая утилита - rmdir (от англ. ”remove directory”). Впрочем, rmdir согласится удалить каталог только в том случае, если он пуст: в нем нет никаких файлов и подкаталогов. Удалить каталог вместе со всем его содержимым можно командой rm с ключом -r (recursive). Команда rm -r каталог - очень удобный способ потерять в одночасье все файлы: она рекурсивно обходит весь каталог, удаляя все, что попадется: файлы, подкаталоги, символьные ссылки... а ключ -f (force) делает ее работу еще неотвратимее, так как подавляет запросы вида “удалить защищенный от записи файл”, так что rm работает безмолвно и безостановочно.

Помните: если вы удалили файл, значит, он уже не нужен, и не подлежит восстановлению!

В Linux не предусмотрено процедуры восстановления удаленных файлов и каталогов. Поэтому стоит быть очень внимательным, отдавая команду rm и, тем более, rm -r: нет никакой гарантии, что случайно удаленные данные удастся восстановить. Узнав об этом, Иван не огорчился, но подумал, что впредь будет удалять только действительно ненужные файлы, а все сомнительное - перемещать с помощью mv в подкаталог ~/tmp, где оно не будет мешать, и где можно периодически наводить порядок.

Символьные ссылкиТесты по теме: "Работа с файловой системой"