Das POSIX-Archivformat, auch bekannt als „ar“-Format, ist ein Dateiformat, das zum Erstellen und Verwalten von Bibliotheksarchiven auf Unix-ähnlichen Betriebssystemen verwendet wird. Dieses Format wurde vom IEEE in der Spezifikation POSIX.1-1988 standardisiert und seitdem auf verschiedenen Plattformen weit verbreitet übernommen. Das ar-Format ermöglicht die Bündelung mehrerer Dateien in einer einzigen Datei zur einfacheren Speicherung, Verteilung und Verwaltung.
Die Struktur eines POSIX-Archivs besteht aus einem globalen Header, gefolgt von einer Reihe von Archivmitgliedern. Jedes Mitglied stellt eine Datei dar, die dem Archiv hinzugefügt wurde. Der globale Header ist eine einfache ASCII-Zeichenfolge, die die Datei als ar-Archiv identifiziert. Er besteht aus den Zeichen „!<arch>\n“, wobei „\n“ einen Zeilenumbruch darstellt. Dieser Header ist immer am Anfang der Archivdatei vorhanden.
Nach dem globalen Header enthält das Archiv eine Reihe von Dateimitgliedern. Jedes Mitglied besteht aus einem Dateikopf und den eigentlichen Dateidaten. Der Dateikopf ist eine Struktur fester Größe, die Metadaten über die Datei enthält, wie z. B. ihren Namen, den Zeitstempel der Änderung, die IDs des Besitzers und der Gruppe, den Dateimodus und die Größe. Der Header wird mit Leerzeichen aufgefüllt, um eine feste Größe von 60 Byte beizubehalten.
Der Dateikopf beginnt mit dem Dateinamen, der als nullterminierte ASCII-Zeichenfolge gespeichert wird. Der Dateiname ist auf 16 Zeichen begrenzt. Wenn der tatsächliche Dateiname länger ist, wird er abgeschnitten. Wenn der Dateiname kürzer als 16 Zeichen ist, wird er mit Leerzeichen aufgefüllt. Nach dem Dateinamen enthält der Header den Zeitstempel der Dateimodifikation, der als dezimale ASCII-Zeichenfolge gespeichert wird. Der Zeitstempel stellt die Anzahl der Sekunden seit der Unix-Epoche (1. Januar 1970) dar.
Als Nächstes enthält der Dateikopf die IDs des Besitzers und der Gruppe der Datei, die als dezimale ASCII-Zeichenfolgen gespeichert werden. Diese IDs werden für Dateiberechtigungen und Besitzverwaltung verwendet. Der Dateimodus wird auch im Header als oktale ASCII-Zeichenfolge gespeichert, die die Berechtigungen und den Typ der Datei darstellt. Der Modus gibt an, ob es sich bei der Datei um eine reguläre Datei, ein Verzeichnis, einen Symlink oder um spezielle Berechtigungen handelt.
Die Größe der Datei wird im Header als dezimale ASCII-Zeichenfolge gespeichert, die die Anzahl der Bytes in den Dateidaten angibt, die dem Header folgen. Wenn die Dateigröße keine gerade Zahl ist, wird den Dateidaten ein zusätzliches Byte Padding hinzugefügt, um eine korrekte Ausrichtung zu gewährleisten.
Nach dem Dateikopf werden die eigentlichen Dateidaten im Archiv gespeichert. Die Daten werden unverändert ohne zusätzliche Formatierung oder Komprimierung geschrieben. Wenn die Dateigröße ungerade ist, wird ein zusätzliches Byte Padding hinzugefügt, um die Ausrichtung beizubehalten.
Der Prozess der Erstellung eines ar-Archivs umfasst die Verkettung der Dateiköpfe und Daten jeder Mitgliedsdatei zu einer einzigen Archivdatei. Das ar-Dienstprogramm, das häufig auf Unix-ähnlichen Systemen zu finden ist, wird zum Erstellen, Ändern und Extrahieren von Dateien aus ar-Archiven verwendet. Beim Erstellen eines Archivs fügt das ar-Dienstprogramm den globalen Header hinzu, gefolgt von den Dateiköpfen und Daten jeder Mitgliedsdatei.
Das Extrahieren von Dateien aus einem ar-Archiv umfasst das Lesen des globalen Headers, um das Archivformat zu überprüfen, und das anschließende Durchsuchen des Archivs, um die gewünschten Dateimitglieder zu finden. Das ar-Dienstprogramm liest die Dateiköpfe, um die Dateinamen, Größen und Offsets innerhalb des Archivs zu ermitteln. Anschließend extrahiert es die Dateidaten basierend auf den in den Headern gespeicherten Größen- und Positionsinformationen.
Einer der Hauptanwendungsfälle für das ar-Format ist die Erstellung statischer Bibliotheksarchive. Statische Bibliotheken sind Sammlungen von Objektdateien, die zur Kompilierzeit direkt in eine ausführbare Datei gelinkt werden. Das ar-Format ermöglicht die Bündelung mehrerer Objektdateien in einer einzigen Bibliotheksdatei, die dann mit anderen Objektdateien oder Bibliotheken verknüpft werden kann, um die endgültige ausführbare Datei zu erstellen.
Das ar-Format unterstützt auch die Erstellung von Thin-Archiven, bei denen es sich um Archive handelt, die nur Verweise auf externe Dateien enthalten, anstatt die eigentlichen Dateidaten. Thin-Archive sind nützlich, um die Größe der Archivdatei zu reduzieren und eine effizientere Speicherung und Verteilung großer Dateisammlungen zu ermöglichen.
Obwohl das ar-Format weit verbreitet und unterstützt wird, hat es einige Einschränkungen. Der Dateikopf mit fester Größe begrenzt die Länge von Dateinamen und die maximale Dateigröße, die im Archiv gespeichert werden kann. Darüber hinaus bietet das ar-Format keine integrierte Komprimierung oder Verschlüsselung, die für bestimmte Anwendungsfälle erforderlich sein kann.
Trotz seiner Einschränkungen bleibt das POSIX-Archivformat eine einfache und effiziente Methode zum Bündeln und Verwalten von Dateisammlungen auf Unix-ähnlichen Systemen. Seine Standardisierung und weit verbreitete Akzeptanz machen es zu einer zuverlässigen Wahl für die Erstellung statischer Bibliotheken, die Verteilung von Softwarepaketen und die Archivierung von Daten.
Zusammenfassend ist das POSIX-Archivformat ein Dateiformat, das zum Erstellen und Verwalten von Bibliotheksarchiven auf Unix-ähnlichen Betriebssystemen verwendet wird. Es besteht aus einem globalen Header, gefolgt von einer Reihe von Dateimitgliedern, die jeweils einen Dateikopf und die Dateidaten enthalten. Das ar-Dienstprogramm wird zum Erstellen, Ändern und Extrahieren von Dateien aus ar-Archiven verwendet, und das Format wird häufig zum Erstellen statischer Bibliotheksarchive und zum Bündeln von Dateisammlungen verwendet. Obwohl es einige Einschränkungen aufweist, bleibt das ar-Format eine einfache und weit verbreitete Methode zur Verwaltung von Dateien auf Unix-ähnlichen Systemen.
Die Dateikomprimierung reduziert Redundanzen, damit dieselben Informationen mit weniger Bits auskommen. Die Obergrenze wird von der Informationstheorie gesetzt: Bei verlustfreier Komprimierung bestimmt die Entropie der Quelle das Limit (siehe Shannons Source-Coding-Theorem und seinen ursprünglichen Aufsatz von 1948 „A Mathematical Theory of Communication“). Bei verlustbehafteter Komprimierung beschreibt die Rate-Distortion-Theorie den Kompromiss zwischen Bitrate und Qualität.
Die meisten Kompressoren arbeiten in zwei Phasen. Zuerst sagt ein Modell Struktur in den Daten voraus oder legt sie frei. Danach wandelt ein Coder diese Vorhersagen in nahezu optimale Bitmuster um. Eine klassische Modellfamilie ist Lempel–Ziv LZ77 (1977) und LZ78 (1978) entdecken wiederholte Teilstrings und geben Referenzen statt Rohbytes aus. Auf der Codierungsseite weist die Huffman-Codierung (den Originalartikel finden Sie 1952) wahrscheinlicheren Symbolen kürzere Codes zu. Arithmetische Codierung und Range Coding arbeiten noch feiner und rücken näher an die Entropiegrenze, während moderne Asymmetric Numeral Systems (ANS) ähnliche Raten mit tabellengesteuerten Implementierungen erreichen.
DEFLATE (verwendet von gzip, zlib und ZIP) kombiniert LZ77 mit Huffman-Codierung. Die Spezifikationen sind öffentlich: DEFLATE RFC 1951, der zlib-Wrapper RFC 1950und das gzip-Dateiformat RFC 1952. Gzip ist für Streaming ausgelegt und garantiert ausdrücklich keinen zufälligen Zugriff. PNG-Bilder standardisieren DEFLATE als einzige Komprimierungsmethode (mit maximal 32 KiB Fenster) laut der PNG-Spezifikation „Compression method 0… deflate/inflate… at most 32768 bytes“ und W3C/ISO PNG 2nd Edition.
Zstandard (zstd): ein neuer Allzweckkompressor für hohe Raten bei sehr schneller Dekompression. Das Format ist dokumentiert in RFC 8878 (und dem HTML-Spiegel) sowie der Referenzspezifikation auf GitHub. Wie gzip zielt der Basis-Frame nicht auf zufälligen Zugriff. Eine der Superkräfte von zstd sind Wörterbücher: kleine Proben aus Ihrem Korpus, die viele kleine oder ähnliche Dateien deutlich besser komprimieren (siehe python-zstandard Wörterbuch-Dokumentation und Nigel Taos Beispiel). Implementierungen akzeptieren sowohl „unstrukturierte“ als auch „strukturierte“ Wörterbücher (Diskussion).
Brotli: optimiert für Web-Inhalte (z. B. WOFF2-Fonts, HTTP). Es kombiniert ein statisches Wörterbuch mit einem DEFLATE-ähnlichen LZ+Entropie-Kern. Die Spezifikation ist RFC 7932, der auch ein Gleitfenster von 2WBITS−16 mit WBITS in [10, 24] (1 KiB−16 B bis 16 MiB−16 B) beschreibt und festhält, dass es keinen zufälligen Zugriff bereitstellt. Brotli schlägt gzip bei Webtext oft und dekodiert trotzdem schnell.
ZIP-Container: ZIP ist ein Datei-Archiv, das Einträge mit verschiedenen Komprimierungsmethoden (deflate, store, zstd usw.) speichern kann. Der De-facto-Standard ist PKWAREs APPNOTE (siehe APPNOTE-Portal, eine gehostete Kopieund die LC-Überblicke ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 zielt auf pure Geschwindigkeit bei moderaten Raten. Siehe die Projektseite („extremely fast compression“) und das Frame-Format. Ideal für In-Memory-Caches, Telemetrie oder Hot Paths, in denen Dekompression nahezu RAM-Geschwindigkeit erreichen muss.
XZ / LZMA strebt hohe Dichte (große Raten) mit relativ langsamer Kompression an. XZ ist ein Container; die Schwerarbeit leisten typischerweise LZMA/LZMA2 (LZ77-ähnliche Modellierung + Range Coding). Siehe .xz-Dateiformat, die LZMA-Spezifikation (Pavlov)und Linux-Hinweise zu XZ Embedded. XZ komprimiert meist besser als gzip und konkurriert oft mit modernen Hochratencodecs, braucht aber längere Encode-Zeiten.
bzip2 setzt auf die Burrows–Wheeler-Transformation (BWT), Move-to-Front, RLE und Huffman-Codierung. Typisch kleiner als gzip, aber langsamer; siehe das offizielle Handbuch und die Manpages (Linux).
Die „Fenstergröße“ zählt. DEFLATE-Referenzen können nur 32 KiB zurückblicken (RFC 1951) sowie das PNG-Limit von 32 KiB hier erläutert. Brotli deckt Fenster von etwa 1 KiB bis 16 MiB ab (RFC 7932). Zstd passt Fenster und Suchtiefe über die Level an (RFC 8878). Basis-Streams von gzip/zstd/brotli sind für sequentielles Dekodieren gebaut; die Grundformate versprechen keinen zufälligen Zugriff, obwohl Container (z. B. Tar-Indizes, Chunked Framing oder format-spezifische Indizes) ihn nachrüsten können.
Die oben genannten Formate sind verlustfrei: Sie rekonstruieren exakt dieselben Bytes. Medien-Codecs sind oft verlustbehaftet: Sie verwerfen unmerkliche Details, um niedrigere Bitraten zu erreichen. Bei Bildern ist klassisches JPEG (DCT, Quantisierung, Entropiecodierung) in ITU-T T.81 / ISO/IEC 10918-1standardisiert. In Audio nutzen MP3 (MPEG-1 Layer III) und AAC (MPEG-2/4) Wahrnehmungsmodelle und MDCT-Transformationen (siehe ISO/IEC 11172-3, ISO/IEC 13818-7und eine MDCT-Übersicht hier). Verlustbehaftet und verlustfrei können koexistieren (z. B. PNG für UI-Assets; Web-Codecs für Bilder/Video/Audio).
Theorie Shannon 1948 · Rate–distortion · Codierung Huffman 1952 · Arithmetische Codierung · Range Coding · ANS. Formate DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · XZ format. BWT-Stack Burrows–Wheeler (1994) · bzip2 manual. Medien JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Fazit: Wählen Sie einen Kompressor, der zu Ihren Daten und Randbedingungen passt, messen Sie auf echten Eingaben und vergessen Sie nicht die Gewinne durch Wörterbücher und clevere Frames. Mit der richtigen Kombination erhalten Sie kleinere Dateien, schnellere Übertragungen und reaktionsschnellere Apps – ohne Korrektheit oder Portabilität zu opfern.
Dateikompression ist ein Prozess, der die Größe einer Datei oder Dateien reduziert, normalerweise um Speicherplatz zu sparen oder die Übertragung über ein Netzwerk zu beschleunigen.
Die Dateikompression funktioniert, indem sie Redundanzen in den Daten identifiziert und entfernt. Sie verwendet Algorithmen, um die ursprünglichen Daten in einem kleineren Raum zu kodieren.
Die beiden primären Arten der Dateikompression sind verlustfreie und verlustbehaftete Kompression. Verlustfreie Kompression ermöglicht die perfekte Wiederherstellung der Originaldatei, während verlustbehaftete Kompression eine größere Größenreduktion ermöglicht, dies jedoch auf Kosten eines Qualitätsverlusts bei den Daten.
Ein populäres Beispiel für ein Dateikompressionstool ist WinZip, das mehrere Kompressionsformate unterstützt, darunter ZIP und RAR.
Bei verlustfreier Kompression bleibt die Qualität unverändert. Bei verlustbehafteter Kompression kann es jedoch zu einem spürbaren Qualitätsverlust kommen, da weniger wichtige Daten zur Reduzierung der Dateigröße stärker eliminiert werden.
Ja, die Dateikompression ist sicher in Bezug auf die Datenintegrität, insbesondere bei der verlustfreien Kompression. Wie alle Dateien können jedoch auch komprimierte Dateien von Malware oder Viren angegriffen werden. Daher ist es immer wichtig, eine seriöse Sicherheitssoftware zu haben.
Fast alle Arten von Dateien können komprimiert werden, einschließlich Textdateien, Bilder, Audio, Video und Softwaredateien. Das erreichbare Kompressionsniveau kann jedoch zwischen den Dateitypen erheblich variieren.
Eine ZIP-Datei ist ein Dateiformat, das verlustfreie Kompression verwendet, um die Größe einer oder mehrerer Dateien zu reduzieren. Mehrere Dateien in einer ZIP-Datei werden effektiv zu einer einzigen Datei gebündelt, was das Teilen einfacher macht.
Technisch ja, obwohl die zusätzliche Größenreduktion minimal oder sogar kontraproduktiv sein könnte. Das Komprimieren einer bereits komprimierten Datei kann manchmal deren Größe erhöhen, aufgrund der durch den Kompressionsalgorithmus hinzugefügten Metadaten.
Um eine Datei zu dekomprimieren, benötigen Sie in der Regel ein Dekompressions- oder Entzip-Tool, wie WinZip oder 7-Zip. Diese Tools können die Originaldateien aus dem komprimierten Format extrahieren.