Форматы .tar .zip .gz: Различия и эффективность
Вы наверняка встречали файлы с расширением .tar, .zip или .gz . А знаете ли вы, чем они отличаются, почему мы их используем, и какой формат наиболее эффективен?
Различия между tar, .zip и .gz
Если вам некогда вникать в подробности, то вот краткое и понятное объяснение:
- .tar — архивный файл без сжатия
- .zip — (как правило) сжатый архивный файл
- .gz — файл (архивный или не архивный), который сжали с помощью gzip
История развития архивов
Эта история началась в далёких 70х, как и многое из того, что связано с Unix системой и ей подобными . Морозное январское утро 1979 года ознаменовалось появлением утилиты tar в составе дистрибутива Unix V7.
Утилита tar была разработана для эффективной записи большого количества файлов на магнитные ленты. Большинство современных пользователей Linux незнакомы с ленточными накопителями. Тем не менее, tar архивы (они же tarballs) до сих пор широко используются, когда нужно упаковать несколько файлов или даже древо каталога целиком (или целый «лес» 🙂 в один файл.
Главное, что нужно запомнить о tar файле ― что это просто архив, без сжатия. Другими словами, если вы архивируете 100 файлов по 50kb, то на выходе получите архив размером около 5000kb. Используя только tar, единственное на что можно рассчитывать это экономия пространства за счёт файловой системы. Например, файл длинной 1 байт использует 4kb дискового пространства, а 1000 таких файлов займёт уже 4Mb, а tar архив с этими файлами займёт всего 1Mb.
Стоит отметить, что tar не единственный стандартный инструмент Unix для создания архивов. Программисты вероятно знакомы с форматом ar, так как он используется для создания статических библиотек, которые являются по сути архивами скомпилированных файлов. Но ar позволяет создать архив из чего угодно. Например, пакеты .deb в системе Debian не что иное, как архивы ar. А пакеты mpkg в MacOS X — это cpio архивы, сжатые с помощью gzip. Но эти форматы не стали так популярны у пользователей, как tar. Вероятно, потому что использовать команды tar удобнее и проще.
Архивы — это хорошо, но с началом эры персональных компьютеров, люди поняли, что, сжимая данные можно существенно экономить память. Поэтому, спустя десять лет после появления tar, уже в мир MS-DOS, пришёл формат архива с возможностью сжатия — zip. Наиболее распространённый алгоритм сжатия в zip — это Deflate, который использует алгоритмы LZ77 . Формат zip многие годы страдал от обременений патентами компании PKWARE.
В то же время был создан gzip, который также использовал алгоритм LZ77, но для бесплатного использования, не нарушая патент PKWARE.
Gzip создавался только для сжатия файлов, согласно ключевому понятию в философии Unix ― « Делай что-то одно, но делай это хорошо ». Таким образом, чтобы создать сжатый архив ― сначала вам нужно создать архив, например с помощью утилиты tar, а после этого сжать его. Так получается файл .tar.gz (иногда сокращается до .tgz, из-за соблюдения давно забытых ограничений в имени файла MS-DOS).
По мере развития компьютерных наук создавались и другие алгоритмы, для более эффективного сжатия. Например реализация алгоритма Барроуза — Уилера в bzip2 (отсылка к .tar.bz2 архивам). Или более новый формат xz, в котором реализован алгоритм LZMA . Этот алгоритм используется в архиваторе 7zip.
Доступность и ограничения
Сегодня вы можете без проблем использовать любой формат архивных файлов как в Linux, так и в Windows.
Благодаря нативной поддержке формата zip в Windows, zip особенно актуален для кроссплатформенного применения. Порой, zip файл можно встретить в неожиданных местах. Например, этот формат использовала компания Sun для архивов JAR, в которых распространяется скомпилированное приложение Java. Файлы OpenDocument (.odf, .odp …) в офисных приложениях, на самом деле являются zip архивами. Если вам интересно, распакуйте один из них и посмотрите, что внутри:
sh$ unzip some-file.odt
Archive:some-file.odt
extracting: mimetype
inflating: meta.xml
inflating: settings.xml
inflating: content.xm
[. ]
inflating: styles.xml
inflating: META-INF/manifest.xml
Несмотря на всё вышесказанное, в UNIX-мире я бы предпочёл использовать tar архивы, потому что формат zip недостаточно надёжно поддерживает все метаданные файловой системы Unix. Дело в том, что формат zip определяет лишь небольшой набор обязательных атрибутов файла для каждой записи: имя файла, дата изменения, право доступа. Кроме этих базовых атрибутов, архиватор может хранить и другие метаданные, в дополнительном поле заголовка zip. Но, поскольку дополнительное поле зависит от реализации, нет никаких гарантий, что вы получите тот же набор метаданных, даже в совместимых архиваторах. Давайте проверим это на примере:
sh$ ls -lsn data/team
total 0
0 -rw-r—r— 1 1000 2000 0 Jan 30 12:29 team
sh$ zip -0r archive.zip data/
sh$ zipinfo -v archive.zip data/team
Central directory entry # 5:
—————————
data/team
[. ]
apparent file type: binary
Unix file attributes (100644 octal): -rw-r—r—
MS-DOS file attributes (00 hex): none
The central-directory extra field contains:
— A subfield with ID 0x5455 (universal time) and 5 data bytes.
The local extra field has UTC/GMT modification/access times.
— A subfield with ID 0x7875 (Unix UID/GID (any size)) and 11 data bytes:
01 04 e8 03 00 00 04 d0 07 00 00.
Как видите, в дополнительном поле хранится информация о владельце (UID/GID). Если вы умеете читать шестнадцатеричный код, то можно заметить, что в этом архиве используется порядок байтов little-endian (от младшего к старшему) для хранения метаданных. «e803» это «03e8», что означает «1000» ― UID файла. А «07d0» это «d007», что означает «2000» ― GID файла.
В этом конкретном случае инструмент info-ZIP , который я использую в системе Debian, сохранил некоторые полезные метаданные в дополнительном поле. Но это не значит, что любой архиватор запишет те же данные в дополнительном поле. И нет гарантий, что другой архиватор сможет прочитать эти данные.
Таким образом существует две причины, по которым до сих пор используют tarballs. Это либо просто старая привычка, либо те причины, о которых я говорил выше, когда zip не может полностью заменить tar. Особенно если для вас важно сохранить все стандартные метаданные файла.
Тест на эффективность: Tar vs Zip vs Gz
Здесь я сравниваю эффективность сжатия. Я учитываю только сэкономленное пространство, без учёта затраченного времени. Как правило, чем эффективней алгоритм сжатия, тем больше ресурсов ЦП он требует.
Чтобы сравнить эффективность алгоритмов, я использовал файлы в популярных форматах размером около 100Mb. В таблице результаты, которые я получил в системе Debian Stretch (все размеры я узнал командой du -sh):
Создание, просмотр и распаковка архивов TAR, ZIP, RAR в Linux (tar.gz, tar.bz2, zip, rar)
Рассказываем как в терминале ОС Linux проводить обыденные операции по архивированию и разархивированию файлов и директорий с помощью TAR, ZIP и RAR.
Архивирование, просмотр и распаковка TAR
• Архивация одного файла:
• Архивация директории со сжатием gz :
• Архивация директории со сжатием bz2 :
• Распаковка архива в текущую папку:
• Распаковка архива в указанную папку:
tar -xvfс archive.tar.bz2 /path/to/folder
• Просмотр содержимого архива:
Какие ключи используются:
- -c — create — создать новый архив
- -x — extract — распаковка архива
- -v — режим вывода информации о текущем объекте архивации
- -z — применить сжатие gz
- -j — применить сжатие bz2
- -f — упаковка в файл, указание файла
- -tf — просмотр содержимого архива
Больше команд доступно в мануале:
Архивирование, просмотр и распаковка ZIP
Должны быть установлены пакеты zip и unzip :
sudo apt-get install zip unzip
• Архивация директории с помощью zip :
• Распаковка архива с помощью unzip :
• Просмотр содержимого архива unzip :
Какие ключи используются:
- -l — просмотр
- -d — указание директории для распаковки
Больше команд доступно в мануале:
Архивирование, просмотр и распаковка RAR
Должны быть установлены пакеты rar и unrar :
sudo apt-get install rar unrar
• Архивация директории с помощью rar :
• Распаковка архива с помощью unrar :
• Просмотр содержимого архива unrar :
Какие ключи используются:
- a — создать архив
- e — распаковать архив
- l — показать содержимое архива
Тема: Как распаковать многотомный архив TGZ на Windows
Опции темы
Поиск по теме
Как распаковать многотомный архив TGZ на Windows
Приветствую!
При резервном копировании создается многотомный архив TGZ:
2016-08-04.superhostel.info 142 байт 04.08.2016 12:33 -a—
2016-08-04.superhostel.tgz 690 Кб 04.08.2016 12:33 -a—
F2016-08-04.superhostel.tgz.part1 100 Мб 04.08.2016 12:38 -a—
F2016-08-04.superhostel.tgz.part10 100 Мб 04.08.2016 12:36 -a—
F2016-08-04.superhostel.tgz.part11 100 Мб 04.08.2016 12:35 -a—
F2016-08-04.superhostel.tgz.part12 100 Мб 04.08.2016 12:35 -a—
F2016-08-04.superhostel.tgz.part13 100 Мб 04.08.2016 12:35 -a—
F2016-08-04.superhostel.tgz.part14 100 Мб 04.08.2016 12:34 -a—
F2016-08-04.superhostel.tgz.part15 100 Мб 04.08.2016 12:34 -a—
F2016-08-04.superhostel.tgz.part16 100 Мб 04.08.2016 12:34 -a—
F2016-08-04.superhostel.tgz.part17 100 Мб 04.08.2016 12:34 -a—
F2016-08-04.superhostel.tgz.part18 100 Мб 04.08.2016 12:33 -a—
F2016-08-04.superhostel.tgz.part19 16 Мб 04.08.2016 12:33 -a—
F2016-08-04.superhostel.tgz.part2 100 Мб 04.08.2016 12:38 -a—
F2016-08-04.superhostel.tgz.part3 100 Мб 04.08.2016 12:38 -a—
F2016-08-04.superhostel.tgz.part4 100 Мб 04.08.2016 12:37 -a—
F2016-08-04.superhostel.tgz.part5 100 Мб 04.08.2016 12:37 -a—
F2016-08-04.superhostel.tgz.part6 100 Мб 04.08.2016 12:37 -a—
F2016-08-04.superhostel.tgz.part7 100 Мб 04.08.2016 12:36 -a—
F2016-08-04.superhostel.tgz.part8 100 Мб 04.08.2016 12:36 -a—
F2016-08-04.superhostel.tgz.part9 100 Мб 04.08.2016 12:36 -a—
1 860 919 Кбайт в 21 файлах/файле
Главный архив, как я понимаю, 2016-08-04.superhostel.tgz и при его распаковке должны подхватываться все 19 частей. но нифига — пробовал и WinRAR-ом, и через TotalCommander и 7ZIP — распаковывается только один главный файл.
Что посоветуете — чем это чудо можно распаковать на винде?
Архив 2016-08-04.superhostel.tgz не главный — в нём служебная информация.
Нужно собрать F2016-08-04.superhostel.tgz.part1 — 19 в один большой файл F2016-08-04.superhostel.tgz, затем его распаковать
В windows это можно сделать в CMD
Добрый день! А как расшифровать зашифрованный паролем многотомный архив? Делал » copy F2018-10-14.ххх.tgz.aes.part* b F2018-10-14.ххх.tgz.aes «, архив склеился. Далее пробовал открыть через AES Crypt , но увы invalid signature . Архив без частей также не открывается данной программой.
Подскажите, пожалуйста, как быть
Стоит ISPmanager Lite 5.174.0 + Debian 8.11 (x86_64)
На самом сервере и на виртуалке c debian (с компа) обычный архив без частей расшифровать удалось. А вот многотомный архив tgz.aes.part* после склейки полностью расшифровать так и не удалось, вылетает с ошибкой. Полученный архив открывается, но большая часть файлов отсутствует.
Делал по инструкции
openssl enc -d -k password -aes-256-cbc -in F2018-10-18.xxx.tgz.aes -out decrypted.tgz
Отключил шифрование и всё отлично склеивается и открывается.
Последний раз редактировалось Ghost_dead; 18.10.2018 в 15:39 . Причина: Upd 18.10.2018
Присоединяюсь к вопросу! Как склеить и расшифровать файлы вида F2019-02-03.username.tgz.aes.part* под Windows?
Мне нужно достать из бэкапа всего 4 файлика из нескольких тысяч, весь архив весит 4ГБ., на VDS места нет, чтобы ISP-менеджер весь бэкап скачал и сам расшифровал.
Пока вижу единственный вариант поднять виртуалку, на нее поставить демку ISP-менеджера, в ней подцепить то же хранилище, ввести пароль и расшифровать. Но это беда, ради 4х файликов так мучиться.
Вообще бог с ним с Windows, но нужен какой-то внятный способ восстановить архив руками. Вот пример из жизни:
* я случайно удалил 4 файлика
* у меня есть сегодняшний шифрованный бэкап, файлы 2019-02-06.username.tgz.aes и I2019-02-06.username.tgz.aes , и я точно знаю, что файлики там, так как это инкрементный бэкап, а залил я их вчера.
* при этом весь аккаунт username весит 4 ГБ.
Как мне восстановить данные? Казалось бы, надо просто расшифровать файлы, а потом разархивировать сегодняшний архив.
А что делает ISP-менеджер? Я захожу в панель , нажимаю «Скачать», панель сливает не только этот архив, а все 4ГБ. ближайшего полного архива по FTP! Место кончилось, все, стоп машина, я попал. Но даже если бы место не кончилось, все равно процесс занимает кучу времени, туда-сюда нужно прокачать 10 ГБ. в данном случае.
Одним словом, на мой взгляд нужен «рецепт» восстановления конкретного инкрементального архива без разархивирования всего. Либо прямо встроенный в панель, чтобы можно руками файлик залить и расшифровать его. Либо хотя бы инструкцию, какой командой это можно сделать из консоли. Ну и способ расшифровки для Windows тоже не помешал бы.
Подтверждаю информацию от Ghost_dead
Одиночный архив можно расшифровать вот такой командой прямо из консоли ISP-менеджера:
А вот многотомный архив tgz.aes.part* , склеенный по инструкции из документации, распаковывается только в продолжении первого файла, далее возникает ошибка.
Поясняю: если на входе 2 файла, .part1 = 100МБ и .part2 = 50МБ, то после склейки удастся раскрыть
66% архива. Очевидно, со склейкой что-то не так, т.к. ошибка возникает на месте первой склейки.
Пробовал склеивать как в Windows, так и через консоль командой «cat», результат одинаковый.