Я хотел бы узнать все пути, которые имеют одинаковый номер inode, я нашелls — Список всех файлов с одинаковым номером inode? - Unix & Linux Stack ExchangeОднако ответ предполагает обход всей файловой системы, содержащей inode, с помощью find
утилиты, что нецелесообразно для файловых систем с большим количеством файлов.
Поскольку информация о жесткой ссылке должна храниться в определенной структуре данных файловой системы, возможно ли извлечь такую информацию напрямую с помощью утилиты, специфичной для файловой системы?
решение1
Это было бы возможно только в том случае, если бы сам inode содержал местоположение каждого связанного объекта. Это непрактично, поскольку требует нескольких дополнительных обновлений (и шагов проверки) самого inode в случае, если один из файлов перемещается в структуре каталогов. Наличие фактических путей к файлам в inode означало бы гораздо больше накладных расходов в inode, поскольку ему пришлось бы динамически изменять свой размер, чтобы компенсировать изменения путей или переименования, а размер inode мог бы сильно варьироваться.
Вместо этого inode содержит только количество ссылок, а не куда или откуда. Это количество ссылок может быть одним 32-битным полем и не приводит к изменению размера inode, его можно обновить «на месте», а не загружать, изменять и затем снова сохранять весь элемент в другом месте.
Единственное место, где указан номер inode, — это сам объект каталога. Помните, что каталоги по сути являются просто специальными файлами, которые связывают другие файлы вместе. Таким образом, при перемещении файла количество ссылок остается прежним, и это всего лишь пара обновлений каталога. При удалении или добавлении это изменение каталога и незначительное обновление inode.
В результате, как вы уже обнаружили, единственный способ — это обойти всю файловую систему в поисках вхождений этого inode.