Bu konuda uzman değilim, ama neler olduğunu anlamaya çalışmak için biraz okudum.
"Karışıklık şu gerçeği doğurur:
- bu kavramlar arasındaki ilişki karmaşıktır ve
- zaman içinde değişti ve
- Apple hem program düzeyinde API'ler uyguladı ve ls veya cp gibi araçlar kavramlar arasındaki farkların çoğunu gizleyecek bir yol. "
AIUI, HFS + Katalog dosyası Katalog Dosya Kayıtlarını içerir (diğer şeylerin yanı sıra). Katalog Dosya Kaydı, dosya oluşturma tarihi, erişim tarihi vb. Gibi normal bilgi türlerini içerir. Katalog Dosya Kaydı ayrıca veri çatalı ve kaynak çatalı konumu ve boyutu hakkında bilgi veren iki yapı içerir.
AIUI, HFS + 'da (Wikipedia HFS +' dan kopyalanmıştır) HFS Plus'ta HFS'de karşılık gelen bir yapıya sahip olmayan yeni bir B-ağacı olan “Öznitelikler Dosyası [vardır] Öznitelikler Dosyasında üç farklı 4 KB kaydı depolanabilir: Satır İçi Veri Özniteliği kayıtları, Çatal Veri Özniteliği kayıtları ve Uzantı Özniteliği kayıtları: Satır İçi Veri Özniteliği kayıtları kaydın kendisine sığabilecek küçük öznitelikleri depolar Çatal Veri Özniteliği kayıtları, daha büyük özniteliklere sahip olabilecek en fazla sekiz uzantıya başvurular içerir. sekiz derecelik kayıtları zaten kullanıldığında bir Fork Data Attribute kaydını genişletmek için kullanılır. "
AIUI, Öznitelikler Dosyasında (satır içi, Çatal Verileri veya Uzantı Öznitelikleri) depolanan (veya bunlardan referans alınan) veriler Genişletilmiş Öznitelikler olarak bilinir.
Bunlar veri yapıları, peki nasıl kullanılıyor?
AIUI, işletim sisteminin ilk sürümleri (muhtemelen John Siracusa'nın bu alanda bazı büyük değişiklikler olduğunu belirttiği 10.4 Tiger'dan önceki sürümler ), veri çatalı ve Katalog dosyasından kaynak çatalı işaret etti.
AIUI, 10.4 Tiger'a ulaştığımızda, Nitelikler Dosyası her türlü veriyi depolamak için yaygın olarak kullanılır.
10.4 ve sonrasında herhangi bir Kaynak Çatalı Öznitelikler Dosyasından işaret etmek mümkündür (ama bilmiyorum). Yani ilk sorunuza yanıt olarak, Kaynak Çatal olmadıkça ve Kaynak Çatal'a Katalog dosyasından referans verilmediği sürece adlandırılmış çatalların Genişletilmiş Özellikler olduğunu söyleyebilirim.
İşlerin nasıl uygulandığını bilmedeki sorun, geriye dönük uyumluluğu korumak ve muhtemelen özellikle Mac OS'un bir sürümü tarafından başka bir sürümden yazılan dosya sistemlerine erişimi desteklemek için, farklı şeylerin ve karışımların şeffaf bir şekilde desteklenmesi gerektiğidir.
Verilerin gerçekte nerede tutulduğunu normal Terminal komut satırı araçlarından anlatamayız.
Bu nedenle, erişim rsrc
, Katalog dosyasındaki Kaynak Çatal'a erişildiğini gösterebilir.
$ ls -l Icon^M/rsrc
-rwxr-xr-x 1 root admin 486 23 Jul 2004 Icon?/rsrc
Ancak, sözdiziminin Icon^M
dizinin altındaki bir dosyaya erişilmesine rağmen, durumun gerçekte böyle olmadığını biliyoruz , çünkü
$ ls -lR Icon^M
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
Apple, Kaynak Çatalları için özel bir durum uyguladı.
Eğer yerine
$ ls -l@
-rwxr-xr-x@ 1 root admin 0 23 Jul 2004 Icon?
com.apple.FinderInfo 32
com.apple.ResourceFork 486
Bu, Nitelikler Dosyasına eriştiğimizi gösterir. Ancak yine, ls
Kaynak Çatalları için özel bir durum söz konusu olabilir.
John Siracusa işaret buraya ACL listeler 'Genişletilmiş Özellikler' olarak saklanır, ancak bunlar gösterilmez böylece özel olarak dışarı maskeli olduğunu xattr
. Yani yine xattr uygulamasında özel durum işleme var.
(Bu özel durum işlemenin, aracın kodunda veya araçların eriştiği temel API'lerin kodunda olabileceğini unutmayın.)
GregW, bunu görürseniz, doğru çizgide olup olmadığım veya sadece umutsuzca karıştığım konusunda daha uzman bir fikir edinmek güzel olurdu.