Який "порядок роботи в каталозі" файлів у каталозі (використовується `ls -U`)?


19

Відповідно до сторінки man для ls, ls -Uозначає:

не сортувати; список записів у порядку каталогу.

Що означає "порядок каталогів" і як він визначається?

Наступний тест (виконаний у файловій системі ext3) показує, що це не порядок створення файлів:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

Відповіді:


14

Це залежить від файлової системи. Для деяких файлових систем (ext3 серед них) каталог - це фактично файл із добре відомим форматом і біт 'd', встановлений у його дозволах чи режимі. У цьому випадку історія того, яку довжину створених і видалених файлових файлів може мати значення, може мати значення. Ядро заповнить перший запис у файлі каталогу, який має достатньо місця для вмісту імені нового файлу. Дивіться http://e2fsprogs.sourceforge.net/ext2intro.html для більш детальної інформації, розділ під назвою "Фізичний опис".

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


@Bruce: Отже, який саме вміст цього файлу "каталогу"?
Faheem Mitha

Традиційно щось дуже схоже на strurent dirent, який я вважаю визначеним у /usr/include/bits/dirent.h на коробці RHEL та на вікні Slackware 11.0. Обидві ці машини відмовляються безпосередньо відкривати () каталог. Я знаю, що раніше я робив такі речі, як "cat.> Dot.as.file" для перетворення каталогу в звичайний файл, я думаю, що останній раз, коли я це робив напевно, був Solaris 8. В основному, структуру dirent містить inode (число), довжина запису, довжина імені та рядок, які, як я пам’ятаю, можуть бути або не бути припиненими ASCII-Nul.
Брюс Едігер

@Bruce: Гаразд. І цій структурі С вдається отримати всю інформацію про файли та підкаталоги, які вона містить, у ці поля?
Faheem Mitha

Каталог у файлових системах типу ext2 або BSD FFS або оригінальної файлової системи Unix просто містив перелік номерів inode та відповідних імен файлів. Викликання "ls" без аргументів просто заробило вам список імен файлів. Якби ви зробили "ls -l", "ls" сам шукав би кожне ім'я файлу, виконуючи системний виклик stat (2) на ім'я файлу, а з stat stat отримувати дозволи, розмір, "тип файлу" тощо Отже, ні, у файлі каталогів немає всієї інформації, лише список імен.
Брюс Едігер

2
ext2.sourceforge.net/2005-ols/paper-html/node3.html пояснює, що функція dir_index містить ім'я файлу та секрет для файлової системи. dump2efs включає dir_index в його рядок функцій Filesystem, якщо функція включена.
Мартін Дорей

3

Дійсно, конкретного наказу очікувати не можна. Це залежить від операційної системи та файлової системи, щоб замовити записи так, як подобається. Однією з цілей цього варіанту є отримання швидшого списку, що може бути важливим фактором для дуже великих каталогів.


У драйверах ядра та файлової системи є алгоритми планування / кешування, які впливають на записування даних на диск. Це робиться для підвищення продуктивності. Через цю оптимізацію ви не можете точно сказати, коли буде відбуватися запис. Також старі вставки у файлових системах можуть бути повторно використані, тому нові файли можуть з’являтися в слотах каталогів, де були старі файли. Отже, порядок створення не потрібен "порядок каталогів".
LawrenceC

@ultrasawblade: Не знаю, чому ви це написали як коментар до моєї власної відповіді замість самої відповіді чи будь-чого іншого.
jlliagre

@ultrasawblade: Строго кажучи, "старі введення [повторно використовуються" не мають нічого спільного з повторним використанням старих слотів каталогів. Це може статися, коли старі записи каталогів від’єднані; якщо всі вони є жорсткими посиланнями, це не призводить до того, що вкладиші будуть розміщені.
G-Man каже: "Відновити Моніку"

2

Це порядок, що записи зберігаються всередині файлової системи. Це залежатиме від файлової системи до файлової системи. Наприклад, цілі люди можуть зберігатися в якомусь збалансованому дереві, наприклад, червоно-чорному дереві . Можуть бути додаткові оптимізації для каталогів з невеликою кількістю записів або для ефективної роботи з доповненнями та видаленнями.


-1

Каталог - це лише ще один файл, у якому перераховані метадані фактичних файлів. "ls -U" просто перераховує entires у тому ж порядку у файлі каталогу.

Порядок визначається ОС та реалізацією файлової системи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.