Archiving and compression (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Archiving and compression. Дата последней синхронизации: 24 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Традиционные инструменты архивирования и сжатия Unix разделены в соответствии с философией Unix:

  • Архиватор объединяет несколько файлов в один архивный файл, например, tar.
  • Инструмент сжатия сжимает и расжимает данные, например, gzip.

Эти инструменты часто используются последовательно: сперва создаётся архивный файл, а затем он сжимается.

Конечно, существуют и универсальные инструменты, которые умеют выполнять обе задачи, а также дополнительно предлагают шифрование, обнаружение ошибок и восстановление.

Только архивирование

Имя Пакет Справка Описание
GNU tar tar tar(1), info Основная утилита для работы с вездесущими tar-архивами (tarballs), которые используют в том числе pacman и AUR.
libarchive libarchive bsdtar(1)
bsdcpio(1)
Реализация tar и cpio, которая также предоставляет библиотеку. Используется в pacman и mkinitcpio.
ar binutils ar(1) Устаревший архиватор Unix, который был до tar. Сегодня используется только для создания файлов статических библиотек.
cpio cpio cpio(1) Архиватор файлов через stdin/stdout, поддерживает форматы cpio и tar.
DAR darAUR dar(1) Архиватор для резервного копирования больших живых файловых систем, учитывает жёсткие ссылки, расширенные атрибуты, разреженные (sparse) файлы и типы inode.
Совет: И GNU, и BSD tar автоматически делегируют распаковку сжатых данных утилитами bzip2, compress, gzip, lzip, lzma, lzop, zstd и xz. Только BSD tar имеет встроенную поддержку lz4 (но GNU tar тоже может с ним работать с помощью --use-compress-program=lz4/-Ilz4). При создании архивов оба поддерживают ключ -a, позволяющую направить архив в соответствующую программу для сжатия, определяемую по расширению создаваемого файла. BSD tar определяет используемый формат сжатия, разбирая содержимое файла, а GNU tar смотрит только на расширение.

Смотрите также #Использование инструментов только для архивирования.

Инструменты сжатия

Только сжатие

Эти программы сжатия реализуют свой собственный формат файлов.

Имя Пакет Справка Ext Tar ext Описание Многопоточные реализации
bzip2 bzip2 bzip2(1) .bz2, .bz .tbz2, .tbz Использует алгоритм Барроуза-Уилера. lbzip2, pbzip2
gzip gzip gzip(1) .gz, .z .tgz, .taz GNU zip, основан на алгоритме Deflate. pigz
lrzip lrzip lrzip(1) .lrz Улучшенная версия rzip, использует разные алгоритмы. является многопоточным
LZ4 lz4 lz4(1) .lz4 Написан на C, сфокусирован на скорости. является многопоточным
lzip lzip lzip(1) .lz Использует LZMA. plzipAUR
lzop lzop lzop(1) .lzop .tzo Использует LZO-библиотеку (lzo).
xz xz xz(1) .xz, .lzma .txz, .tlz Использует LZMA, стандартный для GNU coreutils и архивов ядра. является многопоточным, pixz, pxz-gitAUR
zstd zstd zstd(1) .zst Использует алгоритм Zstandard. является многопоточным
  • Многопоточные реализации улучшают скорость работы за счёт использования нескольких ядер процессора.
  • Tar ext — расширения сжатых архивов, в которых используется tar в связке с инструментом сжатия, например, .tzo — это .tar.lzo.
  • Смотрите также #Использование инструментов только для сжатия.

Архивирование и сжатие

Имя Пакеты Справка Ext Описание
p7zip p7zip 7z(1) .7z Сторонний POSIX-порт утилиты командной строки 7-zip.
7-Zip 7-zipAUR Официальная Linux-версия файлового архиватора с высокой степенью сжатия.
RAR rarAUR, unrar rar(1) .rar И формат, и утилита rar являются проприетарными.
ZIP zip, unzip zip(1), unzip(1) .zip Широко используется вне Linux-мира.
Unarchiver unarchiver unar(1), lsar(1) много Инструмент командной строки приложения для Mac, поддерживает более 40 форматов архивов.
ZPAQ zpaqAUR zpaq(1) .zpaq Архиватор с высокой степенью сжатия, написанный на C++, использует несколько алгоритмов.
LHa lhasa, lhaAUR lha(1) .lzh (на Amiga: .lha) Архиватор LZH/LHA, поддерживает lh7-метод.

Смотрите также #Использование инструментов для архивирования и сжатия.

Таблица возможностей

Некоторые инструменты умеют работать с несколькими форматами, что позволяет обойтись установкой меньшего числа пакетов.

Распаковка

Имя gzip bzip2 ZIP LHa/LZH RAR compress CAB ARJ
gzip Да Нет Частично1 Нет Нет Да Нет Нет
p7zip Да Да Да Да Да Нет Да Да
unarchiver Да Да Да Да Да Да Да Частично
  1. Утилита gunzip из пакета gzip может распаковывать только ZIP-архивы с одним файлом внутри.

Сравнение использования

Использование инструментов только для архивирования

Имя Создание архива Извлечение из архива Просмотр содержимого
tar(1) tar cfv archive.tar file1 file2 tar xfv archive.tar tar -tvf archive.tar
cpio(1) ls file1 file2 | cpio -o > archive.cpio cpio -i -vd < archive.cpio cpio -t < archive.cpio

Использование инструментов только для сжатия

Имя Сжатие Распаковка Распаковка в stdout
bzip2(1) bzip2 file bzip2 -d file.bz2 bzcat file.bz2
gzip(1) gzip file gzip -d file.gz zcat file.gz
lrzip(1) lrzip file
lrztar folder
lrzip -d file.lrz
lrztar -d folder.tar.lrz
lrzcat file.lrz
xz(1) xz file xz -d file.xz xzcat file.xz

Использование инструментов для архивирования и сжатия

Имя Сжатие Распаковка Распаковка в stdout Просмотр содержимого
7z(1) 7z a archive.7z file1 file2 7z x archive.7z 7z e -so archive.7z file1 7z l archive.7z
rar(1) rar a archive.rar file1 file2 rar x archive.rar rar p -inul archive.rar file1 rar l archive.rar
zip(1), unzip(1) zip archive.zip file1 file2 unzip archive.zip unzip -p archive.zip file1 unzip -l archive.zip
lha(1) lha ao7 archive.lzh file1 file2 lha x archive.lzh кратко: lha l archive.lzh подробно: lha v archive.lzh

Вспомогательные инструменты

  • atool — Скрипт для управления архивами различных типов.
https://www.nongnu.org/atool/ || atool
  • dtrx — Интеллектуальный инструмент для извлечения архивов.
https://github.com/brettcs/dtrx || dtrxAUR
  • J7Z — GUI для Linux на java, который пытается упростить сжатие данных и резервное копирование. Он может создавать архивы 7z, BZip2, Zip, GZip, Tar.
http://j7z.xavion.name/ || j7zAUR
  • unp — Инструмент командной строки, позволяющий легко распаковывать архивы.
https://github.com/mitsuhiko/unp || python-unpAUR
  • unpack — Скрипт-обёртка для работы с несколькими форматами архивов.
https://github.com/githaff/unpack || unpack-gitAUR

Определение формата архива

Для извлечения содержимого архива нужно знать его формат. Если файл архива имеет правильное название, то его формат можно определить по расширению.

В других случаях можно воспользоваться инструментом file, смотрите file(1).

Эзотерические, редкие или устаревшие инструменты

Имя Пакеты Ext Описание
ARC arcAUR .arc, .ark Был очень популярен в ранние времена BBS. Заменён на ZIP.
ARJ arj .arj Архиватор, использовавшийся в DOS/Windows в середине 1990-х годов. Это клон с открытым исходным кодом.
compress ncompress .Z Классическая утилита сжатия unix, которая может работать с древним архивом .Z.
PAR2 par2cmdline .par2 Parity archiver с контролем целостности файлов. Смотрите также Parchive.
shar sharutils .shar Создаёт самораспаковывающиеся архивы, которые фактически являются скриптами.
Zoo zooAUR .zoo Часто использовался в ОС OpenVMS до того, как PKZIP стал популярным.

Сжатие в файловой системе

Некоторые файловые системы поддерживают сжатие файловых данных "на лету":

  • Btrfs может быть настроен на сжатие отдельных файлов, каталогов или целых томов по умолчанию.
  • В ZFS сжатие может быть включено для пулов или файловых систем.

Сжатие device mapper

Ведётся работа над проектом VDO, который обеспечивает уровень дедупликацию и сжатие на уровне device mapper для повышения эффективности хранения данных. Доступны следующие пакеты:

  • vdo — Пользовательские инструменты для управления томами VDO
https://github.com/dm-vdo/vdo || vdoAUR
  • kvdo — Пара модулей ядра, которые предоставляют пулы дедуплицированного и/или сжатого блочного хранилища
https://github.com/dm-vdo/kvdo || kvdo-dkmsAUR[ссылка недействительна: package not found]

Библиотеки сжатия

  • Brotli — Алгоритм сжатия потоков данных с использованием алгоритма LZ77, кодирования Хаффмана и контекстного моделирования второго порядка.
https://github.com/google/brotli || brotli
  • libzip — Обеспечивает создание и извлечение ZIP-файлов. Используется в KDE и Deepin вместо инструментов zip/unzip.
https://libzip.org || libzip
  • zlib — Реализация deflate, используемая в gzip и PKZIP.
https://www.zlib.net/ || zlib
  • Zopfli — Компрессор файлов с высоким коэффициентом сжатия от Google, использующий совместимый с deflate алгоритм под названием zopfli.
https://github.com/google/zopfli || zopfli-gitAUR

Решение проблем

Проблемы с японскими именами файлов

Японские версии Windows кодируют ZIP-архивы с помощью Shift-JIS, из-за чего при извлечении будут получаться кракозябры. Для корректного извлечения используйте `unzip` с опцией shift-jis.

$ unzip -O shift-jis nihongo.zip

Смотрите также