Жесткие и символические ссылки в Linux

В UNIX-системах, к которым относится и Linux, используется принцип «все является файлом» (собственно файлы, диски, устройства и т.д.). Для расширения возможностей управления доступом к файлам и устройствам используется механизм ссылок. Существуют жесткие и символические ссылки. В данном руководстве мы на простых примерах рассмотрим различия между ними.

Для создания ссылок используется команда 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

Должно быть выведено содержимое файла, в примере это  «тестовый файл».

  1. Исходя из рассмотренных примеров можно сделать следующий вывод:
  2. Жесткие ссылки используют один номер инода.
  3. Команда ls -l показывает все ссылки, а в столбце ссылок выводит их количество.
  4. У файлов ссылок есть реальное содержимое
  5. Удаление любой ссылки уменьшает количество ссылок, но никак не влияет на другие ссылки.
  6. Нельзя создать жесткую ссылку на директорию.
  7. Даже при удалении оригинального файла жесткая ссылка будет показывать содержимое.

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

Символическая, или мягкая ссылка – это действительно ссылка на оригинальный файл (аналогичная ярлыкам в Windows-системах). Символическая ссылка указывает на оригинальный файл, поэтому при удалении этого файла символическая ссылка перестанет работать. При удалении символической ссылки с файлом ничего не произойдет. Это связано с тем, что инод самого файла или директории отличается от инода файла, создаваемого для символической ссылки. Символические ссылки могут связывать разные файловые системы.

Создадим символическую ссылку (опция -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

Таким образом, основные особенности символических ссылок следующие:

  1. Символические ссылки используют различные номера инодов.
  2. Команда ls -l показывает все ссылки со значением 1 во втором столбце, а ссылка указывает на оригинальный файл.
  3. Символическая ссылка содержит путь к оригинальному файлу, но не его содержимое.
  4. Удаление символической ссылки ни на что не влияет, но при удалении оригинального файла она становится «пустой» ссылкой на несуществующий файл.
  5. Можно создать символическую ссылку на директорию.

Заключение

Мы разобрали ключевые различия между жесткими и символическими ссылками. Это поможет вам лучше разобраться с доступом к файлам и запуском программ. Для более подробной информации о команде ln и ее опциях можно обратиться к соответствующей man-странице.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Adblock detector