Ссылки
В любой системе 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:
find откуда_искать -inum номер_индексного_дескриптора_файла
Например, find / -inum 16852.
Символическая ссылка - это запись в каталоге, ссылающаяся на файл с определенным именем. Фактически, символическая ссылка - это отдельный файл типа "символическая ссылка", и индексный дескриптор этого файла содержит только путь к файлу или каталогу, на который указывает ссылка:
ls -l lrwxrwxrwx 1 root root :. qq ->/usr/home/qq
Можно создать символическую ссылку на любой каталог, а также на файл, находящийся в другом разделе UNIX. Символическая ссылка является аналогом ярлыка (shortcut) в системах Windows. При удалении символической ссылки с файлом или каталогом, на который она ссылается, ничего не происходит. При удалении файла, на который указывает символическая ссылка, она "повисает в воздухе", ссылаясь на пустоту. В последнем случае при обращении к такой "пустой" ссылке возникнет ошибка file not found, несмотря на то, что сама ссылка будет видна и доступна в списке файлов.
Обычно по команде ls -l выдается не только информация о типе файла 1, если это символическая ссылка, но и указывается, на что она ссылается. Если эта информация не появилась, попробуйте дать команду ls -F. В разных системах UNIX ключи программы ls могут незначительно отличаться.