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 cpioi ar. (Pakiety Debiana są ararchiwami, podczas gdy
cpiosą często używane do początkowych ramdysków.) tarJest 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 tari kompresowanie archiwum to odrębne kroki: kompresor nie wie nic o tarformacie pliku. Oznacza to, że wyodrębnienie pojedynczego pliku ze skompresowanego tararchiwum 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 gzipwystępuje zapylenie krzyżowe: jest to zasadniczo zipkompresor bez archiwizatora i xzzasadniczo 7-zipjest kompresorem bez archiwizatora.
Istnieją inne wyspecjalizowane sprężarki. Warianty PPM i ich następca ZPAQsą 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, snappya LZ4są „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ż tardo archiwizacji, chyba że próbujesz stworzyć pliki, które można łatwo odczytać w innym miejscu.
zipjest 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.
xzjest 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.