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