В этой главе описываются основные операции, поддерживаемые программой tar. Один вызов tar точно выполняет одну из этих операций.
Член архива обычно извлекается в файл с тем же именем, что и член архива. Однако, вы можете использовать '--to-stdout' ('-O'), чтобы заставить tar вывести извлеченные члены архива на стандартный вывод. Если вы извлекаете много членов, они появляются на стандартном выводе конкатенированными, в том порядке, в котором они были найдены в архиве.
Операция '--create' ('-c') записывает новый архив, а операция '--extract' ('-x') читает файлы из архива и записывает их в систему файлов. Вы можете использовать другие операции tar для записывания новой информации в уже существующий архив (путем добавления в него файлов, добавления к нему другого архива или удаления из него файлов), и можете прочесть список файлов архива без их извлечения, используя операцию '--list'.
Начальный аргумент tar - операция, которая задает действие, которое tar должен произвести. tar можно использовать для:
Аргументы опций tar изменяют подробности операции, такие как формат архива, имя архива или уровень диалога пользователя. Вы можете задать более чем одну опцию. Все опции необязательны.
Аргументы имени файла задают файлы (включая каталоговые файлы) для архивирования, извлечения, удаления или других операций.
Если вы не используете аргументов имени файла, '--append', 'update' и '--delete' ничего не делают. Остальные операции tar что-нибудь делают по умолчанию.
Когда вы используете аргумент имени файла, чтобы задать каталоговый файл, tar работает со всеми файлами этого каталога, включая подкаталоги.
Вы можете использовать опцию из нижеследующего списка. Эти опции задают выполнение основных операций tar.
Создает новый архив.
Добавляет содержимое одного или более архивов к другому архиву.
Добавляет файлы в существующий архив.
Выводит список файлов архива
Удаляет из архива его члены.
Извлекает из архива его члены.
Сравнивает члены архива с файлами системы файлов.
Модифицирует архив путем добавления новый версий уже хранящихся файлов.
Остальные опции tar изменяют подробности выполнения операции, такие как формат архива, имя архива или интерактивеый уровень пользователя. Вы можете задать более чем одну опцию.
Остальные аргументы интерпретируются как имена файлов или имена членов архива, зависящие от основной операции, выполняемой tar. Для опций '--append' и '--create' эти аргументы задают имена файлов (которые, может быть, уже существуют) для помещения в архив. Для других типов операций дополнительные аргументы задают члены архива для сравнения, удаления, извлечения, составления списка или модифицирования. При назывании члена архива вы должны дать его точное имя, проверив правильность с помощью '--list'.
Если вы не используете дополнительных аргументов, '--append', 'update' и '--delete' ничего не делают. '--create' создаст пустой архив, если не задать файлы, которые нужно туда добавить. Другие операции tar ('--list' ('-t'), '--extract' ('-x'). '--compare' ('-d') и '--update' ('-u')) будут в этом случае работать со всем содержимым архива.
Если вы даете имя каталога как имя файла или имя члена, tar работает рекурсивно со всеми файлами и каталогами этого каталога. Например, имя '/' идентифицирует все файлы системы файлов tar.
Аргумент операции tar задает, какое действие вы хотите произвести.
Добавляет копии архива или архивы в конец другого файла.
Создает новый архив.
Сравнивает файлы архива с их противоположными частями в системе файлов, и сообщает о различиях в размере, режиме, имени хозяина, дате модификации и содержимом.
Добавляет файлы в конец архива.
Выдает список содержимого архива.
Считывает файлы из архива и записывает их в действующую систему файлов.
Добавляет файлы в конец архива, но только если они более новые, чем противоположные части уже в архиве, или их еще не существует в архиве.
Добавляет копии архива или архивы в конец другого архива.
Добавляет файлы в конец архива.
Сравнивает файлы архива с их противоположными частями в системе файлов, и сообщает о различиях в размере, режиме, имени хозяина, дате модификации и содержимим.
Добавляет копии архива или архивы в конец другого архива.
Создает новый архив.
Удаляет файлы из архива. Удаляются все версии файлов.
Сравнивает файлы архива с их противоположными частями в системе файлов, и сообщает о различиях в размере, режиме, имени хозяина, дате модификации и содержимим.
Считывает файлы из архива и записывает их в действующую систему файлов.
Считывает файлы из архива и записывает их в действующую систему файлов.
Выдает список содержимого архива.
Добавляет файлы в конец архива, но только если они более новые, чем противоположные части уже в архиве, или их еще не существует в архиве.
Выдает номер версии программы tar на стандартную ошибку.
Программа tar может создавать архив, извлекать файлы из архива, модифицировать архив или составлять список его содержимого. Каждый раз, когда вы работаете с tar, вы должны дать команду, чтобы задать, что именно из этого вы хотите делать.
Команда должна всегда быть первым аргументом tar. Этот аргумент может также содержать опции.
Для согласованности с Unix tar первый аргумент всегда рассматривается как содержащий буквы команд и опций, даже если он начинается не с '-'. Таким образом, 'tar c' эквивалентно 'tar -c': и то, и другое задает команду '--create' создания архива.
Кроме того, опции с длинными именами можно использовать, не смешивая их с однобуквенными флагами. Опции с длинными именами легки для запоминания и логичны, тогда как об однобуквенных флагах этого не скажешь. Опции с длинными именами начинаются с '--'.
Аргументы начиная с первого - или опции, если они начинаются с '-' или '--', или файлы, которыми нужно оперировать.
Имена файлов, которые вы даете как аргументы - файлы, с которыми tar будет работать - например, это файлы для занесения в архив или для извлечения из него. Если вы не даете аргументов имени файла, все зависит от того, какую команду вы используете. Некоторые команды в этом случае используют все файлы, а некоторые - сообщают об ошибке.
Если аргумент имени файла точно называет каталог, то используются (рекурсивно) и этот каталог, и все его файлы и подкаталоги.
Список команд tar:
Создает новый архив.
Эта команда заставляет tar создать новый архив, содержащий файлы, заданные на командной строке. Если вы не задаете файлы, используются все файлы текущего каталога. Если архивный файл уже существует, на него записывается новый: старое содержимое теряется.
Извлекает файлы из архива.
Эта команда заставляет tar извлекать заданные файлы из архива. Если не даны имена файлов, из архива извлекаются все файлы.
Выводит список содержимого архива.
Эта команда заставляет tar вывести на экран список файлов архива. Если вы задаете имена файлов, будут упомянуты только заданные вами файлы (но каждый из них упоминается, только если он есть в архиве).
Находит различия между файлами архива и файлами, записанными на строке. Эта команда заставляет tar сравнивать файл архива с файлом системы файлов. Он сообщает о различиях в размере, режиме, имени хозяина и содержимом. Если файл существует в архиве, но не существует в системе файлов, tar сообщит об этом. Если вы задаете имена файлов, эти файлы сравниваются, и все они должны существовать в архиве. Если вы не задаете файлы, сравниваются все файлы архива.
Добавляет файлы в конец архива.
Эта команда заставляет tar добавлять заданные файлы в конец архива. Это предполагает, что архивный файл уже существует и имеет надлежащий формат (что, по-видимому, значит, что он был предварительно создан программой tar). Если архив имеет формат, непонятный tar, результаты непредсказуемы. Вы обязаны задать файлы, которые нужно использовать: по умолчанию ничего не происходит).
Добавляет в архив более новые версии файлов, чем те, что уже там находятся.
Эта команда заставляет tar добавлять заданные файлы в конец архива, как '--append', но только если файла еще нет в архиве или эта его версия более новая, чем имеющаяся в архиве (сравнивается время последней модификации). Добавление файлов в конец архива может быть очень медленным. Вы обязаны задавать файлы, которые нужно использовать.
Добавляет существующие архивы к другому архиву.
Эта команда используется для конкатенирования нескольких архивных файлов в один большой архивный файл. Все файлы для этого должны быть архивными файлами. Они все добавляются к концу архивного файла, с которым работает tar. (Другие файлы не меняются). Возникает желание использовать здесь cat, но обычно это не работает. Архив tar содержит данные, указывающие конец архива, т.ч. добавленный материал игнорируется. Эта команда работает, потому что она перемещает маркеры конца архива из середины.
Удаляет файлы из архива (если он не на ленте).
Эта команда заставляет tar удалять заданные файлы из архива. Выполнение этой команды крайне медленно. Будьте осторожны: использование этой команды для архивов, хранящихся на магнитной ленте, может привести к их шифровке. Это неудачный способ удаления файлов с магнитной ленты (за исключением полной перезаписи архива).
Для согласованности с Unix tar первый аргумент всегда рассматривается как содержащий буквы команд и опций, даже если он начинается не с '-'. Таким образом, 'tar c' эквивалентно 'tar -c': и то, и другое задает команду '--create' создания архива.
Кроме того, опции с длинными именами можно использовать, не смешивая их с однобуквенными флагами. Опции с длинными именами легки для запоминания и логичны, тогда как об однобуквенных флагах этого не скажешь. Опции с длинными именами начинаются с '--'.
Аргументы после первого - или опции, если они начинаются с '-' или '--', или файлы, которыми нужно оперировать.
Имена файлов, которые вы даете как аргументы - файлы, с которыми tar будет работать, например, это файлы для занесения в архив или для извлечения из него. Если вы не даете аргументов имени файла, все зависит от того, какую команду вы используете. Некоторые команды в таком случае используют все файлы, а некоторые сообщают об ошибке.
Если аргумент имени файла точно называет каталог, то используются (рекурсивно) и этот каталог, и все его файлы и подкаталоги.
Модифицирование архивов.
При создании архива вы можете в него добавить члены, содержимое другого архива или новые версии уже хранящихся членов, или удалить уже имеющиеся члены архива.
Чтобы узнать, какие файлы уже хранятся в архиве, используйте 'tar --list --file=имя_архива'.
Опция '--create' ('-c') заставляет tar создавать новый архив. Файлы, которые должны быть заархивированы, называются на командной строке. Каждый файл добавится в архив под тем именем, которое дано на командной строке. (Когда вы даете абсолютное имя файла, tar его модифицирует).
Если вы не даете имена файлов для архивации, создается пустой архив.
Если файлов слишком много, чтобы разместить список на командной строке, вы можете записать этот список в файл, и tar прочтет его.
Если вы назвали каталог, то tar заархивирует не только его, но - рекурсивно - и его содержимое. Например, если вы назвали '/', tar заархивирует всю систему файлов.
Не используйте опцию '--create' для добавления файлов в существующий архив: он удалится, и на его место запишется новый. Вместо этого используйте '--append'.
Есть разные способы пропускать некоторые файлы и не архивировать их.
Чтобы создать архив, используйте '--create' ('-c'). Чтобы назвать архив - '--file=имя_архива' с операцией '--create'.
Если вы не называете архив, tar использует значение переменной среды TAPE как имя файла для архива, или, если она недоступна, tar использует имя по умолчанию.
В нижеприведенном примере создается архив с именем 'stooges', содержащий файлы 'larry', 'moe', и 'curley':
tar --create --file=stooges larry moe curley
Если вы задаете имя каталога как аргумент имени файла, tar
заархивирует все файлы в этом каталоге. В следующем примере создается
архив по имени 'hail/hail/fredonia', содержащий то же, что и каталог
'marx':
tar --create --file=hail/hail/fredonia marx
Если вы не задаете файлы, которые нужно положить в архив, tar
архивирует все файлы рабочего каталога. В следующем примере создается
архивный файл 'home', содержащий все файлы рабочего каталога:
tar --create --file=home
Заметьте: в вышеприведенном примере архив, содержавший все файлы рабочего каталога, был записан в рабочий каталог. GNU tar сохраняет файлы в рабочем каталоге архива, который сам находится в рабочем каталоге, без вхождения в бесеконечный цикл. С другими версиями tar такое может быть.
Опция '--append' ('-r') заставляет tar добавлять новые файлы в существующий архив. Она интерпретирует имена файлов и членов так же, как '--create'. Если вы не задаете списка имен, ничего не случается.
Эта опция никогда не удаляет члены архива. Если новый член добавляется под тем же именем, что и существующий член, то в архиве останутся они оба - новый после старого. Для получения более подробной информации о том, как это происходит,
Эта операция не может выполняться на некоторых ленточных драйверах вследствие недостаточного формата, используемого этим драйвером.
Чтобы добавить файлы в архив, используется '--append' ('-r'). Архив, который нужно добавить, должен уже существовать и быть в надлежащем формате (обычно это значит, что он был предварительно создан с помощью tar). Если архив был создан с не таким размером блока, какой был задан, tar сообщит об ошибке.
Если архив не является допустимым архивом tar, результаты непредсказуемы. Вы не можете добавить файлы в уплотненный архив, однако вы можете добавить их в последний том многотомного архива.
В следующем примере файл 'shemp' добавляется в архив 'stooges', созданный выше:
tar --append --file=stooges shemp
Вы обязаны задавать файлы, которые нужно добавить.
'--update' действует так же, как '--append', но не добавляет файл в архив, если там уже есть файл с таким именем, имеющий то же время модификации.
И '--update', и '--append' существуют для добавления файлов в архив. Когда вы извлекаете файл из архива, только версия, сохраненная последней, попадает в систему файлов. Т.к. '--extract' извлекает файлы из архива последовательно и записывает их под теми же именами в систему файлов, то если имя файла возникает более чем однажды в архиве, более поздняя версия этого файла записывается на более раннюю, которая уже была извлечена. Вы можете избежать хранения старых версий файла в архиве.
Заметьте: '--update' не приспособлена для выполнения резервного копирования, потому что она не изменяет содержимое каталога, и потому, что каждый раз при ее использовании удлиняется архив.
Опция '--update' модифицирует архив tar c помощью сравнения данных заданных членов архива с данными файлов под теми же именами. Если файл был модифицирован позже, чем член архива, то последний уничтожается (как с помощью '--delete') и затем файл добавляется в архив (как с помощью '--append'). На тех носителях, где не может выполняться опция '--delete' (таких как магнитная лента), опция '--update' тоже ошибочна.
Если не названы члены архива (ни на командной строке, ни с помощью '--files-from=файл_по_имени' ('-T файл_по_имени')), то процесс охватывает весь архив.
Опция '--concatenate' ('-A', '--catenate') заставляет tar добавлять содержимое нескольких архивов к существующему архиву.
Назовите архивы для конкатенации на командной строке. (Ничего не случится, если вы не станете их называть). Члены и их имена скопируются из этих архивов дословно. Если появится много членов с одинаковыми именами, ни один из них не уничтожится. Для того, чтобы узнать, как это происходит,
Вы должны использовать эту опцию для конкатенации архивов. Если вы комбинируете их с помощью cat, результатом может быть архив недоступного tar формата.
Эту операцию, к сожалению, нельзя выполнять на некоторых ленточных устройствах, из-за недостаточного формата, используемого ими.
Для того, чтобы добавить копии архива или архивы к концу другого архива, используйте '--concatenate' ('-A'). Архив-источник и выходной архив должны уже существовать и быть созданными с подходящими параметрами формата.
tar остановит чтение архива, если он встретит маркер конца архива. Утилита cat не уничтожает маркеры конца архива и, таким образом, она не подходит для конкатенации архивов. '--concatenate' ('-A') удаляет маркер конца архива из выходного архива перед добавлением каждого нового архива.
Вы должны задать архивы-источники с помощью '--file=имя_архива' ('-f имя_архива').
Если вы не задаете выходной архив, tar использует значение переменной среды TAPE, или, если она не задана, имя архива для умолчания.
В следующем примере содержимое архива 'hail/hail/fredonia' добавляется к архиву 'stooges' (оба были созданы ранее):
tar --catenate --file=stooges hail/hail/fredonia
Если вам нужно достать файлы из архива, который был добавлен с
помощью утилиты cat, используйте опцию '--ignore-zeros' ('-i').
Вы можете использовать опцию '--delete' для удаления из архива его членов. Назовите на командной строке имена членов, которые нужно удалить. Эта опция переписывает архив, поэтому она не работает на ленточных устройствах. Если вы не задали список членов, подлежащих удалению, ничего не происходит.
Чтобы удалить члены архива из архива, используйте '--delete'. Вы можете задать имена файлов или членов для удаления. Все члены архива с заданными именами будут удалены из архива.
В нижеприведенном примере файл 'curley' удаляется из архива 'stooges':
tar --delete --file=stooges curley
Вы можете использовать '--delete' для архива, только если архивное
устройство позволяет вам осуществлять запись в любое место носителя.
Предостережение: Не пытайтесь удалить член архива с магнитной ленты, чтобы не зашифровать архив. Это способ (не считая полного переписывания архива) не подходит для удаления файлов с большинства видов магнитных лент.
ошибку, если архивное устройство или в необычном файле, или другой ввод и вывод (-file=).
Опция '--list' ('-t') выводит список имен членов архива. Назовите имена членов, которые нужно занести в список, на командной строке (чтобы модифицировать способ интерпретации этих имен).
Если вы не называете имена членов, '--list' выведет список всех членов архива.
Чтобы увидеть больше чем только имена членов, используйте опцию '--verbose', чтобы заставить tar напечатать список, как при использовании 'ls -l'.
'--list' выводит список имен членов архива на стандартный вывод. Если вы задаете на командной строке аргументы имени файла (или используете опцию '--files-from=файлы_с_именами',
только файлы, которые вы задаете, будут занесены в список (если они существуют в архиве). Незаданные файлы игнорируются, даже если они находятся в заданном каталоге.
Если вы включаете опцию '--verbose', tar печатает список архива, как при 'ls -l'.
Если блочный фактор архива отличается от соответствующего умолчанию, tar сообщает об этом.
В очередном примере выводится список членов архива 'stooges':
tar --list
--file=stooges
tar отвечает:
larry
moe
shemp
marx/julius
marx/alexander
marx/karl
В следующем примере генерируется список членов архивного файла 'dwarves',
имеющего блочный фактор два:
tar --list -v --file=blocks
tar отвечает:
tar: Blocksize = 2 records
-rw------- ringo/user 42 May 1 13:29 1990 .bashful
-rw-rw-rw- ringo/user 42 Oct 4 13:29 1990 doc
-rw-rw-rw- ringo/user 42 Jul 20 18:01 1969 dopey
-rw-rw-rw- ringo/user 42 Nov 26 13:42 1963 grumpy
-rw-rw-rw- ringo/user 42 May 5 13:29 1990 happy
-rw-rw-rw- ringo/user 42 May 1 12:00 1868 sleepy
-rw-rw-rw- ringo/user 42 Jul 4 17:29 1776 sneezy
Используйте '--extract' или '--get' для извлечения из архива его членов. Для каждого названного члена (или для всего архива, если не названы члены) на командной строке - или с помощью 'files-from=файлы_с_именами' - создается файл с содержимым члена архива. Имя файла то же, что и имя члена.
Некоторые опции заставляют tar извлекать больше, чем только содержимое файла - имя хозяина, дату модификации и т.д.
Опции '--same-permissions' или '--preserve-permissions' заставляют новый файл иметь те же возможности, что имел изначальный файл, когда -находился в архиве. Без этих опций для этого используется текущий umask.
При извлечении tar обычно присваивает времени модификации значение, записанное в архиве. Это позволяет сделать опция '--modification-time' ('-m').
Чтобы считать члены архива и записать их в систему файлов, используйте '--extract'. Сам архив остается неизмененным.
Если вы не задали файлы, подлежащие извлечению, tar извлечет все файлы архива. Если вы задали имя каталога как аргумент имени файла, tar извлечет все файлы, хранящиеся как часть этого каталога. Если файл был сохранен с именем каталога, являющимся частью имени файла, tar создаст каталог.
В следующем примере показано извлечение архива 'stooges' в пустой каталог:
tar --extract --file=stooges
Генерация списка каталога ('ls') дает:
larry
moe
shemp
marx
Подкаталог 'marx' содержит файлы 'julius', 'alexander' и 'karl'.
Если вы хотите только извлечь файлы в подкаталог 'marx', вы можете задать этот каталог как аргумент имени файла в сочетании с операцией '--extract':
tar --extract --file=stooges marx
Предостережение: При извлечении файлов на их место может что-нибудь
записаться. Чтобы избежать потери файлов системы файлов при их
извлечении из архива, используйте опцию '--keep-ol-files' ('-k').
Если архив был создан с помощью '--block-size=512-размер' ('-b 512-размер), '--compress' ('-Z') или '--multi-voloume' ('-M'), вы должны задать эти опции опять при извлечении файлов из архива.
Обычно tar требует данных в полных блоках из устройства хранения архива. Если устройство не может возвращать полный блок, tar сообщает об ошибке. Однако некоторые устройства не всегда возвращают полные блоки или не требуют, чтобы последний блок архива ложился к границе следующего блока. Чтобы продолжать читать до тех пор, пока вы не получите полный блок, или принять неполный блок, если он содержит маркер конца архива, задайте опцию '--read-full-blocks' ('-B') в сочетании с операциями '--extract' или '--list'.
Опция '--read-full-blocks включается по умолчанию, когда tar читает архивы со стандартного ввода или с удаленной машины. Это из-за системы BSD Unix. Если эта опция не включена, tar столкнется с ошибкой при чтении неполного блока из канала.
Если вы не уверены в блокирующем факторе архива, вы можете прочитать архив с помощью задания '--read-full-blocks' и '--block-size=512-размер', используя блочный фактор больше, чем использует архив. Это позволит вам избежать определения блочного фактора архива.
Используется в сочетании с '--extract' для чтения архива, содержащего неполные блоки или имеющего блочный фактор меньше, чем заданный.
Опция '--ignore-zeros' выключает реакцию на умолчание, потому что во многих версих tar после конца архива печатается ненужная информация, из-за чего какая-то часть носителя никогда не будет прочитана. В GNU tar в конце архива не пишется ничего, но между архивирующими утилитами нужна согласованность.
Для игнорирования блоков нулей, с которыми можно столкнуться при чтении архива. используется в сочетании с '--extract' или '--list'.
Вы можете создать файл, содержащий упорядоченный список файлов архива с помощью 'tar --list --file=имя_архива'.
Эта опция в современных компьютерных системах, наверно, не нужна.
Для составления длинных списков имен на машинах с небольшим количеством памяти. Используется в сочетании с '--compare', '--list' или '--extract'.
Обычно tar записывает извлеченные файлы в систему файлов безотносительно к тому, существуют ли они уже в системе файлов: файлы с теми же именами, что уже имеющиеся, записываются на них. Чтобы предотвратить извлечение tar из архива его членов при перезаписывании файлов в систему файлов, используйте '--keep-old-files' в сочетании с '--extract'. Когда задана эта опция, tar сообщает об ошибке, констатирующей конфликт имен файлов вместо записи файлов из архива.
Предотвращает записывание новых файлов на старые в системе файлов во время извлечения файлов.
Чтобы установить время модификации равным времени извлечения файлов, используйте опцию '--modification-time' ('-m') в сочетании с '--extract'.
Устанавливает время модификации извлеченных членов архива равным времени извлечения файлов, а не времени, записанному для них в архиве. Используется в сочетании с '--extract'.
Устанавливает режимы извлечения файлов к тем, что записаны для них в архиве, вместо установления umask. Используется в сочетании с '--extract'.
Записывает файлы на стандартный вывод. Используется в сочетании с '--extrsct'.
Если предыдущая попытка извлечь файлы потерпела неудачу вследствие недостатка места на диске, вы можете использовать '--starting-file=имя' ('-K имя) для того, чтобвы начать извлечение только начиная с названного файла при извлечении файлов из архива. Это, разумеется, предполагает, что или сейчас здесь есть свободное место, или вы извлекаете файлы в другую систему файлов.
Начинает операцию в середине архива. Используется в сочетании с '--extract' или '--list'.
Опция '--compare' ('-d', '-diff') сравнивает содержимое заданных членов архива с файлами под теми же именами, и сообщает о различиях, которые находит. Если на командной строке или с помощью '--files-from=файлы_с_именами' члены не заданы, сравнение происходит для всех членов архива.
Некоторые параметры формата должны быть взяты в рассмотрение при модификации архива:
Уплотненные архивы не могут быть модифицированы.
Вы должны задать размер блока архива при модификации архива, не имеющего значения для умолчания.
Многотомные архивы можно модифицировать как все другие. Чтобы добавить файлы в многотомный архив, вы должны только установить последний том носителя архива (и новые тома, если нужно). Для всех остальных операций вы должны использовать целый архив.
Если многотомный архив был помечен с помощью '--label=метка_архива'
при его создании, tar не будет автоматически помечать тома, добавленные позже. Чтобы пометить последующие тома, опять задайте '--label=метка_архива' в сочетании с '--append', '--update' или '--concatenate'.