Символические ссылки. Ограничения «жестких» ссылок
Здесь мы вынуждены столкнуться с очень распространенным заблуждением (даже среди пользователей 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 “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’е, а последние не могут совместно использоваться в разных файловых системах. А симлинки позволяют сделать это.
-
Вы не можете создать ссылки на каталоги, во избежание создания циклов в файловой системе. Но вы можете создать симлинк, указывающий на каталог и использовать его так, как если бы это на самом деле был каталог.
Поэтому символические ссылки очень полезны в различных ситуациях, и очень часто люди стремятся их использовать для связывания файлов даже тогда, когда могла бы быть использована обычная ссылка. Одно из преимуществ обычного связывания состоит в том, что вы не потеряете файл, если удалите «оригинальный».
И напоследок, если вы были внимательны, то могли заметить, что размер симлинка — это просто размер строки.
1 year ago
June 16, 2010
Новая команда
Я поставил матлаб в /usr/local. Но почему-то вот такая ерунда происходит: матлаб не хочет запускаться без консоли, т. е. вызвать его можно только командой, выполненной в эмуляторе термнала. При этом, автодополнение имени команды тоже не оказалось после установки. Эту проблему раньше я решал с помощью добавления такой строки в ~/.bashrc:
alias matlab=’/usr/local/matlab/bin/matlab &’
Теперь автодополнение есть. Амперсант стоит для того, чтобы дальше можно было пользоваться консолью, в которой вводится команда, т. к. дальнейший вывод матлаба в ней я не наблюдал.
Сегодня же ко мне пришло озарение. Я как-то из водуха догадался, что автодополнение можно сделать путем создания ссылки в /usr/bin на исполняемый матлабовский файл:
ln -s /usr/local/matlab2008b/bin/matlab /usr/bin/matlab
Теперь можно вызывать матлаб без ввода полного пути, причем от любого пользователя, чего нельзя было так просто добиться первым способом.
RSS
Archive
Mobile