Утилита tar
Основным средством архивирования во всех Unix-системах является команда tar
. Обобщенный формат ее --
$ tar [options] archiv_name [arguments]
где archiv_name
-- обязательный аргумент, указывающий на имя архивного файла, с которым производятся действия, определяемые главными опциями. Формы указания опций для команды tar
очень разнообразны. Исторически первой была краткая форма без предваряющего дефиса, что поддерживается и поныне. Однако в текущих версиях команды в целях единообразия утверждена краткая форма с предваряющим дефисом или дублирующая ее полная форма, предваряемая двумя дефисами. Некоторые опции (например --help
- получение справки об использовании команды) предусмотрены только в полной форме.
Главные опции и указывают на то, какие действия следует выполнить над архивом в целом:
- создание архива (опция
c
,-c
или--create
); - просмотр содержимого существующего архива (опция
t
,-t
или--list
); - распаковка архива (опция
x
,-x
,--extract
или--get
).
Легко понять, что при работе с архивом как целым одна из этих главных (т.н. функциональных) опций обязательна. При манипулировании же фрагментами архива они могут подменяться другими функциональными опциями, как то:
r
(или--append
) - добавление новых файлов в конец архива;u
(или--update
) - обновление архива с добавлением не только новых, но и модифицированных (с меньшим значением атрибутаmtime
) файлов;-A
(--catenate
или--concatenate
) - присоединение одного архива к другому;--delete
- удаление именованных файлов из архива;--compare
- сравнение архива с его источниками в файловой системе.
Прочие (очень многочисленные) опции можно отнести в разряд дополнительных -- они определяют условия выполнения основных функций команды. Однако одна из таких дополнительных опций -- f
(-f
или --file
), значение которой -- имя файла (в том числе файла устройства, и не обязательно на локальной машине), также является практически обязательной. Дело в том, что команда tar
(от tape archiv) изначально создавалась для прямого резервного копирования на стриммерную ленту, и именно это устройство подразумевается в качестве целевого по умолчанию. Так что если это не так (а в нынешних условиях -- не так почти наверняка), имя архивного файла в качестве значения опции f
следует указывать явно. Причем некоторые реализации команды tar
требуют, чтобы в списке опций она стояла последней.
Проиллюстрируем сказанное несколькими примерами. Так, архив из нескольких файлов текущего каталога создается следующим образом:
$ tar cf arch_name.tar file1 ... file#
Если задать дополнительную опцию v
, ход процесса будет отображаться на экране -- это целесообразно, и в дальнейших примерах эта опция будет использоваться постоянно.
С помощью команды tar
можно заархивировать и целый каталог, включая его подкаталоги любого уровня вложенности, причем - двояким образом. Так, если дать команду
$ tar cvf arch_name.tar *
файлы каталога текущего каталога (включая подкаталоги) будут собраны в единый архив, но без указания имени каталога родительского. А командой
$ tar cvf arch_name.tar dir
каталог dir
будет упакован с полным сохранением его структуры.
С помощью команды
$ tar xvf arch_name.tar
будет выполнена обратная процедура -- распаковка заархивированных файлов в текущий каталог. Если при архивировании в качестве аргумента было указано имя каталога, а не набора файлов (пусть даже в виде шаблона) - этот каталог будет восстановлен в виде корневого для всех
разархивируемых файлов.
При извлечении файлов из архива никто не обязывает нас распаковывать весь архив -- при необходимости это можно сделать для одного нужного файла, следует только указать его имя в качестве аргумента:
$ tar xvf arch_name.tar filename
Правда, если искомый файл находился до архивации во вложенном подкаталоге, потребуется указать и путь к нему -- от корневого для архива каталога, который будет различным для двух указанных схем архивации. Ну а для просмотра того, каким образом был собран наш архив, следует воспользоваться командой
$ tar tf arch_name.tar
Если архив собирался по первой схеме (с именами файлов в качестве аргументов, вывод ее будет примерно следующим:
dir2/ dir2/file1 example new newfile tee.png
При втором способе архивации мы увидим на выводе нечто вроде
dir1/ dir1/example dir1/new dir1/newfile dir1/tee.png dir1/dir2/ dir1/dir2/file1
В данном примере опция v
была опущена. Включение ее приведет к тому, что список файлов будет выведен в длинном формате, подобном выводу команды ls -l
:
drwxr-xr-x alv/alv 0 10 май 11:03 2002 dir2/ -rw-r--r-- alv/alv 0 10 май 11:03 2002 dir2/file1 ...
Команда tar
имеет еще множество дополнительных опций, призванных предотвращать перезапись существующих файлов, осуществлять верификацию архивов, учитывать при архивации разного рода временные атрибуты, вызывать для исполнения другие программы. К некоторым опциям я еще вернусь после рассмотрения команд компрессии, другие же предлагается изучить самостоятельно, воспользовавшись страницей экранной документации man tar
.
Содержание
Теги: tar