Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Архивирование и упаковка данных

Prev 

Chapter 5. Утилиты командной строки

 Next


Архивирование и упаковка данных

tar: Архиватор для накопителей на магнитной ленте (Tape ARchiver)

tar, как и find, - это одна из старейших утилит UNIX®, поэтому её синтаксис несколько специфичен. Вот он:

tar [опции] [файлы...]

Вот список некоторых опций. Обратите внимание, что все они имеют эквивалентную длинную запись, но вам понадобится обратиться к странице руководства tar, т.к. здесь мы их перечислять не будем.

[Note]

Note

теперь в tar не используется начальное тире (-) перед короткими опциями, за исключением использования после длинной опции.

  • c: создаёт новые архивы.
  • x: извлекает файлы из существующего архива.
  • t: выводит список файлов существующего архива.
  • v: выводит список файлов, добавленных или извлеченных из архива, или, в сочетании с опцией t (см. выше), выводит список файлов в длинном формате вместо короткого.
  • f <имя_файла>: создает архив с именем имя_файла, извлекает из архива с именем имя_файла или выводит список файлов архива имя_файла. Если этот параметр отсутствует, файлом по умолчанию будет /dev/rmt0, который обычно является специальным файлом, связанным со стримером. Если именем файла является - (тире), ввод или вывод данных (в зависимости от того, создается архив или выполняется извлечение из него) будет ассоциирован со стандартным вводом или стандартным выводом.
  • z: сообщает tar'у, что создаваемый архив должен быть сжат при помощи gzip, или что архив, из которого выполняется извлечение, упакован gzip'ом.
  • j: аналог z, но для упаковки была использована программа bzip2.
  • p: при извлечении файлов из архива сохраняет все файловые атрибуты, включая владельца, время последнего доступа и так далее. Очень полезна для дампов файловой системы.
  • r: добавляет в существующий архив файлы, список которых указан в командной строке. Обратите внимание, что архив, к которому вы хотите добавить файлы, должен быть не упакованным!
  • A: добавляет указанные в командной строке архивы в архив, определённый опцией f. По аналогии с опцией r, чтобы это сработало, архивы должны быть не упакованными.

Существует еще много, чертовски много, других опций, поэтому для получения полного списка вы можете обратиться к странице руководства tar(1). Взгляните, например, на опцию d. Давайте рассмотрим её на примере. Допустим, что вам нужно создать архив из всех изображений каталога /shared/images, назвать его images.tar.bz2, упаковать bzip2'ом и поместить в свой домашний каталог. Для этого наберите следующее:

#
 # Примечание: вы должны находится в каталоге, файлы
 # которого вы хотите заархивировать!
 #
$ cd /shared
$ tar cjf ~/images.tar.bz2 images/

Как видите, здесь мы использовали три опции: c сообщила tar'у, что нам нужно было создать архив, j упаковала его при помощи bzip2, а f ~/images.tar.bz2 создала архив в нашем домашнем каталоге и назвала его images.tar.bz2. Теперь у нас может возникнуть желание проверить целостность архива. Для этого мы можем вывести список его файлов:

#
 # Возвращаемся назад в наш домашний каталог
 #
$ cd
$ tar tjvf images.tar.bz2

Здесь мы сообщили tar'у вывести список (t) файлов архива images.tar.bz2 (f images.tar.bz2), предупредив, что этот архив был упакован bzip2'ом (j), а также о том, что нам нужен список файлов в длинном формате (v). Теперь предположим, что вы удалили каталог с изображениями. К счастью у вас есть неповреждённый архив, и теперь вы хотите извлечь из его содержимое в исходное место в /shared. Но т.к. вы не хотите нарушить работу программы find для новых изображений, вам необходимо восстановить все атрибуты файлов:

#
 # Переход в каталог, в который нужно извлечь содержимое архива
 #
$ cd /shared
$ tar jxpf ~/images.tar.bz2

И вот, пожалуйста!

Теперь давайте предположим, что вам нужно извлечь из архива только каталог images/cars. Тогда вы можете набрать следующее:

$ tar jxf ~/images.tar.bz2 images/cars

Если вы попытаетесь сделать резервную копию специальных файлов, программа tar поместит их в архив “как есть”, не выполняя дампа их содержимого. Поэтому вы можете спокойно поместить в архив файл /dev/mem. Также tar корректно работает и со ссылками, так что не волнуйтесь насчёт этого. По поводу символических ссылок взгляните на опцию h в странице рукводства.

bzip2 и gzip: Программы упаковки данных

Вы видите, что мы уже упоминали эти две программы, когда рассматривали tar. В отличии от WinZip® для Windows® архивирование и упаковка выполняются при помощи двух разных утилит –– tar для архивации; и две программы для упаковки данных, с которыми мы сейчас ознакомимся: bzip2 и gzip. Вы также можете использовать и другие существующие утилиты упаковки для GNU/Linux, такие как zip, arj или rar (но используются они весьма редко).

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

Обе команды имеют похожий синтаксис:

gzip [опции] [файл(ы)]

Если не указано имя файла, и gzip, и bzip2 будут ожидать данные со стандартного ввода и отправлять результат на стандартный вывод. Поэтому вы можете использовать обе программы в каналах. Они также имеют набор общих опций:

  • -1, ..., -9: установка степени сжатия. Чем больше число, тем выше степень сжатия и медленнее процесс упаковки.
  • -d: распаковка файл(ов). Это эквивалентно использованию утилит gunzip или bunzip2.
  • -c: сброс на стандартный вывод результатов упаковки/распаковки файлов, указанных в виде параметров.

[Warning]

Warning

По умолчанию и gzip, и bzip2 удаляют упакованные (или распакованные) файлы, если только вы не используете опцию -c. В bzip2 вы можете избежать этого, воспользовавшись опцией -k. В gzip эквивалентной опции нет.

А теперь несколько примеров. Допустим, что вам нужно упаковать при помощи bzip2 все файлы в текущем каталоге, заканчивающиеся на .txt. Для этого наберите:

$ bzip2 -9 *.txt

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

bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz

. Вместо bzip2 -dc вы могли ввести bzcat. Это аналог программы gzip, но она называется zcat, а не gzcat. У вас также есть bzless для файлов bzip2 и zless для gzip, если вы хотите просмотреть упакованные файлы сразу без предварительной их распаковки. В качестве упражнения попробуйте найти команды, которые вам понадобиться ввести для просмотра упакованных файлов без распаковки их посредством bzless или zless.


Prev 

Up

 Next

Запуск команд по расписанию 

Home

 Больше, гораздо больше...