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 .tar
archiwum, a następnie spakowane . Dlaczego proces dwuetapowy? Czy kompresowanie nie zapewnia grupowania plików? Czy jest jakaś inna korzyść, o której nie wiem?
Odpowiedzi:
bzip
igzip
pracuj na pojedynczych plikach, a nie na grupach plików. Zwykłe starezip
(ipkzip
) 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
,gzip
itp).źródło
tar
archiwó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 ...;)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.
źródło
To dziwne, że nikt inny nie wspomniał, że współczesne wersje GNU
tar
pozwalają na kompresowanie podczas pakowania:Możesz także użyć wybranego kompresora, pod warunkiem, że obsługuje on opcje '
-c
' (do stdout lub ze stdin) i '-d
' (decompress):Umożliwiłoby to określenie dowolnej alternatywnej sprężarki.
[ Dodano : Jeśli wyodrębniasz z
gzip
lubbzip2
skompresowane pliki, GNUtar
automatycznie je wykrywa i uruchamia odpowiedni program. Oznacza to, że możesz użyć: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 (zamiasttar
), a następnie używać wybranego kompresora (kiedyś preferowany był kompresorpack
, później byłcompress
(który był znacznie bardziej efektywny niżpack
), a następniegzip
który krążył wokół obu swoich poprzedników i jest całkowicie konkurencyjnyzip
(który został przeniesiony na Uniksa, ale nie jest tam natywny), a terazbzip2
, z mojego doświadczenia, ma zwykle 10-20% przewagęgzip
.[ Dodano : ktoś zauważył w swojej odpowiedzi, że
cpio
ma zabawne konwencje. To prawda, ale dopóki GNUtar
nie otrzymało odpowiednich opcji ('-T -
'),cpio
był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ącpio
było to, że nie tylko można było wybierać pliki - trzeba było je wybierać. Wciąż jest jedno miejsce, gdziecpio
wyniki; może wykonać kopię in-situ z jednej hierarchii katalogów do innej bez pośredniej pamięci:Nawiasem mówiąc,
-depth
opcja „ ” włączonafind
jest 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-depth
opcjicpio
polecenie 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). ]źródło
Zabawne jest to, że możesz uzyskać zachowania, których twórcy
tar
i nie przewidzieligzip
. Na przykład, możesz nie tylko zgzipować plik tar, ale także spakować pliki gzip, aby utworzyć plikfiles.gz.tar
(technicznie byłoby to bliżej sposobupkzip
dział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.źródło
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.
źródło
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):
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).
źródło
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)
źródło
tar to UNIX, tak jak UNIX to tar
Moim zdaniem powodem, dla którego nadal używam
tar
dzisiaj 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
tar
z 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łaniutar
.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-one
a 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
.źródło
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.
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 .
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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ą.
źródło
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)
źródło
Dla programistów Windows zrozumiałe jest, jak dziwne wydają się paczki z plikami . Słowo to
tar
oznacza archiwum taśm. Pomyśl o magnetofonach szpulowych.W świecie Windows programy są zwykle instalowane z
setup.exe
lub,install.exe
które działają w rejestrze, tworząc katalogi i instalując.dll
pliki (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.deb
to:Chociaż jest to stosunkowo proste dla użytkownika, tworzenie
.deb
pakietu 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ą:
.tar.gz
).apt
bazy 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.
źródło