Es sagt hier...
https://en.wikipedia.org/wiki/Fork_(file_system)#Apple
...dass das HFS+-Dateisystem in OSX "Multiple Named Forks" unterstützt. Wie erstelle ich einen benannten Fork in der Befehlszeile und wie speichere ich dann Daten darin? Was ist die maximale Anzahl von Bytes, die ich in meinem benannten Fork platzieren kann?
Erweiterte Attribute ist das, wonach Sie suchen. xattr ermöglicht es Ihnen, erweiterte Attribute in der Befehlszeile anzuzeigen und zu ändern. Sehen Sie sich die Manpage für weitere Details an, aber kurz gesagt, Sie können eine mit dem folgenden Befehl schreiben
xattr -w com.foo.myattribute "Ein Haufen Daten" /path/to/file
Ich kenne keine benannten Gabeln außer der Ressourcengabel. Ich kann es so im Terminal (Bash-Shell) erstellen:
echo "data fork area" > /tmp/test.txt
echo "resource fork area" > /tmp/test.txt/..namedfork/rsrc
cat /tmp/test.txt
cat /tmp/test.txt/..namedfork/rsrc
Größenbeschränkungen kenne ich nicht.
Sie können auch eine ausführbare Binärdatei in den Ressourcenzweig kopieren und die Bytes wieder in eine Datei extrahieren und diese Datei ausführen:
cp /usr/bin/whoami > /tmp/test.txt/..namedfork/rsrc
# get ready for some bells to sound in your terminal
cat /tmp/test.txt/..namedfork/rsrc > /tmp/test.bin
chmod u+x /tmp/test.bin
/tmp/test.bin
Beachten Sie, dass der whoami
Befehl etwas seltsam ist, wenn Sie dies tun, weil es wirklich der id
Befehl ist, und wenn Sie ihn wiederherstellen, kehrt er zum id
Befehl zurück und Sie können man id
mehr darüber erfahren.
"Named Forks" ist etwas, das Apple zu implementieren plante, aber (soweit ich das beurteilen kann) nie wirklich getan hat. (Oder zumindest nicht in OS X – bei Classic MacOS 8/9 bin ich mir nicht sicher). macOS enthält verschiedene historische Überbleibsel dieses früheren Plans (wie die /..namedfork/rsrc
Syntax, das ATTR_FILE_FORKLIST
von der API unterstützte Dateiattribut getattrlist
usw.). Schließlich beschloss Apple, stattdessen erweiterte Attribute zu implementieren (in MacOS X 10.4 Tiger).
Unter Dateisystemdesignern gibt es einen philosophischen Streit darüber, wie beliebige benutzerdefinierte Metadaten am besten unterstützt werden können – „benannte Gabeln“ und „erweiterte Attribute“ repräsentieren diese beiden unterschiedlichen Ansätze. Microsoft Windows ist ein eher ungewöhnliches Beispiel für ein System, das beides implementiert – es nennt benannte Gabeln „alternative Datenströme“ (oder kurz „Streams“).
Der Hauptunterschied besteht darin, wie die API zum Bearbeiten dieser Metadaten aussieht:
/..namedfork/
Windows verwendet nur ein , :
um den Dateinamen vom Fork-/Stream-Namen zu trennen). Sie haben die gleichen Größenbeschränkungen wie normale Dateien – Sie können eine 1-KB-Datendatei mit einem angehängten 1-GB-Fork/Stream mit dem Namen haben.(Nebenbei gesagt, Solaris verwirrt die Dinge leider, indem es im Wesentlichen den ersten Ansatz übernimmt, ihn aber „erweiterte Attribute“ nennt – und das NFSv4-Protokoll hat diese Terminologie von Solaris geerbt.)
Meine begründete Vermutung ist, dass Apple intern versucht hat, sich zwischen diesen beiden Optionen zu entscheiden, und ursprünglich auf die erste abzielte, aber bevor sie die erste Option tatsächlich ausgeliefert hatten, ihre Meinung zur zweiten geändert haben, und die zweite ist was wurde tatsächlich verschickt.
Apple hat einige der Dateisystem-Datenstrukturen in HFS Plus wiederverwendet, die ursprünglich dazu gedacht waren, "benannte Gabeln" zu unterstützen, um "erweiterte Attribute" zu implementieren. Angesichts dieser Tatsache und der Tatsache, dass "erweiterte Attribute" der Ersatz für "benannte Gabeln" ist, werden Sie gelegentlich Leute finden, die die beiden Begriffe als Synonyme behandeln und Aussagen wie "Listen benannter Gabeln" machen ls -@
. Obwohl ich die Gründe dafür verstehe, denke ich, dass es Verwirrung stiftet, weil die verkümmerten APIs in macOS, die benannte Gabeln unterstützen sollten, nicht für erweiterte Attribute funktionieren.
Hippiepfad
ls -l@
, aberxattr
Sie können keine beliebigen benannten Verzweigungen erstellen und bearbeiten. Erweiterte Attribute haben eine maximale Größe von 128 KB oder 64 MB, je nachdem, wo Sie lesen, während benannte Gabeln eine beliebige Größe haben können. Named Forks sind nicht gut dokumentiert und die Verbindung zwischen ihnen und erweiterten Attributen ist kaum bekannt.