У системах у стилі Unix структура даних, що представляє об'єкти файлової системи (іншими словами, дані про файл), зберігається у тому, що називається "inode".
Ім'я файлу - це лише посилання на цю індею і називається "жорсткою посиланням". Немає різниці між іменем, яким подається файл, і будь-яким наступним посиланням. Отже, відповідь "так": жорстке посилання - це звичайний файл, і, дійсно, звичайний файл - це жорстке посилання.
ls
Команда покаже вам , скільки важко посилань є в файл.
Наприклад:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Тут ми створили файл під назвою /tmp/hello.txt
. 1
У висновку ls -l
показує , що існує 1 жорстка посилання на цей файл. Це жорстке посилання - саме ім'я файлу /tmp/hello.txt
.
Якщо ми зараз створимо ще одне тверде посилання на цей файл:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
тепер ви бачите, що обидві назви файлів вказують, що на файл є 2 жорстких посилання. Жодне з них не є "належним" ім'ям файлу, вони обоє однаково справедливі. Ми можемо бачити, що вони обоє вказують на один і той же індед (у даному випадку 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Існує загальна помилка, що для каталогів це різне. Я чув, як люди кажуть, що кількість посилань, повернутих ls
для каталогу, - це кількість підкаталогів, у тому числі .
і ..
яка невірна . Або, принаймні, поки він дасть вам правильну кількість, це правильно з неправильних причин!
Якщо ми створимо каталог і зробимо це ls -ld
:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
Це показує, що до цього каталогу є 2 важких посилання. Це:
/tmp/testdir
/tmp/testdir/.
Зауважте, що /tmp/testdir/..
це не посилання на цей каталог, це посилання на /tmp
. І це говорить про те, чому працює "кількість підкаталогів". Коли ми створюємо новий підкаталог:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
тепер ви можете бачити, що є три жорсткі посилання на /tmp/testdir
каталог. Це:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Таким чином, кожен новий підкаталог збільшуватиме кількість посилань на одиницю через ..
запис, який він містить.