Упаковщики и архиваторы в Linux

Упаковщики и архиваторы в Linux Сегодняшняя статья предназначается для начинающих пользователей Linux: мы обсудим такие программы, как упаковщики и архиваторы, и то, чем же они представлены в Linux.

Но прежде чем начинать свой рассказ, позволю сделать маленькое отступление. Буквально пару дней назад вернулся я из поездки в Крым. Был я там с друзьями на знаменитом винзаводе "Массандра", чтобы пройти дегустацию великолепных вин производства данного предприятия. Пока мы сидели в холле, ожидая начала мероприятия, я обратил внимание на одну худенькую девушку, которая стояла у стойки, где продавались вина эксклюзивного разлива. Каково же было мое удивление и восхищение, когда я заметил в руках у девушки полиэтиленовый пакетик с изображением Тукса и знакомой надписью "Linux"! Вот так! Людей, которым нравится Линукс, можно найти где угодно!:)
Ну, а теперь вернемся к нашей теме. Упаковщики и архиваторы — в чем разница? Такие программы, как pkzip/pkunzip и arj, знакомые вам еще по ОС Windows, совмещают две разные функции: архивирование, т.е. помещение содержимого нескольких файлов в один (с сохранением информации о каждом файле), и упаковку, т.е. сжатие файла.
В Unix-подобных операционных системах, в т.ч. и в Linux, эти функции по историческим причинам реализуются отдельными программами: для упаковки используются compress, gzip, bzip2, а для архивации — tar.
Замечание: программы-архиваторы разрабатывались в первую очередь для резервного копирования (обычно на ленту). Кроме tar, есть еще программы cpio и dump/restore, но их мы рассматривать не будем. Кроме того, в любом из *nix есть программа ar, которая хоть и умеет делать архивы из произвольных файлов, в первую очередь предназначена для создания библиотек объектных файлов.
У каждого архиватора и упаковщика есть свое стандартное расширение для имени файла (в таблице приведены наиболее встречающиеся).

Расширение Тип файла
.gz Файл, упакованный gzip
.Z Файл, упакованный compress
.z Файл, упакованный pack
.bz2 Файл, упакованный bzip2
.tar Архив tar
.tar.gz Архив tar, упакованный gzip
.tgz То же, что .tar.gz
.taz То же, что .tar.Z
.zip Упакованный архив zip/pkzip
.arj Упакованный архив arj
.a Библиотека ar
Упаковщик compress
Сompress упаковывает указанный ему файл и добавляет к имени расширение .Z. Пример использования:
compress file
Для распаковки используется программа uncompress:
uncompress file.Z
Замечание: Если указать ключ "-r" и имя директории, то будут упакованы/распакованы все файлы в этой директории. Но этот ключ ни в коем случае не означает "упаковать всю директорию в один файл"!

Упаковщик gzip
Gzip был создан как более мощная замена для compress. Используется он точно так же:
gzip file
Gzip позволяет достигать больших степеней сжатия, чем compress, и поэтому почти вытеснил его. Поскольку большее сжатие занимает больше времени, есть возможность указать gzip'у, как паковать — быстрее (и слабее) или лучше (и медленнее). Для этого служат ключи от "-1" (самое быстрое сжатие) до "-9" (наибольшее сжатие):
gzip -9 file
По умолчанию используется "-6". Для распаковки применяется программа gunzip. Gunzip умеет также распаковывать файлы .Z и .z.

Упаковщик bzip2
Bzip2 был создан сравнительно недавно — в 1996 году. Он использует при паковке алгоритм Burrows-Wheeler (вместо Lempel-Ziv, применяемого в compress/gzip/zip), что позволяет достигать еще больших степеней сжатия. Платой за это является несколько большее время упаковки.
Используемые bzip2 ключи почти идентичны gzip'овым. Но bzip2 по умолчанию использует наилучшее сжатие ("-9"):
Bzip2 file

Общие свойства compress, gzip и bzip2:
• Во-первых, при упаковке и распаковке эти программы "заменяют" исходный файл упакованным/распакованным следующим образом: они читают содержимое исходного файла и пишут результат в файл с таким же именем, но с добавлением/удалением расширения (.Z/.gz/.bz2), а затем удаляют исходный файл. Поэтому, если на диске недостаточно места для обоих файлов одновременно (или есть ограничения по дисковой квоте), то упаковка/распаковка может не удаться.
• Во-вторых, при упаковке и распаковке все они стараются сохранить максимум информации о файле — упакованному/распакованному файлу устанавливаются те же права доступа и время, что и исходному.
• В-третьих, если не указывать имя файла, то упаковываться/распаковываться будет стандартный ввод, а результат отправляться на стандартный вывод. Это позволяет использовать упаковщики в конвейерах, к примеру, сразу ужимая результаты какой-либо вычислительной программы.
• В-четвертых, если указать ключ "-c" ("cat"), то вместо замены исходного файла результат будет отправлен на стандартный вывод.
• В-пятых, для каждого из форматов есть программа, позволяющая просмотреть содержимое файла, не распаковывая его на диске. Для .Z и .gz это zcat, zmore и zless, а для .bz2 — bzcat и bzless.
Кроме того, по файлам .Z и .gz можно вести поиск "a-la grep" — для этого служит программа zgrep.
Замечание: Вообще-то, zcat — это синоним "gunzip -c", а zless и bzless — очень простые скрипты. Поскольку zgrep также является скриптом, то несложно написать его аналог для bzip2.

Архиватор tar
Первоначально tar был разработан для резервного копирования на ленту, отсюда и его название — Tape ARchiver. Но поскольку возможность помещать большое количество файлов внутрь одного чрезвычайно удобно (к примеру, для хранения и передачи групп файлов, например, дистрибутивов), то он получил более широкое распространение.
Вообще, в каждом *nix есть свой подвид tar, со слегка отличающимися опциями. Но основные опции (создать, развернуть, проверить архив) одинаковы во всех версиях. В Linux используется GNU-версия tar, которая доступна в большинстве других Unix (иногда под именем "gtar").
Если tar используется для работы с файлами-архивами (а не с лентой), то его вызов обычно выглядит так:
tar <буква-команды> f <имя-архива.tar> [файлы...]
В качестве команды обычно используется одна из следующих букв:
c
(Create) создать архив;
x
(eXtract) распаковать архив;
t
(Test) просмотреть содержимое архива.
Например, чтобы создать архив /tmp/someconfs.tar, содержащий файлы /etc/fstab и /etc/passwd:
tar cf /tmp/someconfs.tar /etc/fstab /etc/passwd
Здесь сразу надо заметить две особенности:
– Во-первых, у файлов, имена которых указаны в абсолютном виде, т.е. начинаются с "/", tar автоматически этот "/" обрезает, чтобы позже можно было распаковать архив в любое место (а не только обратно в /etc/).
– Во-вторых, при нормальной работе tar ничего не печатает на экране (в отличие от pkzip и arj). Чтобы он показывал обрабатываемые файлы, надо указать ключ "v":
tar cvf /tmp/someconfs.tar /etc/fstab /etc/passwd.
Если указать "vv", то кроме имен будут показываться те же атрибуты, что и при "ls -l".
Вообще у tar довольно нестандартный синтаксис команд: хотя все ключи и можно указывать обычным способом (т.е. через "-"), и даже длинные ключи (с "--"), но обычно первым параметром ему указывается сочетание из нескольких букв, первая из которых является командой, а остальные — ключами. Так, "f" — это тоже ключ, который говорит, что далее указано имя файла-архива (поэтому "f" надо указывать в конце списка).
Замечание: Хотя в большинстве систем tar прекрасно понимает именно такой синтаксис, в некоторых старых Unix'ах перед "сочетанием букв" обязательно надо указывать "-".

Для просмотра архива используется команда "t" (ключ "v" указывает, что надо выдавать более полную информацию):
tar tvf /tmp/someconfs.tar
Для распаковки применяется команда "x":
tar xf /tmp/someconfs.tar
Tar разворачивает дерево-содержимое архива в текущей директории. Чтобы распаковать архив в другую директорию, надо или перейти в нее (командой cd), или указать ключ "-C" (распаковываем в директорию /tmp):
tar xf /tmp/someconfs.tar -C /tmp
Замечание: Вообще-то, назначение ключа "-C" более общее, и надо хорошо себе представлять, что он будет делать в каждом конкретном случае. Но при распаковке всего архива такое использование достигает цели.
Обычно .tar-файлы держат упакованными (чаще всего gzip'ом). Самое простое — создать архив и затем упаковать его. Но можно указать в качестве имени архива "-" — тогда результат будет отправлен на стандартный вывод, и затем передать его gzip'у, стандартный вывод которого перенаправить в файл:
tar cf — /etc/fstab /etc/passwd | gzip > someconfs.tgz

При использовании GNU tar (например, в Linux) есть еще более простой способ: можно указать ключ "z", который означает "пропустить файл через gzip":
tar czf someconfs.tgz /etc/fstab /etc/passwd
Этот же ключ можно указывать при распаковке и просмотре архива.
Замечание: если сказать tar'у создать архив в той же директории, откуда берутся исходные файлы (к примеру, в текущей: "tar cf archive.tar."), то сам .tar-файл тоже попадет в архив — точнее, та его часть, что была создана на момент начала добавления его самого. Дело в том, что tar (в отличие от Dos'овских pkzip и arj) не проверяет, что файл, который он собирается поместить в архив, — это сам архив. Поэтому лучше сами файлы-архивы создавать вне того дерева, из которого берутся файлы, или прямо указывать список всех файлов, которые надо положить в архив.

Совместимость с zip/unzip, unarj
Для манипуляций с .zip-файлами практически в любом *nix есть программы zip и unzip. Ключи zip и unzip почти идентичны оным у pkzip/pkunzip. Получить краткую справку по ним можно, запустив любую из этих программ без параметров.
Для распаковки .arj-файлов есть программа unarj. В отличие от "настоящего" arj, она не умеет создавать .arj-архивы, не оптимизирована по скорости и поддерживает лишь небольшое количество опций. Поддерживаются самые часто используемые опции arj — просмотр и распаковка, но при распаковке нет возможности указать, какие файлы надо извлекать — можно распаковать только весь архив. Краткую справку можно получить, набрав просто "unarj" без параметров.
Про упаковщик-архиватор RAR я не писал сознательно. Данная программа давно заслужила авторитет у пользователей платформы Windows, но вот в Linux до сих пор наиболее употребимы gzip и bzip2.

X-Stranger
linux@hitech.by



Компьютерная газета. Статья была опубликована в номере 32 за 2002 год в рубрике soft :: linux

©1997-2024 Компьютерная газета