ar (Unix)
ar (von engl. archiver) ist ein Unix-Kommando, das mehrere Dateien zu einer einzigen Archivdatei zusammenpacken kann. Es wird heutzutage hauptsächlich genutzt, um statische Bibliotheken zu erzeugen, die einem Linker übergeben werden können. Da es sich um ein klassisches Archivierungsprogramm handelt, kann es zwar auch für jeden anderen Zweck verwendet werden, wurde aber mittlerweile durch das wesentlich leistungsfähigere tar ersetzt.
ar ist durch die Single UNIX Specification standardisiert. Die Implementierung des GNU-Projektes ist Bestandteil der GNU Binutils.
Verwendung
ar wird unter Unix hauptsächlich für statische Programmbibliotheken benutzt, wobei ein solches Archiv mehrere Objektdateien enthält, die beim Linken eines Programms in dieses eingebunden werden. Auch Debians Paketformat .deb basiert auf ar. Prinzipiell kann man ar auch als normales Programm zur Archivierung benutzen, wobei man allerdings einige Einschränkungen in Kauf nehmen muss, die im Abschnitt Dateiformat erläutert sind.
Beispiel-Aufrufe
Es gibt unterschiedliche ar-Varianten, wodurch die folgenden Beispiele, getestet mit Darwins ar, für andere Betriebssysteme unter Umständen leicht modifiziert werden müssen.
ar -q archiv.a datei1 datei2
Mit diesem Befehl wird, falls die Datei noch nicht existiert, das Archiv archiv.a angelegt und mit den Dateien datei1 und datei2 befüllt, wobei keine Pfadangabe in der Datei hinterlegt wird.
ar -x archiv.a
Der Befehl zum Entpacken.
% ar -t archive.a datei1 datei2
Möchten man sich anschauen, welche Dateien im Archiv enthalten sind, ruft man ar mit dem Parameter -t auf.
% ar -tv archive.a rw-r--r-- UID/GID BYTES Feb 9 19:21 2006 datei1 rw-r--r-- UID/GID BYTES Feb 9 19:22 2006 datei2
Der Parameter -v steht für verbose und bewirkt mit -t eine ls-ähnliche Ausgabe:
UID sind dabei die User-ID, die numerischen Darstellungen der Benutzernamen, GID sind die Gruppen-ID, unter denen die Dateien angelegt wurden und BYTES sind die Dateigrößen.
Dateiformat
Das von ar benutzte Dateiformat ist nicht standardisiert, weshalb es einige zueinander inkompatible Varianten geben kann. Im Folgenden ist BSD-ar beschrieben:
ar-Dateien beginnen mit der Magischen Zahl !<arch>\n
, wobei \n
ein Zeilenvorschub-Zeichen darstellt, gefolgt von den archivierten Dateien mit Header. Der Header steht dabei in einer Zeile vor dem jeweiligen Dateiinhalt, die die Metadaten Dateiname (16 Zeichen), letzte Zugriffszeit als Unix-Zeitstempel (12 Zeichen), User- und Gruppen-ID (je 6 Zeichen), Dateizugriffsrechte (8 Zeichen) sowie die Dateigröße (10 Zeichen) enthält; diese Struktur kann man auch in der Header-Datei /usr/include/ar.h finden. Alle Datensätze sind im Zweifelsfall mit Leerzeichen aufgefüllt, um die genannten Längen zu erreichen. Falls die Datei eine ungerade Anzahl Bytes groß ist, wird als letztes Zeichen ein Zeilenvorschub zum Auffüllen eingefügt.
Das Feld, das den Dateinamen enthält, bietet als einziges eine Möglichkeit, mit längeren Werten umzugehen: Wenn der Dateiname zu lang ist, enthält dieses Feld die Zeichenfolge #1/
gefolgt von der tatsächlichen Länge des Dateinamens, der dann in der folgenden Zeile steht.
Der Dateiinhalt wird von einem Zeilenvorschub beendet, worauf ggf. der Header der nächsten Datei folgt.
Einschränkungen
- ar speichert Dateien ohne ihren Pfad ab, folglich wird eine als
ordner/unter/datei
archivierte Datei später alsdatei
im aktuellen Verzeichnis extrahiert. - Mit der Begrenzung des Feldes für die Dateigröße auf 10 Zeichen können keine Dateien mit mehr als 10 GB minus 1 Byte (≈9.31 GiB) gespeichert werden.
Weblinks
ar
: create and maintain library archives – Open Group Base Specificationar(1)
: create, modify, and extract from archives – Debian GNU/Linux Ausführbare Programme oder Shell-Befehle Handbuchseitear(1)
: create, modify, and extract from archives – OpenBSD General Commands Manual