Жорсткі та Символьні посилання в Linux

 5250

Посилання в Unix-подібних системах — це свого роду вказівник, схожий до вказівників в мовах програмування, за винятком того, що він вказує на файл або каталог. Посилання дають змогу декільком іменам файлів посилатись на один і той же файл, розміщений десь в іншому місці. У Linux-системах існують два типи посилань: символьне (або “мʼяке”, “символічне”) та жорстке посилання.

Жорсткі посилання (Hard links)

Уявімо, що нам потрібно зробити копію файлу. В процесі копіювання створиться новий файл. Його дані будуть скопійовані у вільне місце на диску, а для файлу система призначить унікальний ідентифікатор — індексний номер (скор. “inode” від англ. index node“).

Створюючи жорстке посилання (англ. “hard link”) на файл, ми привʼязуємось до його індексного номеру і отримуємо той же файл (з новим іменем), на котрий вказує посилання, але без копіювання файлу.

Для створення жорсткого посилання використовується команда ln (від англ. link”), що має простий синтаксис:

$ ln цільовий_файл назва_посилання

Для прикладу створимо посилання з іменем hardlink1, що вказує на вже існуючий файл file1:

$ ln file1 hardlink1

Щоб впевнитись, що file1 та посилання hardlink1 є одним і тим же обʼєктом файлової системи, порівняємо їх індексні номери, виконавши команду ls разом з опціями -l (показати розширену інформацію), -i (показувати inode) та -h (використовувати букви для позначень розмірів):

$ ls –lih

Результат:

Як можна помітити, індексні номери file1 і hardlink1 є ідентичними — 5928960. Тепер давайте створимо ще одне посилання і глянемо, як буде поводити себе лічильник посилань (число після групи встановлених дозволів файлів):

$ ln file1 hardlink2
$ ls –lih

Результат:

Зверніть увагу, тепер лічильник посилань показує цифру 3 замість 2.

Символьні посилання (Symbolic links)

Символьне посилання (скор. “symlink” від англ. symbolic link), на відміну від жорсткого посилання, вказує не на індексний номер файлу, а на його імʼя (шлях). Символьне посилання є схожим до ярликів у Windows-системах.

Символьне посилання можна створити тією ж командою ln, додавши до неї параметр -s:

$ ln -s file1 symlink1

При цьому буде створено новий (!) обʼєкт файлової системи з іменем symlink1, що вказує на вже існуючий файл file1:

Літера l в групі прав доступу до файлу дає зрозуміти те, що даний файл є символьним посиланням на інший файл. Це відображено і в назві файлу — symlink1 -> file1.

Порівняємо індексні номери file1, hardlink1, hardlink2 та symlink1:

Як бачимо, індексний номер symlink1 відрізняється від інших номерів, тому що для файлової системи це вже два незалежні обʼєкти. Також бачимо різницю в наборі прав.

Жорсткі посилання vs. Символьні посилання

Нижче представлено основні відмінності між жорсткими та символьними (м’якими) посиланнями.

Жорсткі посилання:

   не можуть виходити за межі файлової системи (тобто жорстке посилання працює тільки в межах своєї файлової системи);

   не можна використовувати з директоріями;

   містять inode та дозволи вихідного файлу;

   дозволи оновлюються при зміні дозволів вихідного файлу;

   пов’язані з вмістом вихідного файлу. Якщо ви створите жорстке посилання на файл та внесете зміни у вміст файлу (або посилання), то зміни будуть присутні в обох обʼєктах;

   за допомогою жорсткого посилання можна переглядати вміст файлу, навіть якщо вихідний файл переміщено або видалено.

Символьні (м’які) посилання:

   можуть виходити за межі файлової системи;

   можна використовувати з директоріями;

   мають власні (окремі) inode та права доступу;

   дозволи не оновлюються;

   пов’язані лише з іменем (шляхом) вихідного файлу, а не з його вмістом;

   можна змінити імʼя, атрибути самого посилання або перенаправити посилатися на інший файл, і при цьому вихідний файл залишиться незмінним (але майте на увазі, що у випадку, коли ви через посилання відкриєте сам файл для редагування, то зміни внесуться безпосередньо у вихідний файл).

Видалення посилань

Якщо ви видалите жорстке посилання, то пов’язаний з ним файл існуватиме до тих пір, поки існує хоча б одне жорстке посилання на нього. Якщо ви видалите вихідний файл, але при цьому в іншому місці залишиться жорстке посилання на нього, то “зміниться” каталог розміщення файлу. В якості прикладу додамо в наш file1 рядок "Welcome to aCode.com", видалимо файл, а після цього спробуємо звернутися до жорсткого посилання hardlink2:

Зверніть увагу, навіть попри те, що вихідного файлу вже немає, ми і досі можемо отримати доступ до його вмісту, використовуючи жорстке посилання.

З символьними посиланнями все працює трохи по-іншому. При видаленні файлу, на який вказує символьне посилання, саме посилання стає неактивним. Наприклад, видалимо файл file1, на який у нас є символьне посилання symlink1:

$ rm file1

Символьне посилання перетвориться на “бите” посилання, яке вказує на неіснуючий файл. Якщо спробувати до нього звернутися, то система поверне повідомлення про помилку:

petro@pc:~$ file file1
file1: cannot open `file1' (No such file or directory)
petro@pc:~$ file symlink1
symlink1: broken symbolic link to file1
petro@pc:~$

Висновки

Посилання є невідʼємною частиною Linux-систем, і призначені для зручної організації навігації по файлових системах. Якщо у вас залишилися запитання, не соромтесь їх писати в коментарях!

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (7 оцінок, середня: 4,43 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *