Czy w systemie Linux / Unix .tar.gz kontra .zip ma znaczenie?

69

Programy wieloplatformowe są czasami dystrybuowane jako .tar.gz dla wersji Unix i .zip dla wersji Windows. Ma to sens, gdy zawartość każdego z nich musi być inna.

Jeśli jednak zawartość będzie taka sama, prostsze byłoby pobranie tylko jednego pliku. Windows woli .zip, ponieważ jest to format, który może obsłużyć po wyjęciu z pudełka. Czy to ma znaczenie dla Uniksa? To znaczy, próbowałem dzisiaj rozpakować plik na Ubuntu Linux i działało dobrze; czy jest z tym jakiś problem w dowolnym systemie operacyjnym uniksopodobnym, czy też dobrze jest po prostu dostarczyć plik .zip na płycie?

rwallace
źródło

Odpowiedzi:

28

Nekromancja.
Tak, to ma znaczenie.
Właściwie to zależy.

tar.gz

  • Przechowuje atrybuty plików unix : uid, gid, permissions (przede wszystkim wykonywalny). Wartość domyślna może zależeć od twojej dystrybucji i może być przełączana z opcjami.
  • Konsoliduje wszystkie pliki do zarchiwizowania w jednym pliku („Archiwum taśmy”).
  • Rzeczywista kompresja jest wykonywana przez GZIP na jednym pliku .tar

zamek błyskawiczny

  • Przechowuje atrybuty MSDOS . (Archiwum, Tylko do odczytu, Ukryty, System)
  • Kompresuje każdy plik osobno, a następnie konsoliduje indywidualnie skompresowane pliki w jednym pliku
  • Zawiera tabelę plików na końcu pliku

Ponieważ zip kompresuje pliki indywidualnie, archiwum zip najprawdopodobniej będzie miało większy rozmiar (szczególnie w przypadku wielu mniejszych plików - pomyśl pliki konfiguracyjne).

Widzisz, odejdź od rozmiaru pliku, jeśli spakujesz kilka plików w systemie Linux / Unix, a następnie rozpakujesz je, atrybuty pliku znikną (przynajmniej te, które nie są obsługiwane przez MS-DOS - zależy od tego, jaki ZIP - używane oprogramowanie). Może to mieć znaczenie lub nie, w którym to przypadku nie ma znaczenia (ponieważ różnica wielkości pliku jest w większości przypadków nieistotna).

Kłopot
źródło
10
standardowa dystrybucja zip w systemach uniksowych (info-zip) również przechowuje atrybuty plików unix.
Erik Aronesty
35

tar gz jest lepszy dla Linux / Unix, ponieważ zachowuje uprawnienia, takie jak „wykonywalny” dla skryptów.

Zam
źródło
8
Narzędzie do archiwizacji OS X i zip / unzip zachowują uprawnienia, ale mogą istnieć inne narzędzia, które tego nie robią.
Lri
4
Standardowe narzędzia zip / rozpakuj (info-zip) zachowują uprawnienia w systemie Linux i znaczniki czasu w systemie Windows. patrz: en.wikipedia.org/wiki/Info-ZIP, aby zapoznać się z typowymi możliwościami ... które rozwiązują problemy związane z uprawnieniami i ograniczeniami rozmiaru pliku, zachowując pożądany losowy dostęp i edytowalne właściwości archiwum.
Erik Aronesty
33

Najpopularniejsze dystrybucje Linuksa są obecnie domyślnie wyposażone w zipkompatybilność. Ale jak stwierdzono w nc3b, tari gzipsą bardziej powszechne w systemach Linux / Unix. Jeśli potrzebujesz 95% kompatybilności w tych systemach, rozważ użycie tari gzip. Jeśli potrzebujesz tylko 85%, zipzrobi dobrze.

BloodPhilia
źródło
2
Dobra, 95% to więcej niż 85% :-) Bardzo drobne pytanie, czy w ogóle ma znaczenie, jeśli rozszerzenie pliku to .tgz zamiast .tar.gz?
rwallace
8
Rozszerzenie nie ma żadnego znaczenia, jest po prostu używane w celach informacyjnych przez użytkowników i programy. Jeśli rozszerzenie to .XXX i wiesz, że to .tar, nadal możesz użyć tar do jego rozpakowania. .tgz i .tar.gz są w rzeczywistości tymi samymi rozszerzeniami, a pliki z tymi rozszerzeniami byłyby podobne.
BloodPhilia
2
Z drugiej strony, aby uzyskać 100% kompatybilności w systemie Windows, musisz użyć kabiny.
kinokijuf
3
tar będzie przechowywać identyfikatory UID, GID i uprawnienia, takie jak + x w systemach uniksowych. zip przechowuje archiwum, tylko do odczytu, ukryte i systemowe w systemach Windows.
Andrew De Andrade
1
@mtak zawsze możesz użyć gunzip --suffix .zip npm-debug.log.ziplubgunzip -c < npm-debug.log.zip > npm-debug.log
Iwan Aucamp
19

tar / gzip jest dość kiepskim formatem, ponieważ archiwum nie może być losowo otwierane, aktualizowane, weryfikowane, a nawet dołączane do ... bez konieczności dekompresji całego archiwum.

zip jest o wiele lepszy pod tym względem ... możesz szybko uzyskać zawartość pliku zip, dołączyć go bez ponownej kompresji pierwszej części itp.

zip ma pewne ograniczenia rozmiaru ... w zależności od używanej wersji "zip" ... a to może stanowić problem. ale standardowe narzędzie info-zip, które jest dostarczane z większością linuksowych systemów operacyjnych, nie ma ograniczeń rozmiaru i zachowuje uprawnienia do plików w porządku.

zobacz: https://en.wikipedia.org/wiki/Info-ZIP dla możliwości

Erik Aronesty
źródło
O jakich ograniczeniach mówisz?
Pacerier
zredagował i podał link
Erik Aronesty
9

Instalacje Barebones Unix nie zawierają rozpakowania (tj. Instalacje na serwerze), ale zawsze zawierają pliki tar i gzip . Jeśli twoi odbiorcy to serwery, wybrałbym gzip .

Również gzip ma większą kompresję niż zip , więc plik będzie mniejszy.

Rwky
źródło
1
Nie powiedziałbym, że kompresuje gzip lepiej niż ZIP. Oba używają tego samego algorytmu DEFLATE, a wszystkie porównania, które przeprowadziłem, dają podobne wyniki w rozmiarze pliku.
grawitacja
4
Cóż, tar.gz skompresuje cały plik za jednym razem, podczas gdy zip kompresuje pliki indywidualnie. W przypadku wielu małych plików pierwsze podejście zwykle generuje zauważalnie mniejsze pliki, ponieważ w plikach można stosować redundancję. Różnica nie jest jednak duża.
sleske
3

Tak, to ma znaczenie. Tar jest archiwizatorem. A w tar.gz kompresujemy to archiwum.

Zip jest zarówno archiwizatorem, jak i kompresorem.

Jeśli porównasz kompresję, z mojego doświadczenia wynika, że ​​gzip jest znacznie lepszy niż zip.

Inna znacząca różnica jest wymieniona w innej odpowiedzi . Jeśli masz bardzo duże archiwum plików i chcesz wyodrębnić mały plik, Zip pozwala to zrobić. Ale w przypadku tar.gz musisz wyodrębnić całe archiwum.

Rakesh Reddy
źródło
Nie archiwum spakowanych plików, ale gzip zarchiwizowanych plików. Dlatego musisz wyodrębnić całe archiwum.
m93a
2

Decyzja sprowadza się zasadniczo do:

  • GZIP zachowuje uprawnienia do plików uniksowych , ponieważ pliki mogą być uruchamiane.

  • Z drugiej strony ZIP działa od razu w systemie Windows.

Alberto Salvia Novella
źródło
1

tari gzipsą znacznie bardziej popularne na * nix-es niż unzip. Na przykład w tej chwili na moim arch-2009.08 nie ma unzip.

nc3b
źródło
6
Ale jest bsdtar(część libarchive), która dobrze radzi sobie z ZIP.
grawitacja
Ups: "> Nie wiedziałem o tym. Dzięki! :-)
nc3b