6. Символические ссылки. Ограничения «жестких» ссылок

Здесь мы вынуждены столкнуться с очень распространенным заблуждением (даже среди пользователей UNIX®), которое является в основном следствием того, что ссылки, как мы видели ранее (неверно называемые «жесткими» ссылками), ассоциируются только с обычными файлами (и мы видели, что это не так — так как даже символические ссылки являются «связанными»). Но для этого требуется, чтобы мы сначала разъяснили, что же представляют собой символические ссылки (часто называемые «мягкими» ссылками или даже еще чаще «симлинками»).

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

$ 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' (от слова Link), т.е. он является символической ссылкой. Права доступа для символической ссылки значения не имеют: они всегда будут rwxrwxrwx. Вы также можете видеть, что она и файл myfile - это два разных файла, т.к. ее номер inode отличается. Но она ссылается на него символически, поэтому, когда вы вводите команду cat mylink, на самом деле вы выводите содержимое файла myfile. Чтобы продемонстрировать, что символическая ссылка содержит произвольную строку, мы можем сделать следующее:

$ ln -s "я не существующий файл" другойлинк
$ ls -il другойлинк
418 lrwxrwxrwx    1 queen     queen           20 Dec 10 21:43 другойлинк 
-> я не существующий файл
$ cat другойлинк
cat: другойлинк: No such file or directory
$

Но символические ссылки существуют благодаря тому, что они преодолевают несколько ограничений, присущих («жестким») ссылкам:

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

И напоследок, если вы были внимательны, то могли заметить, что размер симлинка - это просто размер строки.