Как найти файл – это жесткая ссылка или символическая ссылка?

У меня есть файл в ~/file.txt .

Я создал жесткую ссылку:

 ln ~/file.txt ~/test/hardfile.txt 

и файл символической ссылки:

 ln -s ~/file.txt ~/test/symfile.txt 

Теперь,

  1. Как я могу узнать, какой файл является жесткой ссылкой?
  2. Как узнать, какая жесткая ссылка следует за файлом?

Мы можем найти файл symlink через -> , но как насчет жесткой ссылки?

введите описание изображения здесь

 -rw--r--r-- 2 kamix users 5 Nov 17:10 hardfile.txt ^ 

Это количество жестких ссылок, которые имеет файл. «Жесткая ссылка» на самом деле находится между двумя каталогами; это действительно тот же файл. Вы можете сказать, посмотрев на результат stat :

 stat hardlink.file | grep inode Device: 805h/2053d Inode: 1835019 Links: 2 

Обратите внимание, что число ссылок равно 2, что указывает на наличие другого листинга для этого файла. Причина, по которой вы знаете это, – это тот же файл, что и другой, у них одинаковый номер inode; ни один другой файл не будет иметь этого. К сожалению, это единственный способ их найти (по номеру inode).

Есть несколько идей о том, как лучше всего найти файл inode (например, с помощью find ) в этом Q & A.

В жестком связанном файле имеется более одной ссылки ( 2 после флажков разрешений). Вы можете использовать команду stat чтобы легко извлечь эту информацию:

 $ stat --printf '%h\n' hardfile.txt 2 

См. man 1 stat страницу для stat ( man 1 stat ) для получения информации о других значениях и способах их печати.