gzip bez smoły? Dlaczego są używane razem?

60

Dlaczego tar i gzip są prawie zawsze używane razem, a nie tylko gzip? Czy ta metoda ma jakieś zalety?

Mehrdad
źródło

Odpowiedzi:

72

TAR tworzy pojedynczy zarchiwizowany plik z wielu plików, ale ich nie kompresuje.

Formatuj szczegóły

Plik tar to konkatenacja jednego lub więcej plików. Każdy plik jest poprzedzony 512-bajtowym rekordem nagłówka. Dane pliku są zapisywane w niezmienionej postaci, z wyjątkiem tego, że ich długość jest zaokrąglana w górę do wielokrotności 512 bajtów, a dodatkowe miejsce jest wypełnione zerami. Koniec archiwum jest oznaczony przez co najmniej dwa kolejne rekordy wypełnione zerami.

GZIP kompresuje pojedynczy plik do innego pojedynczego pliku, ale nie tworzy archiwów.

Format pliku

... Chociaż jego format pliku pozwala także na łączenie wielu takich strumieni (spakowane pliki są po prostu dekompresowane i łączone tak, jakby były pierwotnie jednym plikiem), gzip jest zwykle używany do kompresji tylko pojedynczych plików. [4] Skompresowane archiwa są zwykle tworzone przez połączenie zbiorów plików w jednym archiwum tar, a następnie skompresowanie tego archiwum za pomocą gzip.

Matt Ball
źródło
12
Nie ma czegoś takiego jak plik „tgz”. To jest tar.gz. Zadaniem gzip jest spakowanie lub rozpakowanie jego zawartości (w tym przypadku archiwum tar). Następnie rozpakuj archiwizację za pomocą tar. Jest to typowa filozofia potoków uniksowych, a zatem mało wyjątkowa.
luis.espinal
5
Nie .tar.gz nie jest unikalny: .tar.bz2, .cpio.gz itp. Działają w ten sam sposób.
user46971,
3
@ user36310 Wiem, co masz na myśli, ale w praktyce narzędzia pozwalają wyodrębnić pojedynczy plik. tar -xzvf tarball.tar.gz single/file.txt. Za kulisami musi wykonać dodatkową pracę, ale dla pozorów wyodrębnia pojedynczy plik.
Rich Homolka
4
Zrób to „dużo dodatkowej pracy”, jeśli plik znajduje się na końcu dużego archiwum. Oczywiście, jeśli potrzebujesz dostępu losowego, zip / rar / xar / 7z / lzh / arj / cab / sit itp. Są lepszymi formatami.
LaC
3
Mówiąc ściślej, .tar.*skompresowane archiwum jest zawsze „solidne”, tj. składa się z jednego skompresowanego strumienia. Z .zipdrugiej strony archiwum nie jest pełne, algorytm kompresji jest uruchamiany od nowa dla każdego pliku. Poświęca wydajność kompresji, aby przyspieszyć losowy dostęp. .7zarchiwa mogą być pełne, niestałe lub mieć pełne bloki.
Daniel B
17

Gzip / Bzip2 to kompresory strumieniowe. Kompresują strumień danych w coś mniejszego. Można ich używać w pojedynczych plikach, ale nie we własnych grupach plików.

Z drugiej strony, Tar ma możliwość przekształcenia listy plików ze ścieżkami, uprawnieniami i informacjami o własności w jeden ciągły strumień - i odwrotnie.

Dlatego, aby zarchiwizować pliki (i jeśli również potrzebna jest kompresja), zwykle używa się tar + metody kompresji.

Dan
źródło
12

Tar odpowiada za wykonanie jednej i tylko jednej rzeczy: (nie) archiwizacji do (z) jednego pliku archiwum. Czego? Jednej i jednej rzeczy: zestawu plików.

Gzip odpowiada za wykonanie jednej i tylko jednej rzeczy: (kompresowanie). Czego? Jedno i tylko jedno: jeden plik dowolnego typu ... i zawiera plik utworzony za pomocą tar.

Wraca do filozofii potokowej UNIX, podstawowej architektury „potoku i filtrów”; traktowanie wszystkiego jako pliku i dźwiękowego celu architektonicznego „jedno-jedno-jedno-jedyne-i-robi-to-dobrze” (co skutkuje bardzo eleganckim i prostym rodzajem plug-and-play .)

W swojej prostocie ma niemal algebraiczny charakter (ogromny cel w projektowaniu systemów). I to nie jest łatwe zadanie.

Pod wieloma względami (i nie bez wad) jest to prawie szczyt składalności, modułowości, luźnego połączenia i wysokiej kohezji. Jeśli zrozumiesz te cztery (a mam na myśli naprawdę rozumiesz ), zrozumiesz, będzie oczywiste, dlaczego tar i gzip działają w ten sposób w parach.

luis.espinal
źródło
1
Ta filozofia UNIX jest piękna w porządku, ale obserwuję, że jej brak, tworząc niestałe archiwa. (Wyodrębnienie pojedynczego pliku z 1-GB tar.gz nie powinno być uciążliwe, a z tego, co tutaj zrozumiałem, ZIP jest znacznie lepszy niż tar.gz ... prawda?)
Mehrdad
@ Mehrad - Po pierwsze , co to jest niestałe archiwum? Jak przypisuje się Voltaire: „Jeśli chcesz ze mną rozmawiać, najpierw musisz zdefiniować swoje terminy”. . Po drugie , tak, architektura rur i filtrów jest w niektórych przypadkach niewystarczająca, tak jak każda inna architektura, niezależnie od jej piękna. To jest pewne z odrobiną inżynierii i nie jest to argument, który się wysuwa. Po trzecie , zip jest lepszy od gzip i tar, ale nie o to prosiłeś. Zapytałeś, dlaczego zip i smoła działają tak, jak działają i czy były jakieś zalety, i dostałeś odpowiedź techniczną.
luis.espinal
@ Mehrad - także nie wiem, jakie problemy napotykasz podczas rozpakowywania | rozpakowania pliku tar.gz 1gig. Robiłem to wiele razy, do 2 GB przy starszych instalacjach gzip (i do 4 GB przy nowszych wersjach gzip). Jeśli robisz to przez sieć lub na montażu NFS, to duh! Napotkasz podobne problemy z wydajnością, jak w przypadku zwykłego zamka błyskawicznego. Cholera, nawet rozpakowałem od potoku do zdalnego procesu, plując wejście gzip do gniazda. Wypróbuj to z zip. Do każdego problemu użyj odpowiedniego narzędzia (tar | gz lub zip.)
luis.espinal
8

Po pierwsze, TAR nie został stworzony do tworzenia archiwów plików . To ARCHiver Tape . Jego zadaniem jest zapisanie lub załadowanie archiwum na / z taśmy.

Opcja -f powoduje, że używa pliku jako „wirtualnej taśmy”, którą można następnie skompresować za pomocą innego programu. W rzeczywistości taka kompresja zachodzi również w rzeczywistych napędach taśmowych.

Oczywiście w tym przypadku liczy się również filozofia używania jednego programu, ale można pominąć, dlaczego archiwa TAR mają strukturę strumienia zamiast katalogu zawartości + zawartości.

p_l
źródło
3
Racja ... Pliki ZIP umieszczają wszystkie informacje o pliku w ujednoliconym nagłówku, a następnie całą zawartość pliku ... co uniemożliwia dołączenie większej liczby plików do pliku ZIP ... musisz przepisać cały plik ... z Format TAR, nagłówek każdego pliku jest osobny, dzięki czemu można łatwo dołączyć więcej plików bez przepisywania całej taśmy
JoelFan
5

Tradycyjnie stosowane systemy Unix jeden program, aby wykonać jedno zadanie za tym filozofii Uniksa : tarbyła tylko środkiem do pakowania wielu plików w jednym pliku, pierwotnie dla kopii zapasowej na taśmie (stąd tar, t małpa ar szczypiorek). tarnie zapewnia kompresji; archiwum wynikowe nieskompresowany zazwyczaj skompresowane z innego programu, takiego jak gzip, bzip2lub xz. W dawnych czasach używali tego compresspolecenia; nowsze algorytmy kompresji są znacznie bardziej skuteczne niż to.

Wysoce modularne podejście podyktowane filozofią Unix oznacza, że ​​każdy program może być używany indywidualnie w zależności od potrzeb lub łączony w celu wykonywania bardziej złożonych zadań, w tym tworzenia skompresowanych archiwów, jak opisano tutaj. Do tego rodzaju zadań ułatwia także wymianę poszczególnych narzędzi w razie potrzeby; wystarczy zmienić program do kompresji, aby używał innego algorytmu kompresji, bez konieczności wymiany samego tarnarzędzia.

To modułowe podejście nie jest pozbawione wad. Jak wspomniano w komentarzach do innych odpowiedzi, dedykowany skompresowany format archiwum, podobnie jak, .zipjest w stanie lepiej obsługiwać ekstrakcję pojedynczych plików; skompresowane pliki .ziparchiwów muszą być prawie całkowicie zdekompresowane, aby wyodrębnić pliki pod koniec archiwum, podczas gdy archiwa umożliwiają losowy dostęp do ich zawartości. (Niektóre nowsze formaty, takie jak .7z, obsługują pełne i niestałe archiwa, a także stałe bloki o różnych rozmiarach w większych archiwach.) Dalsze używanie tarw połączeniu z oddzielnym narzędziem do kompresji jest kwestią tradycji i kompatybilności; również, .7zi .zipnie obsługują Unix metadane systemu plików, takie jak uprawnienia.

bwDraco
źródło