Программы сжатия и архивирования

Программы сжатия данных gzip, bzip2, xz

Программы gzip, bzip2, xz предназначены для сжатия одиночных файлов. Сжатые файлы имеют расширения .gz, bz2, xz соответственно. Кроме того, распознаются расширения .tgz, .tbz, .txz, являющиеся сокращением от двойных расширений .tar.gz, .tar.bz2, .tar.xz.

Для распаковки используются эти же программы с опцией -d (decompress).

При сжатии файла оригинальный файл удаляется и создается сжатый файл, к имени которого добавляется соответствующее расширение. При распаковке расширение отбрасывается, создается несжатый файл, а сжатый файл удаляется. Исключением являются случаи, когда имя файла не задано, вместо имени файла стоит "-" или дополнительно к имени файла опция -c. В первых двух случаях исходные данные читаются со стандартного ввода, а результат выводится на стандартный вывод, в третьем - исходные данные читаются из файла, файл не удаляется, результат выводится на стандартный вывод.

Если результат сжатия должен быть выведен на экран терминала, то программа сжатия завершается с ошибкой, чтобы не выводить данные, не предназначенные для просмотра человеком.

У программ сжатия есть альтернативные имена. Запуск по этим именам эквивалентен запуску с некоторым набором опций.
gunzip, bunzip2, unxz = запуск с опцией -d
zcat, bzcat, xzcat = запуск с опцией -c

Вспомогательные программы:
zmore file.gz = zcat file.gz | more
zgrep file.gz text = zcat file.gz | grep text
zdiff file1.gz file2.gz = zcat file1.gz > /tmp/xxfile1; zcat file2.gz > /tmp/xxfile2; diff /tmp/xxfile1 /tmp/xxfile2; rm /tmp/xxfile1 /tmp/xxfile2

Примеры

Сжатие файла
gzip file

Распаковка файла
gzip -d file.gz

Сжатие "на лету"
echo Test | gzip > test.gz

Распаковка в стандартный вывод и подсчет строк в распакованном потоке
gzip -d -c test.gz | wc -l

Архиватор tar

Архиватор tar (Tape ARchiver) изначально предназначен для создания архивов файлов на магнитных лентах. При архивировании после списка опций указываются имена файлов и каталогов, которые надо поместить в архив. Для того, чтобы указать файл архива, используется опция -f имя_файла (обычного или файла-устройства). Если вместо имени файла указан "-", то для ввода/вывода архива используется стандартный ввод/вывод.

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

Основные операции с архивом задаются соответствующими опциями :
– Создать архив (Create)
-t – Проверить архив и выдать список заархивированых файлов (Test)
-x – Извлечь файлы из архива (eXtract)

Дополнительные опции, используемые совместно с опциями операций:
-v – Печатать информацию о процессе архивирования/извлечения файлов
-z – Использовать gzip для дополнительного сжатия/распаковки архива
-j – Использовать bzip2 для дополнительного сжатия/распаковки архива
-J – Использовать xz для дополнительного сжатия/распаковки архива (только последние версии)

Новые версии gnutar умеют при извлечении файлов из архива определять программу сжатия автоматически. Для старых версий требуется явно указывать опцию. Версии tar из коммерческих вариантов Unix вообще не поддерживают опции сжатия и требуют построения конвейера из программы сжатия и архиватора tar.

Опции можно писать без знака минус и писать несколько опций вместе, начиная с опции операции и заканчивая опцией задания файла архива.

Примеры

Заархивировать каталог /etc в архив etc.tar
tar cf etc.tar /etc

Заархивировать каталог /etc в архив etc.tbz, на лету сжимая архив программой bzip2 и выдавая в процессе архивирования имена обрабатываемых файлов
tar cjvf etc.tbz /etc

Выдать содержимое архива etc.tbz
tar tf etc.tbz - современная версия tar
tar tjf etc.tbz - более ранние версии tar

Распаковать архив etc.tgz в современной версии tar
tar xf etc.tgz

Распаковать архив, сжатый программой xz, версией tar без встроенной поддержки этого формата
xzcat etc.txz | tar xf -

Переслать каталог с вложенными файлами и подкаталогами в домашний каталог пользователя user на компьютер remotehos.example, используя программу ssh
tar cf - mydir/ | ssh user@remotehos.example tar xf -

Архиватор cpio

Программа cpio (CoPy In/Out) предназначена для чтения файлов из архива (In) и записи файлов в архив (Out), а также для копирования файлов из каталога в каталог (Pass through). По умолчанию чтение/запись архива производится через стандартный ввод/вывод. Чтобы явно указать файл архива, используется опция -F. В программу встроены средства удаленного протокола через rsh или ssh. Для работы с архивом на удалённой машине он задаётся в формате -F user@host:file. Для администраторов Linux'a программа интересна тем, что с её помощью создаются установочные пакеты формата RPM и образы начальной загрузки initrd.

Основные опции:

cpio -i -d < <archive> – чтение архива со стандартного ввода. Дополнительная опция -d указывает, что надо создавать структуру подкаталогов, сохраненную в архиве.
find . -depth -print0 | cpio -o --null > <archive> – чтение имен файлов со стандартного ввода и вывод архива на стандартный вывод. Опция -print0 команды find и --null команды cpio указывают на то, что в качестве разделителя имён файлов используется нулевой символ '\0'. Это позволяет корректно отработать имена, содержащие пробелы, табуляции и переводы строк.
find . -name z\* -depth -print0 | cpio -p --null -d /tmp – скопировать все файлы с именами на букву z из текущего каталога с подкаталогами в каталог /tmp. Опция -d указывает, что в целевом каталоге надо создавать необходимые подкаталоги.