Odpowiedzi:
TAR tworzy pojedynczy zarchiwizowany plik z wielu plików, ale ich nie kompresuje.
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.
... 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.
tar -xzvf tarball.tar.gz single/file.txt
. Za kulisami musi wykonać dodatkową pracę, ale dla pozorów wyodrębnia pojedynczy plik.
.tar.*
skompresowane archiwum jest zawsze „solidne”, tj. składa się z jednego skompresowanego strumienia. Z .zip
drugiej 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. .7z
archiwa mogą być pełne, niestałe lub mieć pełne bloki.
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.
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.
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.
Tradycyjnie stosowane systemy Unix jeden program, aby wykonać jedno zadanie za tym filozofii Uniksa : tar
był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). tar
nie zapewnia kompresji; archiwum wynikowe nieskompresowany zazwyczaj skompresowane z innego programu, takiego jak gzip
, bzip2
lub xz
. W dawnych czasach używali tego compress
polecenia; 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 tar
narzędzia.
To modułowe podejście nie jest pozbawione wad. Jak wspomniano w komentarzach do innych odpowiedzi, dedykowany skompresowany format archiwum, podobnie jak, .zip
jest w stanie lepiej obsługiwać ekstrakcję pojedynczych plików; skompresowane pliki .zip
archiwó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 tar
w połączeniu z oddzielnym narzędziem do kompresji jest kwestią tradycji i kompatybilności; również, .7z
i .zip
nie obsługują Unix metadane systemu plików, takie jak uprawnienia.