Jaka jest różnica w przypadku wszystkich różnych typów archiwów .tar?

16

Czy ktoś mógłby mi powiedzieć, co się dzieje z tyloma archiwami i czym się różnią?

Jest co najmniej pięć, że mogę myśleć, .tar.tz, .tar.gz, .tar.bz2, .tar.lz,.tar.z

Które jest najlepsze dla jakich aplikacji? Po prostu wydaje się niemądre robić tyle odmian tego samego pliku, ale jestem pewien, że istnieje powód.

Trevor Gross
źródło

Odpowiedzi:

18

.gz, .xz, .bz2, .7z, .lz, .zPrzyrostki używane są w celu wyjaśnienia, że plik jest skompresowany za pomocą algorytmu kompresji powiedział. Jego użycie nie ogranicza się do .tarplików, zobaczysz także pliki takie jak initrd.gz(skompresowany początkowy ramdysk) lub manual.txt.gz(w przypadku skompresowanego dokumentu tekstowego). Możesz także zobaczyć, file.tgzco wskazuje również na skompresowany przez gzip plik tarball (podobny file.tar.gz).

Rozszerzenie pliku jest konwencją, niekoniecznie opisuje zawartość pliku. Aby sprawdzić rodzaj obsługiwanego pliku, użyj filepolecenia. Przykład:

$ file data.tar.gz
data.tar.gz: gzip compressed data, from Unix
$ gunzip -c data.tar.gz | file -
/dev/stdin: POSIX tar archive (GNU)

Z mojego doświadczenia wynika, że ​​pliki skompresowane gzip ( .gz) są najczęstsze. Jest szybki w kompresji i dekompresji, chociaż istnieją inne algorytmy, które dają lepsze współczynniki kompresji.

Lekensteyn
źródło
8

Oprócz odpowiedzi @Lekensteyn, chciałbym dodać, że to zachowanie opiera się na Zrób jedną rzecz i zrób to dobrze filozofię - tarprogram wie, jak umieścić wiele plików w jednym strumieniu (z .tarrozszerzeniem), gzipwie, jak skompresować pojedynczy plik (dodanie .gzrozszerzenia) *. Łącząc te narzędzia, możesz utworzyć polecenie, które kompresuje wiele plików w jeden .tag.gzplik.

To podejście jest bardzo elastyczne - możesz łączyć kilka standardowych poleceń Uniksa, aby wykonywać różne czynności. Na przykład, jeśli napiszesz lepszy program do kompresji plików, nie musisz go modyfikować, taraby umożliwić mu tworzenie .tar.mymegazipplików - zamiast tego po prostu wysyłasz tardane wyjściowe do kompresora.

Podobnie, tarnic nie wie o SSH, ale łącząc polecenia, możesz utworzyć skrypt, który archiwizuje pliki, przesyła je do zdalnego komputera za pośrednictwem SSH i tam je archiwizuje.

Porównaj to z zippoleceniem, które nie pochodzi z Uniksa - ma wbudowane narzędzia do kompresji całych katalogów, szyfrowania plików, dzielenia archiwum na mniejsze pliki zip itp.


(przypis) - tak, tarjest w stanie sam skompresować pliki gzip lub bzip za pomocą -zi -jprzełączników, zostały one dodane dla wygody, a tar GNU faktycznie się spawnuje gziplub bzip2jest nowym procesem.

Siergiej
źródło
Przykład: polecenia tar c dir/ | gzip > dir.tar.gzi tar czf dir.tar.gz dir/polecenia robią to samo. Przykład, w którym tarłączy się ssh i tar(ponownie) tar cz Documents/ | ssh user@host 'tar xz(równowartość rsync będzie: rsync -a Documents user@host:)
Lekensteyn