Несмотря на то, что мы уже использовали tar в главе Глава 12. Сборка и инсталляция свободного програмного обеспечения, мы до сих пор не объяснили как она работает. Именно для этого этот раздел здесь и помещен. Как и find, tar является одной из старейших стандартных утилит UNIX. И, точно также как tar, имеет несколько специфичный синтаксис:
tar [options] [files...] |
Теперь приведем список опций. Обратите внимание, что все приведенные опции имеют и длинный вариант написания, но для ознакомления с ними вам прийдется обратиться к страницам руководства, так как здесь они не будут приведены. И конечно же, мы не станем приводить здесь всех опций :-)
стартовая черточка (-) перед короткой опцией tar больше не используется, только после длинной опции.
x: эта опция используется для извлечения файлов из существующего архива;
v: эта опция просто выводит список файлов, которые добавляются или извлекаются из архива, или, в сочетании с опцией t (см. выше), выводит список в длинном формате;
f <file>: создает архив с именем <file>, извлекает из архива с именем <file> или получает список файлов в архиве с именем <file>. Если этот параметр отсутствует, то файлом по умолчанию будет /dev/rmt0, который является специальным файлом, связанным с устройством streamer. Если вместо имени файла подставить - (минус), ввод или вывод (в зависимости от того, создается или разворачивается архив) будет ассоциирован со стандартным вводом или стандартным выводом;
z: сообщает tar что архив, который должен быть создан, нужно сжать с помощью gzip, или что архив, который нужно развернуть, сжат gzip;
j: тоже самое что и z, но программа, используемая для компрессии или декомпрессии это bzip2;
p: при извлечении файлов из архива сохраняются все атрибуты, включая владельца, время последнего доступа и так далее. Очень полезно при снятии дампа файловой системы;
r: добавляет в конец существующего архива файлы, список которых получен из командной строки. Обратите внимание на то, что архив, к которому вы хотите добавить файлы, не должен быть компрессированным!
A: добавляет архив, имя которого получено из командной строки, к другому архиву (имя которого берется у опции f). По аналогии с опцией r, для того чтобы это работало - архивы не должны быть компрессированными;
Существует еще много, много, много других опций, поэтому, для получения полного списка, мы вам советуем обратится к справочному руководству tar(1) manual page. Давайте попрактикуемся и рассмотрим для примера опцию d. Допустим, мы хотим создать архив всех картинок, находящихся в каталоге /shared/images, скомпрессировать их с помощью bzip2, затем назвать его images.tar.bz2, и разместить в своем домашнем каталоге. Для этого наберите следующее:
# # Примечание: вы должны находиться в том каталоге, # файлы из которого вы желаете заархивировать! # $ 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 в manpage.