Каков “порядок каталога” файлов в каталоге (используемый 'ls-U')?

Право, таким образом выполненное:

env | grep PATH

Ваш $PATH является списком каталогов. Unix пройдет тот список каталогов в порядке, пока он не найдет "Python".

Вы видите, какой каталог это находит с, 'которые' управляют:

which python
19
19.05.2011, 20:38
4 ответа

Это зависит от файловой системы. Для некоторых файловых систем (ext3 среди них), каталог является на самом деле файлом с известным форматом и 'd' набором битов в его полномочиях или режиме. В этом случае история того, какие имена файлов длины стали созданными и удаленными, может иметь значение. Ядро заполнит первую запись в файле каталога, который имеет достаточно комнаты для содержания имени нового файла. См. http://e2fsprogs.sourceforge.net/ext2intro.html для большего количества детали, раздел, названный "Физическое Описание".

Для некоторых других файловых систем, Reiserfs среди них, каталог является на самом деле просто некоторыми записями в B + дерево, это не видимо в файловой системе, таким образом, плоскость ls из каталога в Reiserfs файловая система находится в лексическом порядке.

14
27.01.2020, 19:45
  • 1
    @Bruce: Так, каково содержание этого файла "каталога" точно? –  Faheem Mitha 19.05.2011, 21:36
  • 2
    Традиционно, что-то очень как структура dirent, который я нахожу определенными в/usr/include/bits/dirent.h на поле RHEL, и на поле Slackware 11.0. Обе из тех машин отказываются открывать () каталог непосредственно. Я знаю, что раньше делал вещи как "кошка.> dot.as.file" для преобразования каталога в регулярный файл в прошлый раз я сделал это, наверняка был Солярис 8, я думаю. В основном структура dirent содержит inode (число), рекордная длина, длина имени, и строка, которую, поскольку я вспоминаю, может или не может быть завершенным ASCII-Nul. –  Bruce Ediger 19.05.2011, 22:30
  • 3
    @Bruce: хорошо. И этой структуре C удается получить всю информацию о файлах и подкаталогах, которые она содержит в те поля? –  Faheem Mitha 19.05.2011, 22:36
  • 4
    каталог в файловых системах как ext2, или BSD FFS или исходная файловая система Unix, просто содержал список inode чисел и соответствующих имен файлов. Вызов "ls" без аргументов просто заработал для Вас список имен файлов. Если бы Вы сделали "ls-l", "то ls" самостоятельно искал бы каждое имя файла путем выполнения статистики (2) системный вызов на имени файла, и от статистики структуры, получил бы полномочия, размер, "тип файла", и т.д. Так, нет, файл каталога не имеет всей информации, просто список имен. –  Bruce Ediger 19.05.2011, 22:55
  • 5
    ext2.sourceforge.net/2005-ols/paper-html/node3.html объясняет, что dir_index функция хеширует имя файла и определенный для файловой системы секрет. dump2efs включает dir_index в свою строку функций Filesystem, если опция активирована. –  Martin Dorey 13.03.2013, 20:47

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

3
27.01.2020, 19:45
  • 1
    Существует планирование/алгоритмы кэширования в ядре и драйверах файловой системы, которые влияют, когда точно данные записаны в диск. Это сделано для увеличения производительности. Из-за этой оптимизации Вы не можете действительно сказать точно, когда записи произойдут. Кроме того, старый inodes в файловых системах мог бы быть снова использован, таким образом, новые файлы могут появиться в слотах каталога, где старые файлы были. Таким образом, порядок создания не является необходимым "порядком каталога". –  LawrenceC 19.05.2011, 20:01
  • 2
    @ultrasawblade: Не уверенный, почему Вы записали что как комментарий к моему собственному ответу вместо ответа отдельно или что бы то ни было. –  jlliagre 20.05.2011, 17:47
  • 3
    @ultrasawblade: Строго говоря, "старое inodes быть снова использованным" не имеет никакого отношения к повторному использованию старых слотов каталога.   Это может произойти каждый раз, когда старые записи каталога являются несвязанными; если они - все жесткие ссылки, это не должно приводить к inodes тому, чтобы быть освобожденным. –  G-Man Says 'Reinstate Monica' 19.05.2015, 08:25

Это - порядок, что записи хранятся внутренне в файловой системе. Это будет варьироваться от файловой системы до файловой системы. Например, записи могут быть сохранены в некотором сбалансированном дереве, таком как Красно-черное Дерево. Может быть дальнейшая оптимизация для каталогов с небольшим количеством записей, или иметь дело эффективно с дополнениями и удалениями.

2
27.01.2020, 19:45

Каталог является просто другим файлом, которые перечисляют метаданные фактических файлов. "ls-U" просто перечисляет записи в том же порядке в файле каталога.

Порядок определяется ОС и реализацией файловой системы.

-1
27.01.2020, 19:45

Теги

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