Разница между unink и rm на unix

Какая разница между этими двумя командами? Почему системный вызов для удаления файла с именем unlink вместо delete ?

Вам нужно немного разобраться в оригинальной файловой системе Unix, чтобы понять этот очень важный вопрос.

В отличие от других операционных систем своей эпохи (конец 60-х, начало 70-х годов) Unix не хранил имя файла вместе с фактической информацией о каталоге (где файл хранился на дисках.) Вместо этого Unix создал отдельную таблицу « Inode » для содержат информацию о каталоге и идентифицируют фактический файл, а затем разрешают отдельным текстовым файлам быть каталогами имен и инодов. Первоначально файлы каталога предназначались для манипулирования, как и все другие файлы, в виде текстовых файлов, используя те же инструменты ( cat , cut , sed и т. Д.), С которыми знакомы программисты оболочек по сей день.

Одним из важных последствий этого архитектурного решения было то, что один файл мог иметь более одного имени! Каждое вхождение inode в конкретный файл каталога по существу связывалось с inode, и поэтому оно было известно. Чтобы подключить имя файла к inode файла («фактический» файл), вы «связали» его, и когда вы удалили имя из каталога, вы «отсоединили» его.

Разумеется, отмена имени файла автоматически не означает, что вы удаляли / удаляли файл с диска, потому что файл может быть известен другими именами в других каталогах. Таблица Inode также включает в себя количество ссылок, чтобы отслеживать, сколько имен было объявлено inode (файлом); связывание имени с файлом добавляет его к счету ссылок, а отмена его удаляет. Когда количество ссылок падает до нуля, тогда файл больше не упоминается в какой-либо директории, предположительно «нежелательной», и только после этого ее можно удалить.

По этой причине «удаление» файла по имени отключает его – следовательно, имя системного вызова – и есть также очень важная команда ln для создания дополнительной ссылки на файл (на самом деле, inode файла), и пусть это будет известно другим способом.

Другие, более новые операционные системы и их файловые системы должны подражать / соблюдать это поведение, чтобы соответствовать стандарту Posix.