Istnieją dwa odrębne, ale powiązane zadania. Pakowanie drzewa plików (w tym nazw plików, struktury katalogów, uprawnień systemu plików, własności i wszelkich innych metadanych) do strumienia bajtów nazywa się
archiwizacją . Usunięcie nadmiarowości w strumieniu bajtów w celu wytworzenia mniejszego strumienia bajtów nazywa się kompresją .
W systemie Unix dwie operacje są oddzielone, z osobnymi narzędziami dla każdej z nich. Na większości innych platform (bieżących i historycznych) połączone narzędzia wykonują zarówno archiwizację, jak i kompresję.
(gzip i inne programy naśladujące interfejs gzip często mają opcję przechowywania oryginalnej nazwy pliku w skompresowanym wyjściu, ale to, wraz z CRC lub innym sprawdzeniem wykrywającym uszkodzenie, jest jedynymi metadanymi, które mogą przechowywać).
Zalety oddzielania kompresji od archiwizacji. Archiwizacja jest specyficzna dla platformy (metadane systemu plików wymagające zachowania są bardzo zróżnicowane), ale implementacja jest prosta, w dużej mierze związana z operacjami we / wy i zmienia się niewiele w czasie. Kompresja jest niezależna od platformy, ale implementacje są związane z procesorem, a algorytmy stale się poprawiają, aby wykorzystać zwiększone zasoby, które współczesny sprzęt może wnieść do rozwiązania tego problemu.
Najpopularniejszym archiwizatorem uniksowym jest tar
, choć istnieją inne, takie jak cpio
i ar
. (Pakiety Debiana są ar
archiwami, podczas gdy
cpio
są często używane do początkowych ramdysków.) tar
Jest lub było często łączone z narzędziami do kompresji, takimi jak compress
(.Z), gzip
(.gz),
bzip2
(.bz2) i xz
(.xz), od najstarszych do najmłodszych , i nieprzypadkowo od najgorszej do najlepszej kompresji.
Tworzenie tar
i kompresowanie archiwum to odrębne kroki: kompresor nie wie nic o tar
formacie pliku. Oznacza to, że wyodrębnienie pojedynczego pliku ze skompresowanego tar
archiwum wymaga dekompresji wszystkich poprzednich plików. Jest to często nazywane „solidnym” archiwum.
Podobnie, ponieważ tar jest formatem „strumieniowym” - wymaganym do tego, aby był użyteczny w potoku - nie ma globalnego indeksu w archiwum tar, a wyświetlenie zawartości archiwum tar jest tak samo kosztowne jak jego wyodrębnienie.
Natomiast Zip i RAR i 7-zip (najpopularniejsze archiwizatory na współczesnych platformach Windows) zwykle kompresują każdy plik osobno, a metadane kompresują lekko, jeśli w ogóle. Umożliwia to tanie wyświetlanie plików w archiwum i wyodrębnianie pojedynczych plików, ale oznacza, że nie można wykorzystać nadmiarowości między wieloma plikami w tym samym archiwum w celu zwiększenia kompresji. Podczas gdy kompresowanie już skompresowanego pliku nie powoduje dalszego zmniejszenia jego rozmiaru, czasami może się pojawić plik zip w pliku zip: pierwsze skompresowanie zamieniło wiele małych plików w jeden duży plik (prawdopodobnie z wyłączoną kompresją), a drugi skompresowanie, a następnie skompresowane jako pojedynczy obiekt.
Między różnymi platformami i filozofiami gzip
występuje zapylenie krzyżowe: jest to zasadniczo zip
kompresor bez archiwizatora i xz
zasadniczo 7-zip
jest kompresorem bez archiwizatora.
Istnieją inne wyspecjalizowane sprężarki. Warianty PPM i ich następca ZPAQ
są zoptymalizowane pod kątem maksymalnej kompresji bez względu na zużycie zasobów. Mogą łatwo przeżuć tyle procesora i pamięci RAM, ile można na nich rzucić, a dekompresja jest tak samo obciążająca jak kompresja (dla kontrastu, większość powszechnie używanych narzędzi kompresji jest
asymetryczna : dekompresja jest tańsza niż kompresja).
Na drugim końcu spektrum lzo
, snappy
a LZ4
są „lekkie” sprężarki przeznaczone do maksymalnej prędkości i minimalnym zużyciu zasobów kosztem kompresji. Są szeroko stosowane w systemach plików i innych magazynach obiektów, ale w mniejszym stopniu jako samodzielne narzędzia.
Więc co wybrać?
Archiwizacja:
Ponieważ korzystasz z systemu Ubuntu, nie ma prawdziwego powodu, aby używać czegokolwiek innego niż tar
do archiwizacji, chyba że próbujesz stworzyć pliki, które można łatwo odczytać w innym miejscu.
zip
jest trudny do pokonania za wszechobecność, ale nie jest uniksowy i nie zachowa uprawnień systemu plików i informacji o własności, a jego wbudowana kompresja jest przestarzała. 7-zip i RAR (i ZPAQ) mają bardziej nowoczesną kompresję, ale są równie nieodpowiednie do archiwizacji systemów plików Unix (chociaż nic nie stoi na przeszkodzie, aby używać ich tak samo jak kompresorów); RAR jest również zastrzeżony.
Kompresja:
Aby uzyskać maksymalną kompresję, możesz zapoznać się z testem porównawczym, takim jak ogromny na stronie http://mattmahoney.net/dc/text.html . To powinno dać ci lepsze pojęcie o kompromisach.
Prawdopodobnie nie chcesz jednak maksymalnej kompresji. Jest o wiele za drogie.
xz
jest najpopularniejszym narzędziem do kompresji ogólnego zastosowania we współczesnych systemach uniksowych. Wierzę, że 7-zip może również odczytywać pliki XZ, ponieważ są one ściśle powiązane.
Wreszcie: jeśli archiwizujesz dane w celach innych niż przechowywanie krótkoterminowe, powinieneś wybrać coś o otwartym kodzie źródłowym i najlepiej rozpowszechnione, aby później zminimalizować bóle głowy.