Найкращим способом зрозуміти, що таке посилання, буде розгляд прикладу. Створімо (звичайний) файл:
$ pwd /home/queen/example $ ls $ touch a $ ls -il a 32555 -rw-r--r-- 1 queen queen 0 Aug 6 19:26 a
Опція -i
команди ls виводить номер inode в першому полі вихідних даних. Як бачите, до того, як ми створили файл a
, в каталозі не було файлів. Проте нас цікавить третє поле, що представляє собою кількість посилань на файл (ну... насправді посилань на inode).
Команду touch a можна розділити на два дії:
створення inode'а, якому операційна система призначила номер 32555, і який є файлом звичайного типу;
і створення посилання на цей inode з ім'ям a
в поточному каталозі /home/queen/example
. Отже, файл /home/queen/example/a
- це посилання на inode з номером 32555, і в даний час воно є єдиним: лічильник посилань показує 1
.
$ ln a b $ ls -il a b 32555 -rw-r--r-- 2 queen queen 0 Aug 6 19:26 a 32555 -rw-r--r-- 2 queen queen 0 Aug 6 19:26 b $
Ми створили інше посилання на той самий inode. Як бачите, ми не створили файл з ім'ям b
. Натомість ми просто додали інше посилання на inode під номером 32555 в тому ж каталозі і присвоїли цьому новому посиланню ім'я b
. Як бачите в інформації, виданій командою ls -l, лічильник посилань для inode'а тепер дорівнює 2, а не 1.
$ rm a $ ls -il b 32555 -rw-r--r-- 1 queen queen 0 Aug 6 19:26 b $
Ми бачимо, що навіть попри те, що ми видалили “оригінальний файл”, inode все одно існує. Але тепер єдина посилання на цей inode - це файл з ім'ям /home/queen/example/b
.
Отже, файл в UNIX® не має імені; натомість він має одне чи кілька посилань в одному чи кількох каталогах.
Самі каталоги також зберігаються в inode'ах. Кількість посилань на них збігається з кількістю їх підкаталогів. Це є наслідком того факту, що для всіх каталогів існує, як мінімум два посилання: сам каталог (відображуваний як .
) і його батьківський каталог (відображуваний як ..
). Тому каталог з двома підкаталогами матиме як мінімум чотири посилання: .
, ..
і посилання на кожен з підкаталогів.
Типовими прикладами файлів без посилань (тобто тих, що не мають імен) є мережеві підключення. Ви ніколи не побачите файла, який відповідає вашому підключення до веб-сайту Mandriva Linux , у своєму дереві файлів, в якому б каталозі ви не шукали. Аналогічно, коли ви використовуєте канал в shell
'і, inode, що відповідає цьому каналу, існує, але посилання на нього немає. Іншим прикладом використання inode'ів без імен є тимчасові файли. Ви створюєте тимчасовий файл, відкриваєте його, а потім видаляєте. Файл існує, поки його відкрито, але більше його ніхто не може відкрити (бо не існує імені для його відкриття). Звідси, якщо програма завершується аварійно, тимчасовий файл видаляється автоматично.