И да и нет :-)
В UNIX содержимое файла отличается от записей каталога для этого файла. У вас может быть несколько записей каталога, указывающих на одно и то же содержимое (описание того, как работает) и вот хитрый момент:
Все эти записи каталога одинаковы. Хотя одна из них может быть создана первой, в ней нет ничего особенного. Если вы удалите его, содержимое не исчезнет, только запись в каталоге. Содержимое исчезнет, как только индексный дескриптор будет иметь нулевые записи каталога, указывающие на него (и все процессы закроют файл - раньше я был укушен, пытаясь очистить место на диске, удаляя файлы журнала, только чтобы найти это, потому что процесс все еще имеет файл 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
, а не на его индексный дескриптор, вы получаете сообщение об ошибке при попытке его использования.
В сторону: вам должно нравиться, когда UNIX играет с вами вот так:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
Почти так же весело, как создать файл с именем spacebackspacex, а затем наблюдать, как кто-то пытается его удалить :-)
person
paxdiablo
schedule
11.05.2010