В UNIX-системах, к которым относится и Linux, используется принцип «все является файлом» (собственно файлы, диски, устройства и т.д.). Для расширения возможностей управления доступом к файлам и устройствам используется механизм ссылок. Существуют жесткие и символические ссылки. В данном руководстве мы на простых примерах рассмотрим различия между ними.
Для создания ссылок используется команда ln. Ее синтаксис следующий:
ln [ОПЦИИ] <источник> <ссылка>
Жесткие ссылки
Жесткая ссылка работает как зеркальная копия оригинального файла. Эти ссылки используют одни и те же индексные дескрипторы (иноды). Изменения в одном из файлов, связанных жесткой ссылкой, отразятся в другом. При удалении жесткой ссылки с другим файлом ничего не произойдет. Жесткие ссылки не могут связывать различные файловые системы. Синтаксис для создания жесткой ссылки следующий
ln <источник> <ссылка>
В качестве источника может быть только файл, но не каталог.
Примеры жестких ссылок
Создадим директорию Test и файл sample1 внутри нее:
$ mkdir Test $ cd Test $ echo "тестовый файл" > sample1
Теперь создадим жесткую ссылку на sample1 и назовем ее sample 2:
$ ln sample1 sample2
При помощи опции –i команды ls отобразим номера инодов для обоих файлов:
$ ls -il sample1 sample2
Получим следующий результат:
Из результата видно, что у обоих файлов sample1 и sample2 один номер инода (13058490). Кроме того, у файлов одинаковый размер и права доступа.
Теперь удалим оригинальный sample1
$ rm sample1
После удаления связанного жесткой ссылкой оригинального файла проверим содержимое «ссылки» sample2:
$ cat sample2
Должно быть выведено содержимое файла, в примере это «тестовый файл».
- Исходя из рассмотренных примеров можно сделать следующий вывод:
- Жесткие ссылки используют один номер инода.
- Команда ls -l показывает все ссылки, а в столбце ссылок выводит их количество.
- У файлов ссылок есть реальное содержимое
- Удаление любой ссылки уменьшает количество ссылок, но никак не влияет на другие ссылки.
- Нельзя создать жесткую ссылку на директорию.
- Даже при удалении оригинального файла жесткая ссылка будет показывать содержимое.
Символические ссылки
Символическая, или мягкая ссылка – это действительно ссылка на оригинальный файл (аналогичная ярлыкам в Windows-системах). Символическая ссылка указывает на оригинальный файл, поэтому при удалении этого файла символическая ссылка перестанет работать. При удалении символической ссылки с файлом ничего не произойдет. Это связано с тем, что инод самого файла или директории отличается от инода файла, создаваемого для символической ссылки. Символические ссылки могут связывать разные файловые системы.
Синтаксис для создания символической ссылки такой же как и для создания жесткой ссылки, только используется опция «-s»
ln -s <источник> <ссылка>
В качестве источника может быть файл или каталог.
Примеры символических ссылок
Создадим символическую ссылку (опция -s) на sample2 из предыдущего раздела при помощи следующей команды:
$ ln -s sample2 sample3
Отобразим номера инодов для обоих файлов:
$ ls -il sample2 sample3
Результат будет следующим:
1482256 -rw-r--r-- 1 user user 21 May 5 15:55 FileB 1482226 lrwxrwxrwx 1 user user 5 May 5 16:22 FileC -> FileB
Видно, что номера инодов разные, а у символической ссылки другие права доступа (rwxrwxrwx), перед которыми указано l, так как это символическая ссылка.
Теперь можно вывести содержимое файла и символической ссылки:
$ cat sample2
$ cat sample3
Удалим оригинальный файл
$ rm sample2
А затем проверим содержимое директории Test:
$ ls
В ней еще будет символическая ссылка sample3, но при попытке вывести ее содержимое вы получите сообщение об отсутствии такого файла или директории:
$ cat sample3
Таким образом, основные особенности символических ссылок следующие:
- Символические ссылки используют различные номера инодов.
- Команда ls -l показывает все ссылки со значением 1 во втором столбце, а ссылка указывает на оригинальный файл.
- Символическая ссылка содержит путь к оригинальному файлу, но не его содержимое.
- Удаление символической ссылки ни на что не влияет, но при удалении оригинального файла она становится «пустой» ссылкой на несуществующий файл.
- Можно создать символическую ссылку на директорию.
Заключение
Мы разобрали ключевые различия между жесткими и символическими ссылками. Это поможет вам лучше разобраться с доступом к файлам и запуском программ. Для более подробной информации о команде ln и ее опциях можно обратиться к соответствующей man-странице.