25.10.2023 18:01
Occul
 
Чем отличается команда rm от unlink? Давай смотреть. Обе эти команды умеют удалять, но в 99% ты используешь именно rm, потому что про unlink ты либо не слышал, либо тебе rm с головой хватает.

Есть ошибочное мнение, что unlink предназначен для удаления лишь ссылок, нифига, оно вполне может удалять обычные файлы. А если углубиться, то весь процесс удаления в Linux, это удаление ссылок.

Как устроен процесс удаления файлов в linux, расскажу в следующих постах, сегодня у нас битва rm vs unlink.

У unlink есть всего лишь два ключа запуска help и version. Очень ограниченный инструмент, но чем инструмент проще, тем проще его синтаксис.

Код:
unlink /tmp/hardlink
unlink /tmp/file
Софтина очень молчаливая — как мужик. После удаления, она промолчит и ничего не выведет на экран.

Команда unlink использует системную команду unlink, в то время как команда rm использует системный вызов unlinkat. Оба системных вызова практически одинаковы.

Unlink не умеет работать с wildcard и globbing шаблонами. Так же ты не сможешь с помощью нее удалить каталог.

Короче одни минусы. А нахрена тогда она нужна? Ооо брат, сейчас расскажу. Запускаем команду и пытаемся насильно удалить файл которого нет в каталоге:

Код:
rm -f test.txt
И получаем - НИЧЕГО. То есть rm -f не вернуло ошибку, что файл отсутствует. А если сделать так:

Код:
unlink test.txt
получаем ошибку:

Цитата:
unlink: cannot unlink 'test.txt': No such file or directory
То есть если мне нужно будет обработать результат выполнения команды rm -f, то я не буду достоверно знать, а существовал ли вообще файл. Ведь rm -f мне ничего не вернуло.

Короче с unlink можно гибче обрабатывать эксепшены в скриптах. А еще при использовании команды unlink отсутствует проверка безопасности. Она удалит файл, защищенный от записи. Хотя современная версия rm теперь тоже так умеет.

Оффтоп. Ну а если хочешь, чтобы твой файл никто не смог удалить, включая root, делай так:

Код:
chattr +i test.txt
chattr позволяет устанавливать и отключать атрибуты файлов, на уровне файловой системы не зависимо от стандартных (чтение, запись, выполнение).

Ключ i - сделает файл неизменяемым. Чтобы снять с файла этот аттрибут, в команде которая выше, замени знак «+» на «-».

Подытожим. Для большинства повседневных задач конечно rm мастхев, но если ты пишешь софт для каких-то критичных систем, стоит не упускать из виду unlink.
28.10.2023 18:04
Капитан О.
 
Команда rm и команда unlink выполняют одну и ту же функцию - удаление файла. Разница между ними заключается в том, что команда rm является командой командной строки (shell command), а команда unlink - системным вызовом (system call) в языке программирования C.

Что касается команды "m с головой хватает", информация в вопросе не вполне понятна, и контекст не позволяет понять, о какой команде речь.

Ошибка, которая упоминается в вопросе, что "x, это удаление ссылок", не является правильной. Команда unlink или rm не удаляет ссылки на файл, а удаляет сам файл. Удаление ссылок на файл происходит автоматически, когда количество ссылок становится равным нулю.

Процесс удаления файлов в ink (я предполагаю, что речь идет о команде unlink) происходит следующим образом: сначала операционная система проверяет права доступа к файлу, затем освобождает задействованные ресурсы, такие как дескрипторы файла, и удаляет саму запись о файле из файловой системы. При этом, если файл был открыт другими процессами, они могут продолжать выполняться существующими дескрипторами файла до их закрытия.

Команда "inkat", упомянутая в вопросе неизвестна и, скорее всего, не существует.
Часовой пояс GMT +3, время: 02:42.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.