Почему find -inum перебирает все дерево файловой системы?

Меня удивляет, что я могу найти итерацию / прохождение полной файловой системы, когда я делаю простой

find -inum 12345

Без фоновой информации мне кажется, что должны быть гораздо более простые способы рассказать обо всех файлах с этим конкретным inode 12345 (который здесь просто является заполнителем)?

Может быть, даже лучший способ для этого? Тот, который не требует проверки всей структуры каталогов файловой системы, просто указать, какие имена файлов связаны с inode?

Обновить

Существует еще один вопрос, связанный с проблемой. Быстро найти, какой файл (ы) принадлежит определенному номеру inode, но с намерением найти лучший (более быстрый способ).

Этот вопрос больше направлен на то, чтобы понять, почему это такая проблема в первую очередь? Возможно, есть веская причина, связанная с разрешениями и т. Д., Которые попытаются сделать это намеренно трудным для пользователей, чтобы избежать перемещения структуры каталогов, чтобы искать все имена файлов в inode.

Тем не менее, кажется довольно странным, что любая файловая система будет иметь такую ​​проблему, говорящую все имена файлов в inode (по крайней мере, с привилегированным root ) пользователем

Для файловой системы, которой я больше всего интересуюсь, для ответа на этот вопрос (если это имеет значение) является ext4.

2 Solutions collect form web for “Почему find -inum перебирает все дерево файловой системы?”

Самая простая причина заключается в том, что по крайней мере для файловых систем ext2 / ext3 / ext4 имена файлов хранятся через данные записей в каталоге, хранящиеся в файлах типа каталога.

Это означает, что те файлы из каталога типов имеют более или менее сложную систему для хранения имен файлов (из файлов внутри каталога) и inodes, которые приводят к данным этих файлов.

несколько упрощены (ext3 / 4 используют улучшения хеш-таблиц для ускорения обхода дерева каталогов и т. д.), похоже, такой список:

 ## filenames ## ## inode-numbers ## filename1 0123 filename2 01242 anotherfilename 3313 yetanotherfilename 11233 

По сути, имена файлов встречаются только внутри данных, связанных с файлами directcotry, и не хранятся нигде в метаданных, хранящихся в файловой системе для / inode . Поэтому единственный способ получить имена файлов, связанные с номером inode, – это просмотреть все записи каталога всех файлов каталога.

Вы написали:

Меня удивляет, что я могу найти итерацию / прохождение полной файловой системы, когда я делаю простую находку -inum 12345

find , по определению, идет древовидная дорожка, начинающаяся с заданного каталога или каталогов, со стартовым каталогом по умолчанию . ,

find -inum 12345 будет проходить через все дерево каталогов, начиная с текущего рабочего каталога. Вероятно, он не будет проходить через всю файловую систему, если только . как правило, содержит точку монтирования файловой системы.

Есть более эффективные способы поиска всех файлов с данным номером inode – fsdb , ncheck и ncheck в ответе, к ncheck вы ncheck – но find нужно сделать древовидную дорожку из-за стандартов . Обратите внимание: если искомое, которое вы ищете, имеет только одну ссылку, вы можете find опцию -quit , если она ее поддерживает, чтобы закончить древовидную прогулку после первого совпадения.

Даже эти другие команды не всегда бывают быстрыми, отчасти потому, что они должны просматривать всю файловую систему, а не только дерево каталогов, но они делают все возможное, используя данные, с которыми они могут работать. Основная проблема заключается в структуре большинства файловых систем Unix.

  • в файле inode есть много информации, но «имя или имена файла» и «каталог или каталоги, содержащие файл», среди них не входят.
  • Структура каталога в большинстве файловых систем Unix очень проста: она просто содержит список записей, каждая из которых представляет собой пару (номер inode, имя файла).
  • Чтобы найти каталог или каталоги, содержащие inode 12345, а также имя или имена, по которым эти каталоги ссылаются на него, на большинстве файловых систем Unix эти команды должны искать каждую запись каждого каталога в файловой системе, пока не найдут все соответствующие записи. Индекс файла содержит количество записей в каталоге, которые ссылаются на него, поэтому они могут выйти из поиска, как только они обнаружат, что много записей.
  • Напротив, поиск имени каталога намного эффективнее, потому что каждый каталог содержит номер inode его родительского каталога .. , поэтому только один каталог нуждается в поиске соответствующей записи. (Есть одно исключение: корневой каталог файловой системы имеет запись .. , указывающую на тот же каталог.)
  • что такое inode for, во FreeBSD или Solaris
  • Поиск всех жестких ссылок файла без прохождения файловой системы
  • Почему пакет программного обеспечения работает нормально даже при его обновлении?
  • Как linux сохраняет папку сопоставления -> имя_файла -> inode?
  • Как настроить сценарии загрузки для сохранения inphin inodes после неправильного завершения работы?
  • Найдите, где используются индексные дескрипторы
  • Как меняются файловые системы?
  • количество ссылок удаленных файлов
  • Выполнить подсчет ссылок на номер inode?
  • Как точно находятся файлы под капотом?
  • Файлы без атрибутов, владельца, группы и инодов
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.