Pracuję w środowisku Linux i chcę wiedzieć o poleceniach tar i zip.
Który jest bardziej wydajny - smoła lub zip? Muszę także znać różnice między poleceniami tar i zip. Czy ktoś może mi je wyjaśnić?
tar
tworzy tylko jeden plik z wielu plików, nie dokonuje kompresji, chyba że połączy program kompresji, taki jak gzip
lub bzip2
(który można wywołać od wewnątrz tar
, używając odpowiednio opcji -z
lub -j
). zip
łączy zarówno archiwizację, jak i kompresję w jednym programie.
smoła
zamek błyskawiczny
Fakt, że zip oddzielnie kompresuje pliki, wpłynie na współczynniki kompresji, szczególnie w przypadku wielu małych podobnych plików.
(Przynajmniej tak było dziesięć lat temu).
Smoła zachowuje znacznie więcej metadanych niż Zip, zobacz moje porównanie (jest nieco nieaktualne):
(Kliknij, aby powiększyć)
Smoła przechodzi 65% testów, podczas gdy Zip przechodzi tylko 17%. Udostępniłem pakiet testowy na github na licencji BSD , abyś mógł sam spróbować, jeśli masz komputer Mac. W przypadku Linuksa nie jestem pewien, czy są jakieś metadane, więc te testy mogą nie być odpowiednie.
Wydajność można mierzyć na różne sposoby:
Istnieją również inne pytania, takie jak „Jak często narzędzia do manipulowania wynikowymi archiwami?”
Na przykład
bzip2
tworzy mniejsze plikigzip
, ale może to znacznie potrwać. Ponadto z mojego doświadczeniagzip
wynika, że jest uniwersalny w systemach uniksopodobnych, alebzip2
nadal nie jest (chociaż jest bardzo powszechny i zwykle łatwo dostępny).źródło
Jak zauważył Wim, sama smoła się nie kompresuje. Jeśli dodasz skompresuj tar (np. Aby uzyskać plik .tar.gz lub .tar.bz2), kompresujesz cały plik tar jednocześnie. Natomiast zip kompresuje każdy plik osobno.
Wydajność zależy od obciążenia pracą. W szczególności zip umożliwia bezpośredni dostęp do poszczególnych plików. W przypadku tar musisz najpierw przeszukać niechciane (skompresowane) pliki. Wydajność kompresji zależy od tego, co kompresujesz.
tar
zbzip2
jest często lepszy dla dużej liczby podobnych plików (np. katalogu źródłowego).zip
mogłoby być lepiej, jeśli każdy plik ma bardzo inną zawartość.źródło
Archiwa zip zawierają na końcu centralny katalog ich zawartości (najprawdopodobniej unikniesz konieczności wcześniejszego utworzenia katalogu, w którym nie wiesz jeszcze, co będzie w środku). Pozwala to na szybkie wyodrębnianie pojedynczych plików bez konieczności rozpakowywania całego archiwum: po prostu przeczytaj katalog archiwum i wyodrębnij tylko to, co jest potrzebne. Wymaga to jednak dostępu do całego archiwum i dostępu losowego, który jest dostępny tylko na urządzeniach blokowych (dyskietki, dyski twarde). Ponadto katalog archiwum jest podatny na atak: jeśli archiwum zostanie z jakiegoś powodu obcięte, wymaga ono silnego czarodziejstwa, aby wyodrębnić wszystko przydatne z archiwum.
Archiwa Zip zostały utworzone na użytek BBS, gdzie ważna była możliwość spakowania zawartości katalogu do jednego pojedynczego (i skompresowanego) pliku --- zamiast konieczności pobierania prawdopodobnie tysięcy pojedynczych plików. Podobnie jak większość stron internetowych nawet dzisiaj pobiera pakiety z tych samych powodów.
Archiwa tar zostały opracowane do pakietowego tworzenia kopii zapasowych, które mają być używane dla napędów taśm, a więc do sekwencyjnego dostępu . Nie ma centralnego katalogu; zamiast tego archiwum zawiera bloki nagłówków w regularnych odstępach czasu, które wskazują, które pliki pojawią się w kolejnych kilku blokach. Archiwa tar mają być czytane jednym zamachem; jeśli ma zostać wyodrębniony tylko jeden plik, archiwum jest odczytywane sekwencyjnie, od samego początku aż do znalezienia żądanego pliku (który równie dobrze może znajdować się na samym końcu). Ponadto stosuje się kompresję; każdego z różnych programów kompresji, które są stosowane do archiwum tar (
compress
,gzip
,bzip2
itp.) są kompresorami strumieniowymi i nie zmieniają sekwencyjnego charakteru archiwum w żadnej sprawie. W najgorszym przypadku potrzebujesz nieco więcej bloków, aby rozpocząć rozpakowywanie.Może to zabrzmieć jak banalna różnica, ale w rzeczywistości reprezentuje przeciwne przeciwieństwo w filozofii. W przypadku archiwów zip zawsze trzeba mieć pod ręką cały plik, aby zrobić z nim coś pożytecznego, podczas gdy archiwum tar można przesyłać strumieniowo do potoku. Mogę pobrać duże archiwum tar i rozpakować je od samego początku, jak tylko pojawi się kilka pierwszych bloków (i może przerwać pobieranie, jak tylko otrzymam plik, którego szukam). W przypadku archiwum Zip muszę poczekać, aż pojawi się katalog archiwum, który znajduje się na samym końcu archiwum. Ale kiedy zrobić mieć cały plik pod ręką, wydobywając z niego zawartość częściowych będzie znacznie szybciej z pliku tar.
Oba formaty mają jedną bardzo mocną stronę, w zależności od tego, gdzie i jak są używane. Ponieważ potoki (a zatem pojęcie przesyłania danych z jednego procesu do drugiego) naprawdę istnieją tylko w świecie uniksowym, główna zaleta archiwów tar jest tracona w innych systemach, dlatego archiwa Zip są tam znacznie bardziej popularne. Ale archiwa tar są bardziej elastyczne, dlatego wolę je, kiedy mam wybór.
źródło
Jak już wspomniano, tar tworzy duży „blok” wszystkich plików, które można skompresować za pomocą procesora strumieniowego takiego jak gzip lub bzip2.
Wadą tego jest to, że musisz zdekompresować cały plik, aby uzyskać dostęp do jednego pliku w archiwum.
Zaletą tego jest to, że współczynnik kompresji jest zwykle wyższy, szczególnie gdy skompresowane pliki są bardzo podobne.
Inne pakery, takie jak „rar”, mają „tryb blokowy” (lub podobny), aby mieć ten sam efekt.
źródło