Czy tar faktycznie kompresuje pliki, czy po prostu grupuje je razem?

37

Zazwyczaj zakładałem, że tarbyło to narzędzie do kompresji, ale nie jestem pewien, czy faktycznie kompresuje pliki, czy jest to tak jak plik ISO, plik do przechowywania plików?

Doktor
źródło
Również na SuperUser .
allquixotic

Odpowiedzi:

49

Tar jest narzędziem do archiwizacji (Tape ARchive), zbiera tylko pliki i ich metadane razem i tworzy jeden plik. Jeśli chcesz później skompresować ten plik, możesz użyć gzip / bzip2 / xz. Dla wygody tar udostępnia argumenty do automatycznego skompresowania archiwum. Kasy na stronę man tar więcej szczegółów.

0xAF
źródło
9
Lekkie wyjaśnienie odpowiedzi. To tar GNU zapewnia te dodatkowe argumenty kompresji. Na przykład tar Solaris nie dostarcza argumentów do kompresji.
Tero Kilkanen
5
oooh, dlatego ciągle widzęthing.tar.7z
Kaczka Mooing
Tar BSD dostarcza również argumentu do kompresji, chociaż akceptuje tylko zi określa metodę kompresji na podstawie rozszerzenia, podczas gdy tar GNU ma osobne zZjJargumenty dla różnych metod kompresji.
wingedsubmariner
2
Wystarczy przeczytać stronę podręczną tar BSD i okazuje się, że się myliłem, tar BSD używa osobnej zZjJkompresji tak jak tar GNU. Jednak automatycznie wykrywa kompresję podczas dekompresji, podczas gdy GNU tar zZjJrównież tego oczekuje .
wingedsubmariner
5
@wingedsubmariner: no; nowoczesne wersje GNU tardekompresują się automatycznie, bez konieczności korzystania z -zZjJopcji.
Jonathan Leffler,
17

tartworzy archiwa; Kompresja jest osobną funkcją. Jednak tar sam może zmniejszyć zużycie miejsca, gdy jest używany do dużej liczby małych plików, które są mniejsze niż rozmiar klastra systemu plików. Jeśli system plików używa klastrów 1kb, nawet plik zawierający pojedynczy bajt zużyje 1kb (plus i-węzeł). tarArchiwum nie ma tego narzutu.

BTW, plik ISO nie jest tak naprawdę „plikiem do przechowywania plików” - to w rzeczywistości obraz całego systemu plików (pierwotnie zaprojektowanego do użycia na płytach CD), a zatem jego struktura jest znacznie bardziej złożona.

Michael Borgwardt
źródło
3
W rzeczywistości pusty plik nie zużywa 1kb. Plik 1-1023 bajtów będzie.
psusi
@psusi, więc plik bajtów 1-1023 zużywa zawsze 1024, co powoduje marnowanie 1023-1 bajtów.
Shiplu Mokaddim
2

Oryginalne polecenie tar systemu UNIX nie kompresowało archiwów. Jak wspomniano w komentarzu, tar Solaris nie kompresuje się. Ani HP-UX, ani AIX, FWIW. Zgodnie z konwencją archiwa nieskompresowane kończą się na .tar.

Z GNU / Linux dostajesz GNU tar. (Możesz zainstalować GNU tar na innych systemach UNIX.) Domyślnie nie kompresuje się; jednak robi kompresji wynikającą z archiwum gzip (również przez GNU), jeśli dostarczy -z. Tradycyjny sufiks dla plików spakowanych gzip jest .gztaki, że często zobaczysz tarballi (slang dla archiwum tar, zwykle sugerujący, że został skompresowany), które kończą się na .tar.gz. To zakończenie oznacza, że ​​uruchomiono tar, a następnie gzip, np tar cf - .|gzip -9v > archive.tar.gz. Znajdziesz także archiwa kończące się .tgznp tar czf archive.tgz ..

Edycja: www.linfo.org/tar.html przypomniało mi, że GNU tar obsługuje znacznie więcej funkcji niż tylko kompresowanie za pomocą gzip, i przypomniało mi, że sufiksy to coś więcej niż zwykłe konwencje. Mają wbudowaną semantykę. Obsługuje również bzip2 ( -jfor .bz2) i stary kompres ( -Zfor .Z). Potem spojrzałem na stronę podręcznika i przypomniano mi, że -aautomatycznie mapuje wybraną metodę kompresji na podstawie sufiksu.

Jeszcze jedna nitka. Jak mówi strona podręcznika systemowego tar Linux, GNU tworzy strony informacyjne, a nie strony podręcznika man, więc aby dowiedzieć się wszystkiego o tar tar GNU, uruchom info tar.

tbc0
źródło
Tar GNU nadal nie radzi sobie z kompresjami, po prostu potokuje do / z gzip, bzip2, kompres i innych.
ott--
Spojrzałem na źródło . Tar GNU obsługuje kompresję! Implementacja korzysta z ponownego wykorzystania kodu i dźwięku zasad architektury przestrzeni użytkownika UNIX. „Tylko rury” rozumie, w jaki sposób kompresja jest ściśle zintegrowana z narzędziem. Fakt, że zdarza się to w przypadku programów pomocniczych dla rozwidleń, jest techniczną sprawą. Jeśli chcesz bronić „tylko potoków”, przytaczaj nazwy plików i numery linii i zobaczmy, po której stronie jest społeczność.
tbc0,
Sprawdzanie tego źródła może potrwać kilka dni.
ott--
1

Narzędzie tar nie kompresuje się, dopóki nie podasz argumentu [nazwa pliku tar -z].

AJ
źródło