Я создал файл в домашнем каталоге.
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