Да, и нет :-)
В UNIX, содержимое файла отличаются от записей каталога для этого файла. Вы можете иметь несколько записей в каталоге, указывающих на одно и то же содержимое (посмотрите, как это работает) inode, и вот этот сложный бит:
Все эти записи в каталоге равны. Несмотря на то, что, возможно, сначала было создано, в этом нет ничего особенного. Если вы удалите его, содержимое не исчезнет, просто запись в каталоге. Содержимое исчезнет после того, как inode имеет нулевые записи в каталоге, указывающие на него (и все процессы закрывают файл). Я уже был укушен, пытаясь очистить дисковое пространство, удаляя файлы журнала только, чтобы найти это, потому что у процесса все еще есть файл open, содержимое файла не восстанавливается, хотя никакие записи в каталоге не указывают на них).
Это для жестких ссылок.
Сопряженные ссылки немного сложнее. Они создают «файл» рода (отдельный индексный дескриптор), содержащий путь к целевому файлу. И те ссылки не равный. Удаление оригинала оставит вас с мягкой ссылкой, нигде не указывая.
Поскольку иноды уникальны в данной файловой системе, жесткие ссылки не могут ссылаться на данные в другой файловой системе.
Сопряженные ссылки не имеют этого ограничения, так как они сохраняют путь к целевому файлу, а не его inode.
Следующая запись может помочь:
$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
hello
$ cat f2
hello
$ cat f3
hello
$ rm f1
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
cat: f1: No such file or directory
$ cat f2
hello
$ cat f3
cat: f3: No such file or directory
Я использовал только последние четыре цифры номера инода сохранить запись коротких (и не ударил вас с номерами индексных дескрипторов, как 43910096366994672
), но вы можете увидеть что f1
и f2
имеют одинаковый индекс, тогда как f3
отличается.Вы также можете увидеть, что содержимое файла, созданного изначально как f1
, сохранило его удаление, потому что f2
все еще ссылается на него.
Однако, поскольку f3
ссылается на имя f1
, а не на его inode, вы получаете сообщение об ошибке, пытающейся его использовать.
Помимо: Вы должны любить его, когда UNIX игрушки с вами, как это:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
Почти столько же удовольствия, как создать файл с именем пространствазабойх, а затем наблюдая, как кто-то пытается его удалить :-)
'rm \'? Я не вижу, как бы пространство backspace (^?) Сделало бы его более сложным :) –
Unode