Um ein Verzeichnis von Dateien zu packen benötigt man ein Archivierungsprogramm.
Derartige Programme gibt es viele, allerdings ist hier das verbreitetste unser gutes altes tar und alle anderen Programme, die antraten um seine Nachfolge anzutreten, haben zu wenig Vorteile gehabt als das sie ihn vom Trohn stoßen könnten.
Hat man jetzt ein Archiv, dann kann man es, um Platz zu sparen, noch packen.
Dazu braucht man ein Packprogramm. Davon gibt es ebenfalls recht viele, wobei jedes dieser Programme auch in einem anderen Umfeld seine speziellen Vorteile hat.
Das möchte ich hier nicht genauer beleuchte.
Wir konzentrieren uns auf die zwei verbreitetsten, die auch immernoch State-of-the-Art sind: gzip und bzip2.
gzip schreibt für jede gepackte Datei nur einen Header, das hat seine Vor- und Nachteile!
Da Gzip nur einmal den Inhalt am Anfang der Datei analysiert und an Hand dieser Analyse einen vernünftigen Algorithmus auswählt, sollte man gzip nur für Dateien mit homogenem Inhalt (Textdateien, Logdateien) verwenden. Ein großer Pluspunkt von gzip ist auch, das es deutlich weniger Rechenzeit der CPU beim packen verbraucht als bzip2 zum Beispiel! Gzip-Dateien können (ohne sie auszupacken) mit zcat direckt angesehen werden.
Sollen dagegen Dateien mit inhomogenem Inhalt (MySQL-Bin-Logs, TAR-Archive von Verzeichnissen mit Binärdateien und Textdateien) gepackt werden, dann ist bzip2 die deutlich bessere Wahl. Es verbraucht zwar deutlich mehr Rechenzeit der CPU, aber das Ergebnis ist bis zu 12-mal kleiner als mit gzip. Das liegt daran, dass bzip2 die zu packende Datei, Blockweise packt. Für jeden Block wählt bzip2 jeweils den optimalen Pack-Algotithmus aus, dadurch wird bei gemischtem Inhalt der gesammten Datei trotzdem jede Datanart in der selbigen optimal gapackt. Allerdings schreibt bzip2 auch für jeden Block einen eigenen Header und das kostet Platz. Deshalb kann bzip2 z.B. Logdateien nicht so gut packen wie gzip zum Beispiel.
kann nicht komprimieren; kann nur ASCII und max. 8GB-Archive, standardmäßig wird ein überflüssiges Binärformat verwendet “-H crc“: portable SVR4-Format mit einer Schecksumme je Datei “-H ustar“: POSIX.1-Format Wegen seiner Dateigrößenbeschränkungen wird cpio nicht mehr von der POSIX geführt, Nachfolger sollte afio werden; Die POSIX führt pax als Nachfolger von cpio und tar ein. und so trat pax die Nachfolge von cpio, tar und afio im POSIX-Standard an…
Die POSIX führte pax als Nachfolger von cpio und tar ein;
Nachfolger von cpio sollte afio werden, allerdings stammt der Quellcode von afio aus einer zur LPGL (aktuelle Lizenz) nicht kompatiblen Lizenz, aus diesem Grund hat die FSF afio aus ihrem Software-Verzeichnis genommen;
XZ kann zwei Formate:
XZ packt nur ca. halb so gut wie LZMALZMA kann keine beschädigten Archive entpacken (im Gegensatz zu XZ)kann keine beschädigten Archive entpacken (im Gegensatz zu rar)
deshalb wird noch ein archivierer (z.B. star) gebraucht.
Verwendet man p7zip mit star, dann legt star sein TAR-Archiv erst im /tmp-Verzeichnis ab bevor das TAR-Archiv dann mit p7zip zum endgültigen komprimierten Archiv gemacht wird. Man muss also im /tmp-Verzeichnis genügend Platz vorhalten…
gibt es auf allen Unix-Systemen;
ist das verbreitetste Unix-Archivierungsprogramm;
afio komprimiert Dateiweise und verwendet blockweise komprimierende Algorithmen, so das ein beschädigter Bereich nicht das gesamte Archiv zerstört, wie es bei tar passieren kann;
xstar ist so POSIX-konform wie möglich (POSIX.1-1988), dadurch können mit anderen tar-Implementationen nur 100+130 Zeichen des Dateinamens gelesen werdentar aufgerufen, dann ist xustar das Standard-Format, dieses Format enthält auch die „POSIX.1-2001“-Erweiterungenfind-Ausdrücke (star -find), auch beim lesen von Archiven(Nachfolger für cpio und tar, einziger POSIX.2-Archivierer) kann alle cpio- und tar-Archive lesen und schreiben; kann POSIX.2;
ist das verbreitetste Windoofs-Archivierungsprogramm, Passwortschutz, kann beschädigte Archive manchmal reparieren
sehr verbreitet, packt Dateien mit einheitlichen Dateninhalt am besten; verbraucht sehr wenig Rechenleistung, packt nicht ganz so gut wie zip; kann nur eine Datei komprimieren, braucht also noch einen Archivierer;
kann beschädigte Archive entpacken
Die XZ-Utils stellen die gleiche LZMA-Kompression wie 7-Zip bereit, aber in einem anderen Format, das laut den Entwicklern immer populärer wird und besser zu POSIX-Systemen passt.
teilweise bessere Kompression als bzip2 und zip, UNICODE, verschlüssellung, Passwortschutz, Selbstentpacker, kann Archive mit beschädigten Dateien entpacken,
# find [Verzeichnis/Datei] | cpio -oH ustar --sparse > [Archiv.tar] # tar cJf [Archiv.tar.xz] [Verzeichnis/Datei] # tar cf - [Verzeichnis/Datei] | 7za a -si [Archiv.tar.7z] # pax -wf [Archiv.tar] [Verzeichnis/Datei] # pax -wjf [Archiv.tar.bz7] [Verzeichnis/Datei] # 7za a [Archiv.7z] [Verzeichnis/Datei] # 7za a -sfx [Archiv.exe] [Verzeichnis/Datei] # Archiv MUSS auch in Unix/Linux auf ".exe" enden!] # 7za a -v1g [Archiv.7z] [Verzeichnis/Datei] # 1GB-Archive # pax -w [Verzeichnis/Datei] | xz -z > [Archiv.tar.xz]
### mit star ein einfaches tar-Archiv (POSIX.1-1988) erstellen # star cf [Archiv.tar] [Verzeichnis/Datei]
### mit star ein modernes tar-Archiv (POSIX.1-2001 + Erweiterungen) erstellen # star c H=exustar -f [Archiv.tar] [Verzeichnis/Datei]
### mit star können auch ACL's gesichert werden # star c H=exustar -acl -f [Archiv.tar] [Verzeichnis/Datei]
### star User-Daten, ACL's und Attribute sichern
# star c H=exustar -pax-p e -f [Archiv.tar] [Verzeichnis/Datei]
### star soll alle Meta-Daten sichern, die es sichern kann
# star c -dump -f [Archiv.tar] [Verzeichnis/Datei]
### mit star ein gepacktes tar-Archiv mit allen Meta-Daten erstellen # star c -7z -dump -f [Archiv.tar.7z] [Verzeichnis/Datei]
# cpio --list < [Archiv.tar] # cpio --list < [Archiv.newc] # pax [Archiv.tar] # 7za l [Archiv.7z]
# tar tJf [Archiv.tar.xz] # xz -t [Archiv.tar.xz] # xz -dc [Archiv.tar.xz] | pax # 7za t [Archiv.7z] # star t -7z -f [Archiv.tar.7z]
# tar xJf [Archiv.tar.xz] # pax -rf [Archiv] # pax -rjf [Archiv.tar.bz2] # xz -dc [Archiv.tar.xz] | pax -r # 7za e [Archiv.7z] # mit relativem Pfad # 7za x [Archiv.7z] # mit absolutem Pfad # 7za e -so [Archiv.tar.7z] | tar xf - # owner/group mit entpacken (relativer Pfad) # 7za x -so [Archiv.tar.7z] | tar xf - # owner/group mit entpacken (absoluter Pfad) # star x -7z -f [Archiv.tar.7z]
# pax -rwp e [Quelle] [Ziel] # mkdir -p [Ziel] ; star -copy -p [Quelle] [Ziel] # star -copy [Quell-Datei] [Ziel-Verzeichnis] # star -copy [Datei1] [Datei2] [Datei3] [Ziel-Verzeichnis] # star -copy -C [Quell-Verzeichnis] . [Ziel-Verzeichnis] # star c -dump -f - [Quell-Verzeichnis/-datei] | ssh root@192.168.0.1 'star xf -' # ssh root@192.168.0.1 'star c -dump -f - [Quell-Verzeichnis/-datei]' | star xf - # star c H=exustar -f - [Quell-Verzeichnis/-datei] | ssh root@192.168.0.1 'tar xf -' # tar cf - [Quell-Verzeichnis/-datei] | ssh root@192.168.0.1 'tar xf -' # ssh root@192.168.0.1 'tar cf - [Quell-Verzeichnis/-datei]' | tar xf -
# 7za a -mhe=on -p[geheim] [Archiv.7z] [Verzeichnis/Datei]
Das beste Archivierungsprogramm ist star, da kein anderer Archivierer im Moment diese Geschwindigkeit bietet und dabei noch alle Meta-Daten, inklusive ACL's, speichern kann.
Und das beste Packprogramm ist xz, da es in meinem Praxistest sogar noch etwas besser gepackt hat als 7z und darüber hinaus eine bessere POSIX-konformität bietet als 7z. Leider kann von beiden aber nur 7z seine Archive mit Passwort schützen.
Leider lassen sich die beiden besten nur etwas umständlich kombinieren, einfacher geht es mit dem zweitbesten Packprogramm 7z.
Die Kombination star und 7z ist schnell, packt gut und ist einfach zu handhaben. Damit ist das mein persönlicher Favorit (bis star auch noch mit xz umgehen kann).
# star c -7z -dump -f [Archiv.tar.7z] [Verzeichnis/Datei]