В любой системе UNIX используются жесткие и символические ссылки.
Жесткая ссылка - это ссылка на индексный дескриптор файла. В этом смысле имя файла и есть жесткая ссылка, причем у одного файла может быть несколько разных имен в разных каталогах. Это значит, что в разных каталогах могут быть записи, ссылающиеся на один и тот же файл и, следовательно, один и тот же индексный дескриптор. Этот файл будет доступен под всеми этими именами. Число жестких ссылок на файл хранится в его индексном дескрипторе:
# ls -li file* 16852 -rw-r--r-- 2 root root 0 Mar 20 16:11 file 16852 -rw-r--r-- 2 root root 0 Mar 20 16:11 file1
В этом примере видно, что в каталоге есть два файла с разными именами, но все остальные свойства у них одинаковы. Это обусловлено тем, что файлы имеют один и тот же индексный дескриптор (его номер выводится в первом столбце).
Число в третьем столбце показывает, сколько в файловой системе есть жестких ссылок на этот файл. Физически файл один, так как местоположение содержимого файла на диске определяется индексным дескриптором. При этом можно обратиться к этому файлу, называя его разными именами. Фактически, после создания жесткой ссылки на файл определить, какое из имен было придумано раньше, невозможно. Права доступа ко всем жестким ссылкам на файл одинаковы, так как определяются одним и тем же индексным дескриптором.
Смысл жесткой ссылки состоит в возможности поместить в разные каталоги записи об одном и том же файле, без многократного копирования этого файла во все каталоги, где нужна запись о нем. При модификации файла, независимо от того, через какую именно жесткую ссылку к нему обратились, изменяется информация в самом файле. Если модифицировать файл, обратившись к нему по одному имени (через одну жесткую ссылку), и записать сделанные изменения, то при последующем обращении к нему через другую жесткую ссылку вы увидите уже новую, модифицированную информацию.
Жесткие ссылки создает команда ln:
ln старое_имя новое_имя
При создании жесткой ссылки сам файл не модифицируется, старое имя никак не изменяется, результат выполнения команды проявляется только в создании еще одного имени этого файла.
Нельзя создать жесткую ссылку на файл, который располагается на другом разделе UNIX. Это связано с тем, что каждый раздел файловой системы имеет свою таблицу индексных дескрипторов, а указать в каталоге индексный дескриптор чужого раздела невозможно. Также нельзя создать жесткую ссылку на любой каталог.
Файл в любой файловой системе UNIX считается удаленным только тогда, когда удалены все жесткие ссылки на него. Удаление жесткой ссылки выполняется командой rm и внешне ничем не отличается от удаления обычного файла.
Найти все жесткие ссылки на файл можно с помощью команды find: