Я не експерт з цього питання, але я трохи прочитав, щоб спробувати зрозуміти, що відбувається.
Я б сказав: «Плутанина виникає через те, що:
- взаємозв'язок між цими поняттями складний і
- змінився з часом і
- Apple реалізувала як програмні API, так і такі інструменти, як ls чи cp, що дозволяє приховати багато відмінностей між поняттями ".
AIUI, файл каталогів HFS + містить записи файлів каталогів (серед іншого). Запис файлів каталогів містить звичайний тип інформації про файл, такий як дата створення, дата доступу тощо. Запис файлу каталогів також містить дві структури, які дають інформацію про розташування та розмір вилки даних та про вилку ресурсу.
AIUI, HFS + також має (скопійовано з Вікіпедії HFS +) "файл атрибутів [що] є новим B-деревом у HFS Plus, який не має відповідної структури у HFS. Файл атрибутів може зберігати три різних типи записів у 4 Кб: Вбудовані записи атрибутів даних, записи атрибутів даних Fork та записи атрибутів розширення Записи вбудованих даних про атрибути зберігають невеликі атрибути, які можуть вміщуватися в самій записи. використовується для розширення запису атрибутів даних Fork, коли його записи у вісім масштабів уже використовуються. "
AIUI, дані, що зберігаються у файлі атрибутів (або на них посилаються) (будь то вбудовані, видні дані чи атрибути розширення), відомі як розширені атрибути.
Це структури даних, тож як вони використовуються?
AIUI, ранні версії операційної системи (можливо, версії до 10.4 Тигр, на які, схоже, вказує Джон Сіракуза , мали деякі істотні зміни в цій області), вказали на форк даних та вилку ресурсу з файлу каталогу.
AIUI, як тільки ми дістаємось до 10.4 Тигра, файл атрибутів широко використовується для зберігання всіляких даних.
Можливо (але я не знаю), що через 10.4 і пізніше будь-які Forks Forks вказуються з файла атрибутів. Тобто, відповідаючи на ваше перше запитання, я б сказав, що названі вилки - це розширені атрибути, якщо вони не є Fork Fork, і на Fork Fork не посилається з файлу каталогу.
Проблема в розумінні того, як реалізуються речі, полягає в тому, що для збереження зворотної сумісності і, можливо, особливо для підтримки доступу до файлових систем, написаних однією версією Mac OS з іншої версії, різні речі та суміші речей повинні підтримуватися прозоро.
З звичайних інструментів командного рядка Terminal ми не можемо сказати, де саме зберігаються дані.
Отже, доступ до rsrc
може підказати, що доступ до Fork Fork у файлі Каталог є доступним.
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
Однак ми знаємо, що хоча синтаксис схожий на файл, який знаходиться під Icon^M
каталогом, доступний, це насправді не так, оскільки
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
тому Apple реалізувала особливий випадок для Resource Forks.
Якщо замість цього ми робимо
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
Це говорить про те, що ми отримуємо доступ до файлу атрибутів. Але знову ж таки, реалізація ls
може мати особливий випадок для Resource Forks.
Джон Сіракуза вказує тут, що списки ACL зберігаються як "розширені атрибути", але спеціально замасковані, щоб вони не відображалися xattr
. Тож знову є спеціальна обробка справ при реалізації xattr.
(Зауважте, що ця обробка спеціальної справи може бути в коді інструмента або в коді базових API, до яких інструменти мають доступ.)
GregW, якщо ви це бачите, було б непогано отримати більш експертний висновок щодо того, чи я в курсі, чи просто безнадійно розгублений.