В чем разница между .tar.gz и .gz, или .tar.7z и .7z?

158

Недавно я делал резервные копии многих своих данных и заметил, что могу сохранять файлы как .gzили .tar.gz, или .7zи .tar.7z, и так далее. Каковы различия между нормальным .tar.*вариантом и вариантом? Какой из них рекомендуется при создании резервных копий?

Exeleration-G
источник

Ответы:

183

Если вы пришли из Windows, вы можете быть знакомы с форматами zip и rar. Это архивы нескольких файлов, сжатых вместе.

В Unix и Unix-подобных системах (таких как Ubuntu) архивирование и сжатие разделены.

tar помещает несколько файлов в один (tar) файл.

gzip сжимает один файл (только).

Таким образом, чтобы получить сжатый архив, вы объединяете их, сначала используя tarили, paxчтобы получить все файлы в один файл (archive.tar), а затем - gzip(archive.tar.gz). Если у вас есть только один файл, который нужно сжать (notes.txt), tar не нужен, так что вы просто делаете, gzip notes.txtчто приведет к notes.txt.gz. Существуют другие типы сжатия, такие как compress, bzip2и xzкоторые работают так же, как gzip (кроме использования различных типов сжатия, конечно)

geirha
источник
6
Это имеет смысл, но тогда почему я могу сделать .7zархив из нескольких файлов, а я могу также сделать .tar.7zархив из нескольких файлов?
Exeleration-G
3
@ Exeleration-G 7zip не следует этой схеме. Это больше похоже на zip и rar. Не уверен, какой смысл использовать tar в сочетании с 7zip, так как я сам не использовал 7zip.
Гейра
42
@ Exeleration-G Прочитав другие ответы, я вижу, что SaultDon отвечает на это; 7zip не хранит права собственности unix и разрешения на архивированные файлы (кажется, что они в основном предназначены для Windows, например, zip и rar), поэтому имеет смысл объединить их с tar для сохранения прав собственности и разрешений.
Гейра
@geirha Пометьте вопрос как решенный, если найдете соответствующий ответ.
Рави
1
По моему опыту 7z гораздо лучше при сжатии, чем zip. Когда я тестировал, это спасло меня примерно на 40%
Eoin
49

Это зависит от того, что вы ищете ... Сжатие или архивирование?

Когда я говорю об архивировании, я имею в виду сохранение разрешений, структуры каталогов и т. Д.

Сжатие может игнорировать большую часть этого и просто получить ваши файлы в меньших пакетах.

Чтобы сохранить права доступа к файлам, используйте tar:

tar cpvf backup.tar folder

Флаг p сохранит права доступа к файлу. Используйте флаг z для сжатия gzip или флаг j для сжатия bzip.

tar czpvf backup.tar.gz folder #backup.tgz is acceptable as well
tar cjpvf backup.tar.bz2 folder #backup.tbz2 works too

Если вы хотите получить файл tar, вы можете «обновить» пакет tar, используя флаг P:

tar cpPvf backup.tar folder

Затем для обновления замените «c» на «u», а при распаковке вы можете использовать «k» для сохранения уже существующих файлов.

tar upPvf backup.tar folder #updating a tar file
tar xpPkvf backup.tar #extracting a tar with permissions(p) and not extracting(k) files that exist on disk already

Флаг P сохраняет файлы с полными путями, поэтому - / home / username vs home / username (обратите внимание на прямую косую черту).

Сжатие 7z обеспечивает более высокое сжатие, но не сохраняет владение файлами, разрешения и т. Д. Rzip - это еще одна утилита сжатия, которая также предлагает сопоставимое сжатие с 7z.

Я предполагаю, что файл backup.tar.7z - это просто tar-файл (с разрешениями), сжатый файлом 7z, хотя я не удивлюсь, если произойдет небольшое сжатие, потому что 7z не сможет вывести метаданные файла. Это способность 7z исключать метаданные файла, которые он может предложить большое сжатие (среди прочего, конечно).

Сжатие полностью зависит также от типа данных. Некоторые файлы плохо сжимаются, потому что они уже могут быть сжаты другими способами (например, .mp3, .jpg, .tiff / с lzma, .rpm и т. Д.).

SaultDon
источник
11

gzip или bzip2 не знают о file system- имени файла, директории или древовидной структуре. Он просто сжимает входной поток, а затем выводит результат. Даже gzip или bzip2 не могут архивировать каталоги самостоятельно, поэтому обычно они объединяются с tar.

tar (архиватор) - просто структура файла архива. gzip, bzip2 (компрессор) - просто сжать вход.

Я думаю, что эта стратегия исходила из философии Unix «делай одно хорошо» . Тар работает хорошо? Оставь как есть. Нужно больше степень сжатия, чем GZIP? Вот bzip2 или 7zip.

Mait
источник
На самом деле 7zip может архивировать как zip или rar.
Mait
8

различные стили сжатия, tar сам по себе просто архивируется (практически без сжатия). tar.gz является архивом tar, но его содержимое сжимается с помощью gzip (умеренное сжатие), поэтому .gz и tar.7z сжимаются с использованием 7zip (обычно это супер высокая степень сжатия)

при резервном копировании я бы порекомендовал tar.7z, поскольку он имеет самую высокую степень сжатия, экономя ваше пространство, но использует дополнительную программу (7zip). .tar.gz будет больше файлов и делать ту же работу, вы также можете использовать bzip (.tar.bz / bz2), хотя я не уверен, что это подойдет вам лучше, так как я использую gzip или 7zip

MuffinStateWide
источник
4

обычно * .tar файлы - это просто tar-файлы, созданные программой tar, * .gz программы создаются с помощью gzip, * .tar.gz (иногда также * .tgz) - это файлы gziped tar, а * .7z создаются с помощью 7zip.

Однако в Linux / Unix файл можно назвать практически любым, каким он пожелает, так что это полностью на усмотрение создателя файлов.

Г. он
источник
3

Tar (Tape Archiver) традиционно использовался в качестве контейнера в Unix / Linux для упаковки файлов для перемещения. Он упаковывает структуру файла и поддерживает атрибуты файла, но не сжимает файлы.

Программы сжатия сжимают файл, чтобы сделать его меньше, но они могут не обрабатывать несколько файлов и / или могут не обрабатывать атрибуты файла, необходимые для Linux. Поскольку tar уже существует и хорошо поддерживается, у архивирующих программ нет причин дублировать эту функцию, которая зависит от платформы (в отличие от Windows и Linux). Кроме того, разные программы сжатия могут работать по-разному на разных типах файлов, поэтому желательно иметь более одного выбора.

Марти Фрид
источник