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

Jump to content
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)[устаревшая ссылка 2023-08-10] | .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)[устаревшая ссылка 2023-08-10] | `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

- Bash/Функции#Извлечение

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

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

В других случаях можно воспользоваться инструментом 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

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

- 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

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

- List of applications/Utilities#Archive managers
- List of applications/Multimedia#Image compression
- Wikipedia:Comparison of file archivers
- Wikipedia:List of archive formats
- Wikipedia:Comparison of archive formats

Categories:

- Data compression and archiving (Русский)
- Command-line (Русский)

Hidden category:

- Pages with dead links