Понимание жестких ссылок

Понимание жестких ссылок

Я создал файл в домашнем каталоге.

touch demo
echo "This is demo" > demo

Теперь я создал жесткую ссылку в /tmp

ln /home/leo/demo demoLink

Теперь при проверке inode с помощью

ls -ltri demoLink

Он показывает тот же номер inode, что и исходный файл. Я могу это переварить. Но тип файла Hard Link — Regular! Как это может быть обычным файлом? Чем он отличается от исходного файла? Я прочитал, что файл — это анонимный блок данных. Так что эти два файла указывают на одни и те же данные? Одинаков ли размер файла Hard Link и Original?

решение1

Жесткая ссылка на самом деле не является "ссылкой". Первая, вторая, третья, N-ная жесткая ссылка на один и тот же файл inode равны друг другу. Нет никакой разницы между "исходной записью" и "жесткой ссылкой".

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

Т.е.

cryo@CryoNest:~ $ touch file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file1

cryo@CryoNest:~ $ ln file1 file2

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ rm file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві  8 20:24 file2

cryo@CryoNest:~ $ ln file2 file1

cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві  8 20:24 file2

Как видите, номер инода (9505656) и все атрибуты, хранящиеся в иноде, одинаковы для всех жестких ссылок. Включая размер, дату, режим и т. д.

Обратите внимание на 3-е поле, это количество ссылок на inode. Это поле можно использовать для понимания "мистических" ситуаций, когда кто-то "удаляет" файл (на самом деле, одну из записей каталога жестких ссылок), но использование места не меняется :)

Если требуется найти все жесткие ссылки указанного файла, инструмент «find» имеет опцию «-inum».

cryo@CryoNest:~ $ ln file1 tmp/file3

cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./tmp/file3
  9505656  0 -rw-r--r--   2 cryo  cryo     0 кві  8 20:24 ./file1

Связанный контент