Dlaczego ludzie używają tarballi?

91

Jako programista przede wszystkim Windows, być może brakuje mi czegoś kulturowego w społeczności Linuksa, ale zawsze mnie to wprawiało w zakłopotanie.

Podczas pobierania czegoś pliki są najpierw umieszczane w .tararchiwum, a następnie spakowane . Dlaczego proces dwuetapowy? Czy kompresowanie nie zapewnia grupowania plików? Czy jest jakaś inna korzyść, o której nie wiem?

Brian Sullivan
źródło
3
Zwykle wystarczy połączyć kompresję i grupowanie plików w jedno polecenie. tar -zcf plik.tar.gz niektóre nazwy plików
Juha Syrjälä
1
Nikt nie wspomniał, że przesłanie 1000000 plików o rozmiarze 1 bajt jest droższe niż przesłanie jednego pliku o rozmiarze 1000000 bajtów.
Milo LaMar

Odpowiedzi:

137

bzipi gzippracuj na pojedynczych plikach, a nie na grupach plików. Zwykłe stare zip(i pkzip) działają na grupach plików i mają wbudowaną koncepcję archiwum.

Filozofia * nix jest jednym z małych narzędzi, które bardzo dobrze wykonują określone zadania i można je łączyć łańcuchami. Dlatego są tutaj dwa narzędzia, które mają określone zadania i są zaprojektowane tak, aby dobrze do siebie pasowały. Oznacza to również można użyć do plików tar grupowych i wtedy masz wybór narzędzia kompresji ( bzip, gzipitp).

Stewart Johnson
źródło
2
Odpowiedział szybciej i trochę lepiej niż ja - myślę, że wrócę do pracy!
Harper Shelby
9
Pokonałem cię o 4 minuty i to wieczność w przepełnieniu stosu. :-)
Stewart Johnson
1
Warto zauważyć, że zarówno tar, jak i gzip są przydatne same w sobie, dlatego są oddzielone. Dzięki sprytnemu wykorzystaniu potoków przeniosłem kiedyś folder z jednego komputera na drugi przez tarowanie, pakowanie i przepinanie przez SSH, a następnie rozpakowywanie i rozpakowywanie w miejscu docelowym. Jedno polecenie, bez plików tymczasowych.
rmeador
1
Można również powiedzieć, że trzymają się tego, co zostało udowodnione, że działa dobrze, zamiast zmieniać rzeczy i łamiąc kompatybilność. .tar.gz można wykonać w jednym kroku, niezależnie od tak zwanych nowoczesnych narzędzi i technik (proszę zarejestrować WinZip).
JeeBee,
2
Nie mogę uwierzyć, że nikt ani nie edytował pytania, ani nie zostawił komentarza wspominającego (imo) o całym punkcie korzystania z tararchiwów: obsłudze uprawnień systemu plików Linuksa . Co by się stało, gdybyś pobrał pakiet Debiana, zainstalował go menedżer pakietów, ale żaden z plików wykonywalnych nie był wykonywalny? To prawdziwy powód, dla którego wszyscy używają tarballi ...;)
JamesTheAwesomeDude
29

Istotnym rozróżnieniem są dwa rodzaje archiwów.

Pliki TAR to niewiele więcej niż konkatenacja zawartości pliku z niektórymi nagłówkami, podczas gdy gzip i bzip2 to kompresory strumieniowe, które w archiwach tar są stosowane do całej konkatenacji.

Pliki ZIP to konkatenacja indywidualnie skompresowanych plików z pewnymi nagłówkami. W rzeczywistości algorytm DEFLATE jest używany zarówno przez zip, jak i gzip, a po odpowiednim dostosowaniu binarnym można pobrać ładunek strumienia gzip i umieścić go w pliku zip z odpowiednimi wpisami w nagłówku i słowniku.

Oznacza to, że dwa różne typy archiwów mają różne kompromisy. W przypadku dużych zbiorów małych plików TAR, po którym następuje kompresor strumieniowy, zwykle skutkuje wyższym współczynnikiem kompresji niż ZIP, ponieważ kompresor strumieniowy będzie miał więcej danych do zbudowania częstotliwości słownika, a tym samym będzie w stanie wycisnąć więcej nadmiarowych informacji. Z drugiej strony błąd (z zachowaniem długości pliku) w pliku ZIP spowoduje uszkodzenie tylko tych plików, których dotyczyło skompresowane dane. Zwykle kompresory strumieniowe nie mogą w znaczący sposób odzyskać sprawności po błędach w trakcie transmisji. Dzięki temu pliki ZIP są bardziej odporne na uszkodzenie, ponieważ część archiwum będzie nadal dostępna.

Barry Kelly
źródło
Dziękujemy za rozróżnienie między zip i tar + gzip!
Łukasz
1
+1 dla rozróżnienia między „kompresją pliku zagregowanego” a „agregacją plików skompresowanych”.
Jesse Chisholm
Powód, dla którego smoła zapewnia lepsze współczynniki kompresji, a zamek błyskawiczny jest bardziej sprężysty, z drugiej strony tłumaczy się faktem, że smoła jest rodzajem solidnej kompresji, podczas gdy zamek błyskawiczny nie jest solidny.
gaborous
@Barry, więc podsumowując, kto wygrywa? (zakładając, że używamy nowoczesnych systemów operacyjnych)
Pacerier,
@Pacerier Myślę, że nie ma żadnej wygranej. Zipy są lepsze w przypadku dostępu losowego i do użytku przez osoby korzystające z systemu Windows. Tarballe mają wyższą zgodność po wyjęciu z pudełka w systemach Linux i Unix. Tarballe mają nieco wyższą kompresję, ale aby uzyskać dostęp do czegokolwiek, musisz zdekompresować całość. Oba obsługują dowolne algorytmy kompresji, ale znacznie łatwiej jest mieszać i dopasowywać z plikami tar. W zależności od celu, jedno i drugie mogłoby być lepsze.
Barry Kelly,
26

To dziwne, że nikt inny nie wspomniał, że współczesne wersje GNU tarpozwalają na kompresowanie podczas pakowania:

tar -czf output.tar.gz directory1 ...

tar -cjf output.tar.bz2 directory2 ...

Możesz także użyć wybranego kompresora, pod warunkiem, że obsługuje on opcje ' -c' (do stdout lub ze stdin) i ' -d' (decompress):

tar -cf output.tar.xxx --use-compress-program=xxx directory1 ...

Umożliwiłoby to określenie dowolnej alternatywnej sprężarki.

[ Dodano : Jeśli wyodrębniasz z gziplub bzip2skompresowane pliki, GNU tarautomatycznie je wykrywa i uruchamia odpowiedni program. Oznacza to, że możesz użyć:

tar -xf output.tar.gz
tar -xf output.tgz        # A synonym for the .tar.gz extension
tar -xf output.tar.bz2

i będą one obsługiwane prawidłowo. Jeśli używasz niestandardowego kompresora, musisz to określić podczas wyodrębniania.]

Przyczyną separacji jest, podobnie jak w wybranej odpowiedzi, rozdzielenie obowiązków. Oznacza to między innymi, że ludzie mogli używać programu ' cpio' do pakowania plików (zamiast tar), a następnie używać wybranego kompresora (kiedyś preferowany był kompresor pack, później był compress(który był znacznie bardziej efektywny niż pack), a następnie gzipktóry krążył wokół obu swoich poprzedników i jest całkowicie konkurencyjny zip(który został przeniesiony na Uniksa, ale nie jest tam natywny), a teraz bzip2, z mojego doświadczenia, ma zwykle 10-20% przewagę gzip.

[ Dodano : ktoś zauważył w swojej odpowiedzi, że cpioma zabawne konwencje. To prawda, ale dopóki GNU tarnie otrzymało odpowiednich opcji (' -T -'), cpiobyło lepszym poleceniem, gdy nie chciałeś archiwizować wszystkiego, co znajdowało się pod danym katalogiem - tak naprawdę można było wybrać dokładnie, które pliki były archiwizowane. Wadą cpiobyło to, że nie tylko można było wybierać pliki - trzeba było je wybierać. Wciąż jest jedno miejsce, gdzie cpiowyniki; może wykonać kopię in-situ z jednej hierarchii katalogów do innej bez pośredniej pamięci:

cd /old/location; find . -depth -print | cpio -pvdumB /new/place

Nawiasem mówiąc, -depthopcja „ ” włączona findjest ważna w tym kontekście - kopiuje zawartość katalogów przed ustawieniem uprawnień do samych katalogów. Kiedy sprawdziłem polecenie przed wprowadzeniem dodatku do tej odpowiedzi, skopiowałem kilka katalogów tylko do odczytu (uprawnienia 555); kiedy poszedłem usunąć kopię, musiałem złagodzić uprawnienia do katalogów, zanim „ rm -fr /new/place” mogłem zakończyć. Bez tej -depthopcji cpiopolecenie nie powiodłoby się. Przypomniałem sobie to dopiero, gdy poszedłem na sprzątanie - przytoczona formuła jest dla mnie taka automatyczna (głównie z powodu wielu powtórzeń przez wiele lat). ]

Jonathan Leffler
źródło
Rozszerzony format ZIP mógłby pomieścić wtyczki kompresorów strumieniowych tak samo jak TAR, ale bez odpowiedniego protokołu IPC byłby prawdopodobnie wolniejszy z powodu nadmiernego wykonywania podprocesów.
Barry Kelly
moje polecenie goto: tar -xfvz tarpkg.tar.gz (zamień z na aj dla skompresowanych archiwów bz2)
Bryan Rehbein
1
@Redbeard: tar automatycznie wykrywa gzip i bzip2 podczas wypakowywania - aby utworzyć, musisz powiedzieć mu, co ma zrobić, ale ja po prostu używam -xf (lub -xvf) i nazwy pliku tar.
Jonathan Leffler
15

Zabawne jest to, że możesz uzyskać zachowania, których twórcy tari nie przewidzieli gzip. Na przykład, możesz nie tylko zgzipować plik tar, ale także spakować pliki gzip, aby utworzyć plik files.gz.tar(technicznie byłoby to bliżej sposobu pkzipdziałania). Możesz też umieścić inny program w potoku, na przykład kryptografię, i możesz wybrać dowolną kolejność tarowania, gzipowania i szyfrowania. Ktokolwiek napisał program kryptograficzny, nie musi mieć najmniejszego pojęcia, jak jego program będzie używany, wystarczy, że przeczyta ze standardowego wejścia i wypisze na standardowe wyjście.

Svante
źródło
Podczas generowania pliku pamiętaj, aby zaszyfrować po kompresji, a nie wcześniej, ponieważ wynik szyfrowania wygląda losowo i trudno go skompresować.
Jonathan Leffler,
8

W świecie Uniksa większość aplikacji jest zaprojektowana do robienia jednej rzeczy i robi to dobrze. Najpopularniejsze narzędzia do zip w systemach Unix, gzip i bzip2 wykonują tylko kompresję plików. tar wykonuje konkatenację plików. Przesyłanie danych wyjściowych tar do narzędzia kompresującego robi to, czego potrzeba, bez nadmiernego komplikowania któregokolwiek z programów.

Harper Shelby
źródło
7

Innym powodem, dla którego jest tak powszechny, jest to, że tar i gzip znajdują się w prawie całej bazie instalacji * NIX. Uważam, że jest to prawdopodobnie największy powód. Jest to również powód, dla którego pliki zip są niezwykle rozpowszechnione w systemie Windows, ponieważ wsparcie jest wbudowane, niezależnie od nadrzędnych procedur w RAR lub 7z.

GNU tar umożliwia również tworzenie / wyodrębnianie tych plików za pomocą jednego polecenia (jeden krok):

  • Utwórz archiwum:
  • tar -cfvj destination.tar.bz2 *.files
  • tar -cfvz destination.tar.gz *.files

  • Rozpakuj archiwum: (część -C jest opcjonalna, domyślnie jest to bieżący katalog)

  • tar -xfvj archive.tar.bz2 -C destination_path
  • tar -xfvz archive.tar.gz -C destination_path

To jest to, co zapamiętałem przez wiele lat spędzonych na Linuksie, a ostatnio w Nexencie (OpenSolaris).

Bryan Rehbein
źródło
3
Właściwie jest odwrotnie: zip jest teraz wbudowany w Windows, ponieważ był powszechny w DOS i wczesnych wersjach systemu Windows.
Christian Lescuyer,
Lubię używać RAR w systemie Windows, tar.bz2 w systemie Linux
Osama Al-Maadeed
Możesz zauważyć dziwną (niezgodną z funkcją getopt ()) parsowanie opcji, a myślnik jest opcjonalny, ponieważ tar poprzedza standardowe konwencje opcji poleceń Uniksa.
Jonathan Leffler
5

Myślę, że szukałeś więcej kontekstu historycznego. Oryginalny plik zip był przeznaczony dla jednego pliku. Tar służy do umieszczania wielu plików w jednym pliku. Dlatego smołowanie i zapinanie to proces dwuetapowy. Nikt nie wie, dlaczego nadal jest tak dominujący.

Z Wikipedii dla Tar_ (file_format)

W informatyce tar (wywodzący się z archiwum taśmowego) jest zarówno formatem pliku (w postaci typu strumienia bitów archiwum), jak i nazwą programu używanego do obsługi takich plików. Format został ustandaryzowany przez POSIX.1-1988, a później POSIX.1-2001. Początkowo opracowany jako format surowy, używany do tworzenia kopii zapasowych na taśmach i innych urządzeń o sekwencyjnym dostępie do celów tworzenia kopii zapasowych, jest obecnie powszechnie używany do gromadzenia zbiorów plików w jeden większy plik do dystrybucji lub archiwizacji, przy jednoczesnym zachowaniu informacji o systemie plików, takich jak użytkownik i grupa uprawnienia, daty i struktury katalogów.

martinatime
źródło
4

tar to UNIX, tak jak UNIX to tar

Moim zdaniem powodem, dla którego nadal używam tardzisiaj jest to, że jest to jeden z (prawdopodobnie rzadkich) przypadków, w których podejście UNIX-a sprawiło, że od samego początku było to doskonałe.

Przyglądając się bliżej etapom tworzenia archiwów, mam nadzieję, że zgodzisz się, że sposób, w jaki odbywa się rozdzielanie różnych zadań, jest zgodny z filozofią UNIX w najlepszym wydaniu:

  • jedno narzędzie ( tarżeby nadać mu tutaj nazwę) specjalizujące się w przekształcaniu dowolnego zbioru plików, katalogów i dowiązań symbolicznych, w tym wszystkich istotnych metadanych, takich jak znaczniki czasu, właściciele i uprawnienia, w strumień jednobajtowy.

  • i po prostu kolejne dowolnie zamienne narzędzie ( gzip bz2 xzżeby wymienić tylko kilka opcji), które przekształca dowolny strumień wejściowy bajtów w inny (miejmy nadzieję) mniejszy strumień wyjściowy.

Zastosowanie takiego podejścia zapewnia szereg korzyści zarówno użytkownikowi, jak i deweloperowi:

  • rozszerzalność Umożliwienie połączenia tarz dowolnym już istniejącym algorytmem kompresji lub jakimkolwiek algorytmem kompresji, który jeszcze nie został opracowany, bez konieczności zmiany czegokolwiek w wewnętrznym działaniu tar.

    Gdy tylko pojawi się zupełnie nowe narzędzie do kompresji „hyper-zip-utra”, jesteś już gotowy do użycia go, obejmując nowego sługę z całą mocą tar.

  • stabilność tar była intensywnie wykorzystywana od wczesnych lat 80-tych, testowana i wykorzystywana w wielu systemach operacyjnych i maszynach.

    Zapobieganie konieczności ponownego odkrywania koła we wdrażaniu przechowywania własności, uprawnień, znaczników czasu itp. W kółko dla każdego nowego narzędzia do archiwizacji nie tylko oszczędza dużo (w przeciwnym razie niepotrzebnie spędzanego) czasu na opracowywaniu, ale także gwarantuje taką samą niezawodność dla każdego Nowa aplikacja.

  • spójność Interfejs użytkownika po prostu pozostaje taki sam przez cały czas.

    Nie trzeba pamiętać, że aby przywrócić uprawnienia za pomocą narzędzia A, musisz przekazać opcję, --i-hope-you-rember-this-onea za pomocą narzędzia B musisz użyć --this-time-its-another-one narzędzia C, to `--hope-you-didnt-try-with-tool-as-switch.

    Podczas gdy używając narzędzia D, naprawdę byś je popsuł, gdybyś go nie używał --if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now.

mikyra
źródło
3

smoła jest popularna głównie ze względów historycznych. Istnieje kilka łatwo dostępnych alternatyw. Niektóre z nich istnieją prawie tak długo, jak smoła, ale nie mogły przewyższyć popularności smoły z kilku powodów.

  • cpio (składnia obcych; teoretycznie bardziej spójna, ale ludziom podoba się to, co znają, dominuje smoła)
  • ar (popularny dawno temu, obecnie używany do pakowania plików bibliotecznych)
  • shar (samorozpakowujące się skrypty powłoki, miały różne rodzaje problemów; kiedyś był popularny)
  • zip (z powodu problemów licencyjnych nie był łatwo dostępny na wielu Unices)

Główną zaletą (i wadą) tar jest to, że nie ma ani nagłówka pliku, ani centralnego katalogu zawartości. Dlatego przez wiele lat nigdy nie cierpiał z powodu ograniczeń rozmiaru plików (aż do tej dekady, w której ograniczenie do 8 GB plików w archiwum stało się problemem, rozwiązanym lata temu).

Najwyraźniej jedyną wadą tar.gz (lub ar.Z w tym przypadku), która polega na tym, że musisz zdekompresować całe archiwum, aby wyodrębnić pojedyncze pliki i wyświetlić zawartość archiwum, nigdy nie zaszkodziło ludziom na tyle, aby spowodować ich defekty z tar w znacznej liczbie .

edgar.holleis
źródło
Stare wersje tar nie zawierały informacji o nagłówku; nowe (zgodne z POSIX, USTAR) wersje tar (np. GNU tar) do. Polecenie „plik” to rozumie.
Jonathan Leffler
2

gzip i bzip2 to po prostu kompresor, a nie oprogramowanie do archiwizacji. Stąd kombinacja. Potrzebujesz oprogramowania tar, aby spakować wszystkie pliki.

Sam ZIP i RAR są połączeniem tych dwóch procesów.

jishi
źródło
2

Zwykle w świecie * nux pakiety plików są rozprowadzane jako tarballi, a następnie opcjonalnie gzipowane. Gzip to prosty program do kompresji plików, który nie obsługuje grupowania plików tak, jak robi to tar lub zip.

Kiedyś, zip nie obsługiwał poprawnie niektórych rzeczy, które uniksowe systemy plików tar i unixowe systemy plików uważały za normalne, takie jak dowiązania symboliczne, mieszane pliki wielkości liter itp. Nie wiem, czy to się zmieniło, ale dlatego używamy tar.

Paul Tomblin
źródło
1
* nux - Linux, Unux, Solarnux?
mackenir
1
@mackenir - nie zapomnij o POSUX. :-)
Paul Tomblin
1
@mackenir - A może powinien to być POSNUX?
Paul Tomblin,
1

Tar = grupuje pliki w 1 plikach

GZip = Spakuj plik

Podzielili proces na 2. To wszystko.

W środowisku Windows możesz być bardziej przyzwyczajony do korzystania z programu WinZip lub WinRar wykonującego Zip. Proces zip w tym oprogramowaniu grupuje plik i kompresuje, ale po prostu nie widzisz tego procesu.

Patrick Desjardins
źródło
3
Nie jest to najlepsze wyjaśnienie, biorąc pod uwagę, że pliki „zip”, do których używany jest OP w systemie Windows, już zawierają grupowanie.
Gareth
1

Z tego samego powodu, dla którego użytkownicy komputerów Mac uwielbiają obrazy dysków: są naprawdę wygodnym sposobem archiwizowania rzeczy, a następnie przekazywania ich, przesyłania / pobierania lub wysyłania pocztą e-mail itp.

I łatwiejszy w użyciu i bardziej przenośny niż zamki błyskawiczne IMHO.

Tobias
źródło
1

W moich dniach Altos-XENIX (1982) zaczęliśmy używać tar (archiwizatora taśmowego) do wypakowywania plików z 5 1/4 dyskietek lub taśmy strumieniowej, a także kopiowania na te nośniki. Jego funkcjonalność jest bardzo podobna do poleceń BACKUP.EXE i RESTORE.EXE w DOS 5.0 i 6.22 jako uzupełnienia, pozwalając na objęcie wielu nośników, jeśli nie mieszczą się one tylko na jednym. Wadą było to, że jeśli jeden z wielu mediów miał problemy, całość była bezwartościowa. tar i dd pochodzą z UNIX SYstem III i pozostały standardowym narzędziem do wydania z systemem operacyjnym podobnym do UNIX, prawdopodobnie ze względu na kompatybilność wsteczną.

Frank R.
źródło
0

Tar to nie tylko format pliku, ale także format taśmy. Taśmy przechowują dane bit po bicie. Każde wdrożenie magazynu było niestandardowe. Tar była metodą, dzięki której można było zdjąć dane z dysku i zapisać je na taśmie w taki sposób, aby inne osoby mogły je odzyskać bez własnego programu.

Później pojawiły się programy do kompresji, a * nix nadal dysponował tylko jedną metodą tworzenia pojedynczego pliku zawierającego wiele plików.

Uważam, że to po prostu bezwładność, która jest kontynuowana w trendzie tar.gz. Pkzip zaczynał od kompresji i archiwizacji za jednym zamachem, ale wtedy systemy DOS zazwyczaj nie miały podłączonych napędów taśmowych!

Z Wikipedii dla Tar_ (file_format)

W informatyce tar (wywodzący się z archiwum taśmowego) jest zarówno formatem pliku (w postaci typu strumienia bitów archiwum), jak i nazwą programu używanego do obsługi takich plików. Format został ustandaryzowany przez POSIX.1-1988, a później POSIX.1-2001. Początkowo opracowany jako format surowy, używany do tworzenia kopii zapasowych na taśmach i innych urządzeń o sekwencyjnym dostępie do celów tworzenia kopii zapasowych, jest obecnie powszechnie używany do gromadzenia zbiorów plików w jeden większy plik do dystrybucji lub archiwizacji, przy jednoczesnym zachowaniu informacji o systemie plików, takich jak użytkownik i grupa uprawnienia, daty i struktury katalogów.

Kieveli
źródło
Ściśle mówiąc tar jest formatem pliku - po prostu na taśmach unixowych są po prostu kolejnym plikiem.
Martin Beckett
Właściwie tar nie był od początku formatem pliku. Taśmy nie miały systemów plików, więc tar został utworzony jako łatka na brak systemu plików.
Kieveli
0

Dla programistów Windows zrozumiałe jest, jak dziwne wydają się paczki z plikami . Słowo to taroznacza archiwum taśm. Pomyśl o magnetofonach szpulowych.

W świecie Windows programy są zwykle instalowane z setup.exelub, install.exektóre działają w rejestrze, tworząc katalogi i instalując .dllpliki (Dynamic Link Library).

W Linuksie, szczególnie Ubuntu z własnego doświadczenia, menedżerowie pakietów zajmują się pobieraniem aplikacji i instalowaniem jej przez większość czasu . W Ubuntu deweloper tworzy pakiet kończący się na .deb(Debian, na którym bazuje Ubuntu). Podstawowa składnia instalacji .debto:

sudo apt install <package_name>

Chociaż jest to stosunkowo proste dla użytkownika, tworzenie .debpakietu i powiązanie PPA wymaga dużo pracy dla programistów .

Łatwiejszą metodą dla programistów jest utworzenie archiwum. Następnie ciężar instalacji spoczywa na użytkowniku końcowym. Oni muszą:

  • pobierz archiwum (zazwyczaj kończące się na .tar.gz).
  • dekompresować kod źródłowy do katalogu.
  • skompiluj kod źródłowy (niespotykane w świecie Windows for Profit).
  • miejmy nadzieję, że zapisz, co zrobili na wypadek, gdyby musieli powtórzyć w przyszłości, ponieważ nie ma aptbazy danych (myślę, że lista programów zainstalowanych w systemie Windows), którą można zarchiwizować.

Ponieważ inna odpowiedź już dotyczy innego zadanego pytania, MOŻESZ utworzyć archiwum tar i jednocześnie kompresować dane. Proces dwuprzebiegowy NIE jest wymagany.

WinEunuuchs2Unix
źródło