Предыдущий Содержание Следующий

5.7  Архиваторы

В Slackware Linux есть несколько программ, которые могут быть использованы для сжатия и архивирования файлов. Эти программы особенно полезны для создания резервных копий документов (backups) и для обмена файлами между компьютерами по сети. Вы можете найти, как программы для работы со стандартными Unix так и со стандартными Windows архивами.

5.7.1  gzip

gzip(1) это GNU программа сжатия. Она берёт один файл и сжимает его. Пример обычного использования выглядит вот так:

$ gzip infile

Выходной файл будет назван infile.gz и почти всегда будет меньше входного. Обратите внимание, что infile.gz заменит infile. Это значит, что infile прекратит своё существование. Останется только его сжатая копия. Обычные текстовые файлы существенно сожмутся, в то время как jpeg картинки, mp3, и другие подобные файлы почти не сожмутся, так как они уже сжаты. Приведённый выше пример, это нечто среднее между качеством сжатия и затраченным временем. Максимальное сжатие может быть получено при помощи такой команды:

$ gzip -9 infile

Это займёт больше времени, но выходной файл будет настолько сжатым, насколько gzip вообще может его сжать. Использование меньших значений займёт меньше времени, но соответственно и качество компрессии будет хуже.

Распаковывание gzipped (запакованных GNU zip) файлов может быть выполнено при помощи двух команд, которые на самом деле являются одной и той же программой. gzip распакует любой файл с узнаваемым им расширением. Вот список расширений, которые узнаёт команда: .gz, -gz, .z, -z, .Z, или -Z. Первый метод - применить команду gunzip(1) к файлу:

$ gunzip infile.gz

Выполнение этой команды приведёт к тому, что вместо указанного файла в этом же каталоге появится его распакованная версия и .gz часть его имени исчезнет.

Второй метод распаковывания gziped файла, это вызвать gzip в применении к файлу:

$ gzip -d infile.gz

Это приведёт к точно такому же результату, как и вызов gunzip. Объяснение очень просто: gunzip это всего лишь символическая ссылка на /bin/gzip:

$ cd /usr/bin
$ ls -l gunzip
lrwxrwxrwx 1 root root 9 Feb 2 09:45 gunzip -> /bin/gzip

Так что выполнение gunzip на самом деле лишь вызов gzip хоть и под другим именем. Программа может определить, по какому имени к ней обратились, и работает в соответствии с этим. В этом случае, gzip увидит, что его вызвали как gunzip и распакует файл. Поэтому вы можете на ваше усмотрение пользоваться любой из команд, для распаковки gziped файлов.

5.7.2  bzip2

bzip2(1) это альтернативная программа сжатия, установленная в Slackware Linux. Она использует алгоритм отличный от gzip, который имеет как преимущества, так и недостатки. Главное преимущество bzip2 это размер сжатых файлов. bzip2 почти всегда сожмёт лучше, чем gzip. Иногда файлы получаются гораздо меньше, чем фалы сжатые gzip-ом. Это может быть значительным преимуществом для людей, с медленным модемным соединением.

Недостаток bzip2 в том, что она более интенсивно использует CPU, чем gzip. А это значит, что использование bzip займёт больше времени и будет более требовательно к процессору, чем gzip. Когда вы решаете, каким архиватором пользоваться, надо взвесить это соотношение скорость - сжатие, и выбрать, что важнее.

Использование bzip2 очень похоже на использование gzip, так что мы не станем много времени тратить на её обсуждение. Просто вызовите bzip2, указав имя файла:

$ bzip2 infile

Вывод обычно будет меньше, чем входной файл, и получит название infile.bz2. Как и с gzip, входной файл будет заменён сжатым.

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

$ bzip2 -9 infile

Есть два способа распаковывания файлов, заканчивающихся .bz2 расширением, как и с gzip. Вы можете использовать bzip2 или bunzip2(1) для распаковки bzipped файлов. Использование bzip2 потребует указания аргумента:

$ bzip2 -d infile.bz2

Эта команда распакует bziped файл и заменит его распакованной копией. Этот результирующий файл потеряет .bz2 расширение. Аналогично, вы можете использовать bunzip2 для распаковки файла:

$ bunzip2 infile.bz2

все произведённые программой действия будут абсолютно идентичными, так как опять мы имеем дело с символьной ссылкой. Проверка /bin/bunzip2 показывает, что это просто символьная ссылка на /bin/bzip2. Используется тот же трюк, что и с gzip. Вы увидите, что вызов программ при помощи нескольких различных имён, для получения разного их поведения, это любимый трюк Linux программистов.

$ cd /bin
$ ls -l bunzip2
lrwxrwxrwx 1 root root 5 Feb 2 09:45 /bunzip2 -> bzip2

5.7.3  tar

tar(1) это GNU ленточный архиватор. Он берёт несколько файлов или каталогов и создаёт один большой файл. Это позволяет вам сжимать целое дерево каталогов, чего нельзя достигнуть при простом использовании gzip или bzip2. tar имеет много параметров командной строки, которые описаны в man странице программы. В этом разделе будут рассмотрены наиболее распространённые варианты использования tar.

Чаще всего tar используется для распаковки и раз-архивирования пакетов, скачанных с вэб или ftp сайтов. Большинство файлов будут иметь .tar.gz расширение. Это так называемый ''tarball''. Это означает, что несколько файлов были помещены в архив при помощи tar и затем этот архив был сжат при помощи gzip. Иногда они так же имеют расширение .tar.Z. Это означает то же самое, но обычно встречается на более старых Unix системах.

Так же вы можете встретить иногда .tar.bz2 файлы. Исходный текст ядра поставляется в таком виде, потому что так вам придётся скачивать меньший файл. Как вы уже вероятно догадались, это несколько файлов, объединённых в архив при помощи tar и сжатых при помощи bzip2.

Вы можете получить файлы из таких архивов, при помощи tar команды с определёнными аргументами командной строки. Разархивирование tarbal-а требует указания ключа -z, что фактически вызовет вначале выполнение gunzip, для распаковки файла. Обычно tarbal-ы распаковываются такой командой:

$ tar -xvzf hejaz.tar.gz

Довольно много опций. Что же все они означают? ''-x'' значит извлечь (extract). Это важно, так как именно этот параметр говорит tar-у, что именно делать с входным файлом. В этом случае мы опять разобьём архив на все те файлы, из которых он был составлен. ''-v'' скажет программе быть ''многословной'' (verbose). Указание этого ключа приведёт к тому, что в процессе извлечения будет выводиться список файлов, которые извлекаются. Вы можете смело отказаться от использования этого ключа, если вас раздражает вывод подобной информации. Так же вы можете использовать ''-vv'', чтобы программа стала совсем многословной, и отображала ещё больше информации о файлах, которые извлекаются. опция ''-z'' говорит tar-у, вначале пропустить файлhejaz.tar.gz через gunzip. Ну и наконец, ''-f'' опция указывает, что далее в командной строке будет указанно имя файла, с которым надо работать.

Есть так же несколько других способов написания той же самой команды. На более старых системах, в которых отсутствует приличная версия GNU tar, вы можете встретить такой синтаксис:

$ gzip -dc hejaz.tar.gz | tar -xvf -

Эта строчка команд вначале распакует файл и затем пошлёт вывод tar-у. Так как gzip запишет вывод на стандартный вывод, если его попросить, эта команда запишет распакованный файл в стандартный вывод. Через pipe файл будет послан tar-у для раз-архивирования. ''-'' означает работать со стандартным вводом. Программа разархивирует поток данных, который она получит от gzip и запишет вывод на диск.

Другой способ записи первой команды это запись без тире перед опциями:

$ tar xvzf hejaz.tar.gz

Возможно вам так же понадобится работать с bziped архивами. Версия tar, поставляемая со Slackware Linux может работать с ними так же как и с gziped архивами. Вместо ''-z'' опции вам надо воспользоваться ''-y'':

$ tar -xvyf foo.tar.bz2

Следует отметить, что tar поместит извлечённые файлы в текущем каталоге. Так что если ваш архив находится в /tmp каталоге, а распаковать вы его хотите в домашний каталог, есть два варианта решения проблемы. Первая - архив можно переместить в домашний каталог и затем обработан с tar. Или же вы можете указать путь к архиву в командной строке:

$ tar -xvzf /tmp/bar.tar.gz

Содержимое архива будет вывалено в ваш домашний каталог, а исходный архив так и останется в /tmp каталоге.

Второй наиболее распространённый вариант использования tar это создание ваших собственных архивов. Создание архива не более сложная процедура, чем разархивирование других файлов; просто требует другого набора опций командной строки.

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

$ tar -cvzf archive.tar.gz .

В этой командной строке ''-c'' опция указывает, что должен быть создан архив, а ''-z'' сжимает получившийся архив при помощи gzip. archive.tar.gz это файл, который вы хотите создать. Вы можете назвать его как вам заблагорассудится, а если вы так же укажете полный путь, то файл будет создан в указанном каталоге. Вот пример:

$ tar -cvzf /tmp/archive.tar.gz .

В этом случае архив будет создан в /tmp каталоге. Вы можете так же указать все файлы и каталоги, которые вы хотите включить в архив, перечислив их в конце команды. В этом случае . это каталог, который будет включён в архив. Вы можете заменить его на список всевозможных файлов или всего того, что захотите включить в архив.

5.7.4  zip

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

Сжимать довольно легко:

$ zip foo *

Эта команда создаст файл foo.zip, который будет содержать все файлы в текущем каталоге. zip автоматически добавит .zip расширение, так что вам не надо указывать его в командной строке. Вы так же можете пробежаться по текущему каталогу, пакуя все каталоги, которые там есть:

$ zip -r foo *

Распаковывать файлы тоже не сложно.

$ unzip foo

Это распакует все файлы из файла foo.zip, включая все каталоги, присутствующие в архиве.

zip утилиты имеют несколько расширенных опций для создания само-распаковывающихся (self-extracting) архивов, для пропуска некоторых из файлов, управления размером сжатого файла, вывода на экран отчётов и гораздо больше. Смотрите man страницы для zip и unzip, чтобы узнать как использовать эти опции.

5.7.5  Итог

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


Предыдущий Содержание Следующий

File translated from TEX by TTH, version 2.89.
On 24 Apr 2001, 16:43.