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

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

Если вы работаете в 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 (помимо использования различных типов сжатия, конечно).

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

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

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

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

tar cpvf backup.tar folder

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

tar czpvf backup.tar.gz folder #backup.tgz is acceptable as welltar 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 filetar 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 и т.д.).

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

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

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

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

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

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

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

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

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

Другие ответы хорошо объясняют разницу между сжатием и архивированием.

7z является архиватором, что означает, что он знает о внутренней структуре каталогов, именах файлов и т.д. без необходимости все распаковывать. Однако существуют некоторые ограничения. Я цитирую из man 7z в моей системе Ubuntu:

Backup and limitations       DO NOT USE the 7-zip format for backup purpose on Linux/Unix because :        - 7-zip does not store the owner/group of the file.       On Linux/Unix, in order to backup directories you must use tar :        - to backup a directory  : tar cf - directory | 7za a -si directory.tar.7z        - to restore your backup : 7za x -so directory.tar.7z | tar xf -       If you want to send files and directories (not the owner of file) to others Unix/MacOS/Windows users, you can use the 7-zip format.         example : 7za a directory.7z  directory       Do not use "-r" because this flag does not do what you think.       Do not use directory/* because of ".*" files (example : "directory/*" does not match "directory/.profile")

Вот оно, у вас есть. Можно использовать tar внутри 7z (в результате чего directory.tar.7z), чтобы убедиться, что вы сохранили все специальные возможности Linux. Однако 7z будет знать только об одном tar-файле внутри, и весь tar-файл придется распаковать и прочитать, чтобы узнать, что находится внутри. Поэтому для кучи обычных файлов, и где владение не имеет значения, просто используйте 7z напрямую.

Кроме того, если файл tar (или сжатый файл tar.anything) поврежден, вы сможете восстановить свои данные только до момента повреждения. С таким архивом, как 7z (без использования tar внутри), ваши шансы на восстановление большего количества файлов выше.

PS: 7z также может создавать надежные архивы, что приводит к лучшему сжатию, но имеет те же ограничения, что и при использовании tar внутри любого компрессора. Источник: https://en.wikipedia.org/wiki/Solid_compression