Здесь мы должны обратить внимание на очень распространенное заблуждение (даже среди пользователей UNIX), которое появилось главным образом вследствие того, что ссылки, как мы видели раньше, (неправильно называемые “жесткими (hard)” ссылками), связаны только с обычными файлами (и мы видели, что это не имеет место для – тем более что даже символические ссылки связаны). Но это требует, чтобы мы сначала объяснили, что такое символические ссылки (“soft” ссылки или чаще “symlinks”).
Символические ссылки - это файлы специфического типа. Единственное, что содержится в символических ссылках - это произвольная строка, которая может указывать (или не указывать) на существующий файл. Когда вы обращаетесь к символической ссылке из командной строки или из программы, фактически, вы обращаетесь к файлу, на который она указывает (разумеется, если символическая ссылка указывает на существующий файл). Например:
$ echo Hello >myfile $ ln -s myfile mylink $ ls -il total 4 169 -rw-rw-r-- 1 queen queen 6 Dec 10 21:30 myfile 416 lrwxrwxrwx 1 queen queen 6 Dec 10 21:30 mylink -> myfile $ cat myfile Hello $ cat mylink Hello |
вы можете видеть, что файл mylink имеет тип 'l' что обозначает что он является символической ссылкой. Права доступа для символической ссылки не имеют значения: они будут всегда rwxrwxrwx. вы можете также видеть, что myfile и mylink - это два различных файла, поскольку их inode имеют различный номер. Фактически, при выполнении команды cat mylink, вы получите содержимое файла myfile. Для демонстрации того, что символическая ссылка может содержать произвольную строку, давайте проделаем следующее:
$ ln -s "I'm no existing file" anotherlink $ ls -il anotherlink 418 lrwxrwxrwx 1 queen queen 20 Dec 10 21:43 anotherlink -> I'm no existing file $ cat anotherlink cat: anotherlink: No such file or directory $ |
Символические ссылки существуют потому, что они преодолевают некоторые ограничения, накладываемые при использовании жестких ссылок:
вы не можете создать жесткую ссылку к inode в каталоге, который находится на другой файловой системе. Причина проста: счетчик ссылки сохраняется непосредственно в inode и не может совместно использоваться в различных файловых системах. Мягкие ссылки (symlinks) позволяют это.
вы не можете сделать жесткую ссылку на каталог, поскольку мы видели, что счетчик ссылок для каталога используется для других целей. Но вы запросто можете сделать symlink на каталог и пользоваться этим симлинком точно также, как вы пользуетесь обыкновенным каталогом.
Поэтому символические ссылки (symlink) незаменимы во многих случаях. Часто люди используют симлинки даже тогда, когда можно обойтись использованием обыкновенных ссылок. Одно из преимуществ обыкновенных линков состоит в том, что при удалении “оригинального файла” вы не теряете содержимое файла.
Если вы внимательно следили за сказанным выше, то вы уже знаете что размер файла симлинка равен длине строки, содержащейся в симлинке, то есть равен длине названия