Зачем нужны индексные дескрипторы для файлов и каталогов?

В любой оболочке POSIX, включая bash, используя операторы ${var##pattern}и ${var%pattern}ksh:

case $string in
  (*.*.*)
     minor=${string##*.}
     case $minor in
       (? | "") minor=0$minor
     esac
     string=${string%.*}$minor
esac

С bash -3.2+, в частности (и с отключенной совместимостью с bash 3.1 ), вы также можете сделать:

if [[ $string =~ ^(.*\..*)\.([^.]*)([^.])$ ]]; then
  string=${BASH_REMATCH[1]}${BASH_REMATCH[2]:-0}${BASH_REMATCH[3]}
fi
1
22.02.2020, 12:34
2 ответа

Это именно то, как это реализовано.

Попробуйте установить режим некоторых каталогов

Сделать один из них доступным для чтения, но не пересекаемым:ug=r. Вы увидите имена файлов, но не режим, размер файла -и т. д.

Сделать один из них доступным для пересечения, но нечитаемым:ug=x. Вы не сможете увидеть имена, но если вы знаете имя, вы сможете получить режим, размер файла -и т. д.

Почему

Сохранение метаданных -вне структуры каталогов (, поэтому это просто имена ), возможно, это ускорит работу. Нет необходимости обрабатывать большие объемы данных, которые не нужны. Затем, когда это необходимо, его можно прочитать.

Каждый inode может иметь от нуля до многих имен (, возможно, в разных каталогах ). У него не будет имен, если его имя будет удалено, но файл все еще открыт процессом. Он также может иметь несколько имен.

Это упрощает реализацию переименования. :Создайте новый каталог -запись (имя )для индексного дескриптора (, возможно, в другом каталоге ), затем удалите старый каталог -запись (имя ).

В старых файловых -системах каталог имел запись .., которая указывала на индексный дескриптор родительского каталога. Разрешение нескольких имен для одного файла (каталог является типом файла )для этого было необходимо. Отказ от дублирования inode — это хорошо (нет возможности несогласованности, меньше отходов ). В современных файловых -системах (, например. ext3, ext4 ), это (, так что я слышал, что )смоделировано.

3
28.04.2021, 23:22

"inode", википедия:

Each inode stores the attributes and disk block locations of the object's data

(главное расположение, а не размер)

Directories are lists of names assigned to inodes. A directory contains an entry for itself, its parent, and each of its children.

Когда объект представляет собой обычный файл, он является листом и содержит только данные. Данные каталога — это другой список файлов, включающий дополнительные каталоги, которые сами содержат списки и т. д.

Во всем этом есть практичная (вместительность, скорость, надежность ). ReiserFS, похоже, не имеет явных инодов:

Some Unix-style file systems such as ReiserFS omit an inode table, but must store equivalent data in order to provide equivalent capabilities. The data may be called stat data, in reference to the stat system call that provides the data to programs.


Я сделал один -вкладыш для иллюстрации; Я запускал из /sys. Верхний inode Sysfs равен "1" (, как и proc -, они оба смонтированы ; «/» имеет «2», это отображается как «2..» вls -a DOT)

for dir in. block bus; do echo -n "---[$dir]"; command ls -ali $dir | sed -E 's/( *\w ).*( \w*)/\1\2/' |head -5; done |sed "s/total.*/---/"

Он перечисляет первые четыре записи из каталога и двух подкаталогов, показывая только inode и имя(ls -aliтолько с первым и последним полем ).

---[.]---
   1 .
   2 ..
3321  block
   8  bus
---[block]---
 3321 .
    1 ..
62233 ../devices/virtual/block/loop0
62347 ../devices/virtual/block/loop1
---[bus]---
    8 .
    1 ..
25390  ac97
 3573  acpi

Сплющенный. для обычной таблицы БД с name, idиparent_idэто равносильно тому же:

"/"   2  2
sys   1  2
bus   8  1 
block 3321 1
ac97 25390 8

Файл (или любая другая запись )"ac97" имеет parentid=8. так что это принадлежит "автобусу". (это я проделал пальцами)

Технически второй «ac97» в том же каталоге (parentid )был бы в порядке, если бы он получил уникальный идентификатор. Это было бы противоположностью жесткой ссылке; имени пути было бы недостаточно, вам нужно было бы сказать /sys/bus/ac97 with inode xy. Никто этого не хочет, поэтому вы получаете «Файл существует», или, как хорошо объясняет man 2 mkdir:

EEXIST pathname already exists (not necessarily as a directory).
  This includes the case where pathname is a symbolic link, dangling or not

...потому что даже мертвая ссылка (есть? )дирэнтри.


Каталог, как и файл, должен иметь возможность увеличиваться в другом блоке. Иерархия разделяет данные для пользователей и системы. Имена файлов предназначены для пользователей. Иноды (иноды -номера )для sysem.Жесткие ссылки — это то, как пользователи работают с реальным файлом, а не только с одним его именем.

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

В классическом понимании ("индексные" смещения/аутсорсинговые метаданные )им не нужны.


статья "btrfs" находится в разделе "Дерево файловой системы":

Within each directory, directory entries appear as directory items, who[se right-hand key values] are a [CRC32C hash of their] filename. Their data is a location key, or the key of the inode item it points to. Directory items together can thus act as an index for path-to-inode lookups


дерево статей, сначала устранить неоднозначность:

A tree data structure can be defined recursively as a collection of nodes (starting at a root node), where each node is a data structure consisting of a value, together with a list of references to nodes (the "children"), with the constraints that no reference is duplicated, and none points to the root.

Вы не спрашиваете, что означает буква "i" перед NODE. Ты?


статья "связный список", "Ускорение поиска"

Another common approach is to "index" a linked list using a more efficient external data structure. For example, one can build a red-black tree or hash table whose elements are references to the linked list nodes. Multiple such indexes can be built on a single list. The disadvantage is that these indexes may need to be updated each time a node is added or removed (or at least, before that index is used again).

Неудивительно, что "i" означает не так много в "inode", просто сухой "индекс".

0
28.04.2021, 23:22

Теги

Похожие вопросы