tar, как и find, - это одна из старейших утилит UNIX®, поэтому ее синтаксис несколько специфичен. Вот он:
tar [опции] [файлы...]
Вот список некоторых опций. Обратите внимание, что все они имеют эквивалентную длинную запись, но вам понадобится обратиться к странице руководства tar(1), т.к. здесь мы их перечислять не будем.
![]() | Замечание |
---|---|
Теперь в tar не используется начальное
тире ( |
x
: используется для извлечения
файлов из существующего архива.
v
: подробный режим. Выводит
список файлов, добавленных или
извлеченных из архива, или, в сочетании с
опцией t
(см. выше), выводит
список файлов в длинном формате вместо
короткого.
f <имя_файла>
: создает архив с
именем имя_файла
, извлекает из
архива с именем имя_файла
или
выводит список файлов архива
имя_файла
. Если этот параметр
отсутствует, файлом по умолчанию будет
/dev/rmt0
, который обычно
является специальным файлом, связанным
со
стримером.
Если именем файла является -
(тире), ввод или вывод данных (в
зависимости от того, создается архив или
выполняется извлечение из него) будет
ассоциирован со стандартным вводом или
стандартным выводом.
z
: сообщает tar'у, что
создаваемый архив должен быть сжат при
помощи gzip, или что архив, из которого
выполняется извлечение, упакован
gzip'ом.
j
: эквивалент z
, но для
упаковки используется программа bzip2.
p
: при извлечении файлов из
архива сохраняет все файловые атрибуты,
включая владельца, время последнего
доступа и так далее. Очень полезна для
дампов файловой системы.
r
: добавляет в существующий
архив файлы, список которых указан в
командной строке. Обратите внимание, что
архив, к которому вы хотите добавить
файлы, должен быть не
упакованным!
A
: добавляет указанные в
командной строке архивы в архив,
определенный опцией f
. По
аналогии с опцией r
, чтобы это
сработало, архивы должны быть не
упакованными.
Существует еще великое множество других
опций, поэтому для получения полного
списка вы можете обратиться к странице
руководства tar(1).
Взгляните, например, на опцию d
.
Давайте рассмотрим пример. Допустим, вам
нужно создать архив со всеми
изображениями каталога
/shared/images
, упаковать его
bzip2'ом, назвать images.tar.bz2
и
поместить в свой домашний каталог
/home
. Для этого наберите
следующее:
# # Примечание: вы должны находится в каталоге, # файлы которого вы хотите заархивировать! # $ 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
в
странице руководства
.
Мы уже говорили об этих двух программах, когда рассматривали tar. В отличии от WinZip® для Windows®, архивирование и сжатие осуществляется двумя различными утилитами: tar для архивации и две программы для сжатия bzip2 и gzip, рассмотрением которых мы сейчас и займемся. Вы также можете воспользоваться другими утилитами сжатия данных, такими как zip, arj или rar, которые также существуют для GNU/Linux (но весьма редко используются).
Для начала следует отметить, что bzip2 был написан для замены gzip. Его степень сжатия обычно гораздо выше, но с другой стороны для его работы требуется больше ресурсов. Несмотря на это, gzip всё ещё используется для совместимости со старыми системами.
Обе команды имеют похожий синтаксис:
gzip [опции] [файл(ы)]
Если не указано имя файла, и gzip, и bzip2 будут ожидать данные со стандартного ввода и отправлять результат на стандартный вывод. Поэтому вы можете использовать обе программы в каналах. Они также имеют набор общих опций:
Теперь приведем несколько примеров.
Допустим, вы хотите упаковать в текущем
каталоге все файлы, названия которых
заканчиваются на .txt
,
используя программу bzip2 с
максимальным коэффициентом сжатия. Вы
можете сделать это так:
$ bzip2 -9 *.txt
Теперь вы хотите дать попользоваться кому-то своими картинками, но у этого человека нет bzip2, а есть только gzip. Вам нет необходимости распаковывать архив, а затем снова упаковывать его. Вы можете просто распаковать его на стандартный вывод, затем, воспользовавшись каналом, упаковать стандартный ввод и перенаправить результат в новый архив: Например, так:
bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz
Вы могли вызвать bzcat вместо bzip2 -dc. Это аналог программы gzip, но называется она zcat, а не gzcat. Также в вашем распоряжении bzless для bzip2-файлов и zless для gzip, если вы хотите просматривать упакованные файлы непосредственно, без предварительной распаковки. В качестве упражнения найдите и попробуйте команды, необходимые для просмотра сжатых файлов без их распаковки и без использования утилит bzless или zless.