Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
зачет по юникс история.docx
Скачиваний:
5
Добавлен:
02.08.2019
Размер:
81.04 Кб
Скачать

Символические ссылки

Символическая, или "мягкая", ссылка обеспечивает возможность вместо путевого имени файла указывать псевдоним. Когда ядро сталкивается с символической ссылкой при поиске файла, оно извлекает из нее хранящееся в ней путевое имя. Различие между жесткими и символическими ссылками состоит в том, что жесткая ссылка — прямая, т.е. указывает непосредственно на индексный дескриптор файла, тогда как символическая ссылка указывает на файл по имени. Файл, адресуемый символической ссылкой, и сама ссылка физически являются разными объектами файловой системы.

Символические ссылки создаются командой ln -s, а удаляются командой rm. Поскольку они содержат произвольное путевое имя, то могут указывать на файлы, хранящиеся в других файловых системах, и даже на несуществующие файлы. Иногда несколько символических ссылок образуют цикл.

Символическая ссылка может содержать либо абсолютное, либо относительное путевое имя. Например, команда

In -s ../../ufs /usr/include/bsd/sys/ufs

связывает имя /usr/include/bsd/sys/ufs с каталогом /usr/include/ufs с помощью относительного пути. Каталог /usr/include можно переместить куда угодно, но символическая ссылка, тем не менее, останется корректной.

Остерегайтесь использовать обозначение ".." в путевых именах, включающих символические ссылки, поскольку по символическим ссылкам нельзя проследовать в обратном направлении. Ссылка всегда обозначает истинный родительский каталог данного файла или каталога. Например, в приведенной выше ссылке путь

/usr/include/bsd/sys/ufз/../param.h

раскрывается как

/usг/include/param.h

а не

/usr/include/bsd/sys/param.h

Распространенная ошибка — думать, будто первый аргумент команды ln -s как-то связан с текущим каталогом. На самом деле он не раскрывается командой ln, а записывается в символическую ссылку буквально.

Специальные ссылки ‘.’ и ‘..’ обозначают соответственно сам каталог и его родительский каталог. Их нельзя удалить. Поскольку у корневого каталога нет родителя, ссылка ‘..’ в нем эквивалентна ссылке ‘.’.

Имя файла хранится в родительском каталоге, а не в самом файле. На файл можно ссылаться из нескольких каталогов одновременно и даже из нескольких элементов одного и того же каталога, причем у всех ссылок могут быть разные имена. Это создает иллюзию того, что файл в одно и то же время находится в разных каталогах.

Ссылку невозможно отличить от имени файла, на который она указывает: в UNIX они идентичны. UNIX подсчитывает количество ссылок, указывающих на каждый файл, и при удалении файла не освобождает блоки данных до тех пор, пока не будет удалена его последняя ссылка. Ссылки можно задавать только в пределах одной файловой системы.

Ссылки такого рода обычно называют "жесткими", чтобы отличить их от символических ("мягких") ссылок, которые описаны ниже. Жесткие ссылки создаются командой ln, а удаляются командой rm.

Синтаксис команды ln легко запомнить, так как она повторяет работу команды ср. Команда

ср oldfile newfile

создает копию файла oldfile под именем newfile. Точно так же, команда

ln oldfile newfile

создает новую ссылку newfile на файл oldfile.

Важно понимать, что жесткие ссылки не являются отдельным типом файлов. Просто файловая система позволяет создавать ссылки на один и тот же файл в разных каталогах. Атрибуты файла, в частности права доступа и идентификатор владельца, являются общими для всех ссылок.