Введение
В этой главе представляются некоторые понятия, используемые в данном
руководстве, такие как "архив", "член", "имя", "распаковать" и др., а
также рассказывается, кто написал GNU tar и документацию к нему, и
объясняется, как послать сообщение об ошибке или комментарий.
1.1. Что делает tar.
Программа tar используется для создания tar-архивов и
манипулирования ими. Архив - это файл, заключающий в себе содержимое
многих файлов. Кроме того, архив идентифицирует имена файлов, их
хозяев и т.д. (в архивах также записываются разрешение доступа,
пользователь и группа, размер в байтах и время последней модификации.
В некотрых архивах еще указываются имена файлов в каждом
заархивированном каталоге и информация о каталогах).
Файлы, соодержащиеся в архиве, называются членами aрхива. В данном
руководстве мы используем термин "файл" только для файлов, доступных
обычным способом (с помoщью ls, cat и т.д.), и термин "члены архива"
для обозначения членов архива. Аналогично, "имя файла" - для имен
файлов в системе файлов, а "имя члена архива" - для имени члена архива
внутри архива.
Изначально tar-архивы использвались для компактнго хранения файлов на
магнитной ленте - отсюда термин tar (tape archiver). Вне зависимости
от имени утилиты tar может направлять свой вывод на любое доступное
устройство, а текже хранить ее в файле или направлять в другую
программу через канал. tar также может иметь дооступ к удаленным
устройствам и файлам.
Есть много способов использования tar-архивов. Расскажем о некоторых
из них: хранении, резервном копировании и транспортировке.
- 7 -
Хранение.
Часто tar-архивы используются для переноса файлов по сети. Например,
проект GNU размещает свое программное обеспечение в tar-архивах так,
что все файлы, относящиеся к определенной программе (или ко множеству
программ) могут переноситься как единое целое.
Магнитная лента может сохранять последовательно несколько файлов, но
они при этом не имеют имен - только относительное положение на ленте.
tar-архив - один из способов сохранить несколько файлов на одной ленте
и запомнить их имена. Даже когда основной переносной механизм может
содержать дорожку имен, как FTP, неудобство поддерживания множества
файлов, каталогов указателей делает tar-архивирование привлекательным
методом.
Заархивированные файлы также используются для долгосрочного хранения.
Резервное копирование.
Поскольку архивы, созданные tar, могут сохранять инфоормацию файла и
структуру каталога, tar обычно используется для выполнения полного и
пошагового резервного копирования диска, складывания вместе пучка
файлов, возможно, относящихся к разным пользователям и проектам, во
избежание случайного разрушения этих дисков.
1.2. Авторы GNU tar
GNU tar первоначально был написан Джоном Гилмором и впоследствии
много раз модифицирован. Усовершенствования GNU были написаны Джеем
Фенальсоном, и весь пакет был впоследствии поддержан Майклом
Бушнеллом, а затем Франсуа Пинардом, с помощью многочисленных
пользователей. Хотелось бы подчеркнуть, что tar создан в процессе
коллективной работы и многим обязан тем людям, которые сообщали о
проблемах, предлагали решения и делились своими мыслями и
соображениями.
Джей Фенальсон набросал эскиз руководства по GNU tar, позаимствовав
- 8 -
кое-что у Джона Гилмора, этот эскиз распространен в версиях начиная с
1.04 (или более ранней) до 1.10, и потом использован в версии 1.11.
Майкл Бушнелл и Эми Горин работали над руководством по GNU tar. Для
версии 1.11.8 Франсуа Пинард создал новое руководство, слив воедино
информацию из разных источников.
1.3. Сообщения об ошибках или предложения
Пожалуйста, сообщите обо всех ошибках, замеченных вами в этой
программе, по адресу bug-gnu-utils$prep.ai.mit.edu. Вы можете также
написать непосредственно и менее официально по адресу
pinard@iro.umontreal.ca. Существует ряд основных версий tar, очень
много их накопилось в последние годы. Вы можете ожидать быстрого
Введение в ТAR
Эта глава проведет вас по основным примерам операций tar. Если выуже знаете, как использовать какие-нибудь другие версии tar, вам,
видимо, нет необходимости ее читать. В этой главе опускаются сложные
подробности многих методов работы tar. Для получения более полной
информации см. дальнейшие главы.
Перед тем, как перейти к этой главе, убедитесь, что вы уже понимаете
и отчетливо представляете, что такое "архив" и "член архива".
FIXME: xref What tar does
B примерах операций tar строкам, которые вы должны напечатать,
предшествует '%' - это обычное приглашение оболочки. В примерах и в
обсуждении в тексте мы используем мнемонические формы операций и
опций, но краткие их формы дают тот же результат.
Большая часть опций tar дана и в краткой, и в длинной формах. Опции,
описываемые во введении, (за исключением '--delete', которая не имеет
сокращенной формы) имеют следующие аббревиатуры:
'--create' '-c'
'--list' '-t'
'--extract' '-x'
'--append' '-r'
'--verbose' '-v'
'--file=имя_архива' '-f имя архива'
Эти опции облегчают набор длинных команд. Например, вместо того,
чтобы набирать
- 10 -
tar --create --file=/tmp/afiles.tar --verbose apple agnst asparagus
можно набрать
tar -c -f /tmp/afiles.tar -v apple angst asparagus
Для более подробной информации по синтаксису опций
FIXME: ref Invoking tar
Когда мы упоминаем какую-нибудь мнемоническую опцию в тексте, мы
также иногда даем соответствующую краткую опцию в скобках.
2.1. Как создавать архивы *
Чтобы создать архив, используйте опцию '--create' ('-c'). Вы можете
использовать опции для задания имени и формата архива (и других
характеристик) и использовать аргументы имени файла для обозначения,
какие файлы и каталоги должны быть занесены в архив.
FIXME: ref Creating
для получения более подробной информации об операции '--create' (-c).
Для создания нового архива используйте опцию '--create' (-c).
В
общем случае можно использовать опцию '--file=имя_архива' ('-f
имя_архива') для задания имени, которое будет иметь архив tar. Затем
задайте имена файлов, которые вы хотите поместить в новый архив.
Например, чтобы занести файлы 'apple', 'angst' и 'asparagus' в архив
по имени 'afiles.tar', используйте следующую команду:
tar --create --file=afiles.tar apple angst asparagus
При использовании мнемонических опций порядок аргументов не важен.
- 11 -
Вы можете также набрать:
tar apple --create angst --file=afiles.tar asparagus
Однако этот порядок труднее для восприятия. В данном руководстве мы
даем список аргументов в причинно-следственном порядке, чтобы сделать
команды более легкими для понимания, но вы можете набирать их в том
порядке, который вам нравится.
Если вы не задали имена файлов для занесения в архив, то tar создаст
пустой архив. Нижеследующие команды создают архивы, в которых ничего
нет:
tar --create --file=empty-archive.tar
Где бы вы не использовали '--create' ('-c'), tar уничтожает текущее
содержимое файла c помощью '--file=имя_архива' ('-f имя_архива'), если
он существует. Чтобы добавить файлы в существующий архив, вы должны
использовать другую опцию.
FIXME: xref Adding to Archives
для получения информации, как это сделать.
Когда архив создается с помощью '--create' ('-c'), имена членов
архива такие же, как имена файлов, которые вы набрали в команде tar.
Таким образом имена членов 'afiles' (как созданные в первом примере,
приведенном ранее) - 'apple', 'angst' и 'asparagus'. Однако
предположим, что архив был создан с помощью следующей команды:
tar --create --file=bfiles.tar./ballons baboon ./bodacious
Тогда файлы 'ballons', 'baboon' и 'bodacious' будут помещены в архив
(потому что './' - синоним текущего каталога), но их имена как членов
архива будут './ballons', 'baboon' и './bodacious'.
- 12 -
Если вы хотите увидеть, как tar заносит файлы в архив, вы можете
использовать опцию '--verbose' ('-v').
Если один из файлов, названный с помощью '--create' ('-c') -
каталог, то операция tar более сложна.
FIXME: xref Tar and Directories,
FIXME: последний раздел данного введения
для получения более подробной информации.
Если вы не задали опцию '--file=имя_архива' ('-f имя_архива'), то
tar будет использовать что-то по умолчанию. Обычно это некоторое
физическое ленточное устройство, подключенное к вашей машине. Если не
существует подключенного ленточного устройства, или реакция на
умолчание не определена, tar выдаст сообщение об ошибке. Это сообщение
об ошибке выглядит приблизительно следующим образом:
tar: can't open /dev/rmt8 : No such device on address
tar: can't open /dev/rsmt0 :I/O error
Если вы получили подобную ошибку при ссылке на не заданный вами файл
('/dev/rmt8' или '/dev/rsmt0' в вышеприведенном примере), то tar
использует значение по умолчанию для '--file=имя_архива' ('-f
имя_архива'). Но предпочтительнее задать аргумент '--file=имя_архива'
('-f имя_архива), где бы вы не использовали tar, чем полагаться на
значение по умолчанию.
Чтобы создать новый архив, используйте опцию '--create' ('-c'). Вы
можете также задать имя и формат архива (и другие характеристики), и
можете использовать аргументы имени файла для задания файлов, которые
нужно занести в архив. Если вы не хотите использовать опции или
аргументы имени файла, tar будет использовать значение для умолчания.
FIXME: xref Creating Example
для более подробной информации об опции '--create' ('-c').
- 13 -
2.1.1. Создание архивов файлов *
Нижеследующий пример покажет вам, как создать архивный файл, если
ваш рабочий каталог содержит еще и другие файлы. В этом примере
используются три файла под названиями 'blues', 'folk' и 'jazz'.
Архивный файл называется 'records'. Кроме того, что архив в данном
примере записывается в систему файлов, его можно записать на магнитную
ленту. (Если вы хотите проследить этот и следующие примеры, создайте
подкаталог, содержащий файлы с этими именами. Чтобы создать каталог,
наберите 'mkdir practice' в качестве приглашения для системы.
Вы
можете создать файлы при помощи текстового редактора, например emacs).
Если вы хотите заархивировать каталог, содержащий файлы, перечислите
содержимое каталога.
Наберите:
% cd practice
% ls
Система отвечает:
blues folk jazz
%
Это для того, чтобы проверить, что файлы, подлежащие архивации,
действительно существуют в рабочем каталоге, и чтобы проверить, что
имя архива, которое вы выбрали, еще не использовано. Если бы
оказалось, что оно уже использовано, tar бы записал новый архив на
место старого, и содержание последнего бы уничтожилось.
Затем:
* Cоздайте новый архив с помощью опции '--create' ('-c').
* Явно задайте имя файла создаваемого архива - '--file=имя_архива'
('-f имя_архива'). Если вы не хотите использовать эту опцию, tar
- 14 -
запишет архив в специальное устройство для хранения, которое варьирует
в зависимости от системы.
* Задайте файлы, которые нужно занести в архив. Если вы не задали
никаких аргументов имени файла, tar занесет все в рабочий каталог.
Наберите:
% tar --create --file=records blues folk jazz
Если вы сейчас перечислите содержание рабочего каталога ('ls'), вы
найдете архивный файл, записанный так же, как и файлы, которые вы
видели раньше.
% ls
blues folk jazz records
%
Этот пример показывает, как создавать архивный файл в рабочем
каталоге, содержащем еще и другие файлы. Три файла, которые вы
архивируете в данном примере, называются 'blues', 'folk' и 'jazz'.
Архивный файл называется 'records'. Т.к. архив в примере записан в
систему файлов, его можно записать на любое другое устройство.
(Если вы хотите проследить этот и другие примеры, создайте каталог
по имени 'practice', содержащий файлы 'blues', 'folk' и 'jazz'. Чтобы
создать каталог, наберите 'mkdir practice' в качестве приглашения
системе. Вероятно, легче всего создать архив при помощи текстового
редактора, например Emacs.)
Прежде всего перейдите к каталогу, содержащему файлы, которые вы
хотите заархивировать:
% cd practice
Теперь '~/practice' - ваш рабочий каталог.
Теперь проверьте, что файлы, подлежащие архивации, действительно
- 15 -
существуют в рабочем каталоге, и убедитесь, что в рабочем каталоге нет
файла с тем именем архива, которое вы хотите использовать:
Чтобы получить список имен файлов рабочего каталога, наберите:
% ls
Cистема отвечает:
blues folk jazz
%
Затем:
* Создайте новый архив с помощью опции '--create' ('-c').
* Явно задайте имя файла создаваемого архива - '--file=имя_архива'
('-f имя_архива'). Если вы не хотите использовать опции, tar запишет
архив на специальное устройство для хранения, которое варьирует в
разных системах.
FIXME: этот синтаксис можно изменить. Проверьте перед тем, как
набирать.
tar интерпретирует имена файлов архива относительно рабочего
каталога. Перед использованием tar убедитесь, что у вас есть доступ
к рабочему каталогу.
* Задайте файлы, которые нкжно занести в архив. (tar интерпретирует
имена файлов относительно рабочего каталога). Если вы не хотите
использовать аргументы имени, tar заархивирует все в рабочий каталог.
Наберите:
% tar --create --file=records blues folk jazz
Если вы теперь перечислите содержание рабочего каталога, вы найдете
файл архива, записанный так же, как файлы, которые вы видели раньше.
% ls
- 16 -
blues folk jazz records
%
2.1.2. Использование tar в словесном режиме *
Когда имена файлов или членов задают каталоги, оперирование tar
более сложно. Обычно, когда назван каталог, tar также рекурсивно
оперирует со всем его содержанием. Таким образом, для tar имя файла
'/' называет целую систему файлов.
Чтобы заархивировать все содержимое каталога, используйте '--create'
('-c') или '--append' ('-r') и задайте имя каталога. Например, чтобы
заархивировать содержимое текущего каталога, нужно использовать 'tar
--create --file=имя_архива.'. При этом вы получите имена членов
архива, начинающиеся с '/'. Для того, чтобы заархивировать содержимое
каталога с именем 'foodir', используется 'tar --create
--file=имя_архива foodir'. В этом случае все имена членов будут
начинаться с 'foodir/'.
Если вы даете tar команду типа 'tar --create --file=foo.tar.', то
вам будет сообщено: 'tar: foo.tar is the archive; not dumped'. Это
случилось потому, что архив 'foo.tar' был создан перед тем, как туда
были занесены файлы. Затем, когда tar пытается занести все файлы в
архив, он замечает, что файл 'foo.tar' - то же, что архив, и
пропускает его. (Нет смысла вкладывать архив в себя.) GNU tar в этом
случае будет продолжать и и создаст архив как обычно, за исключением
одного этого файла. Однако другие версии tar не такие "умные" и, когда
такое случается, начинают бесконечный цикл. Таким образом, нужно
убедиться, что в каталог не входит архив.
При извлечении файлов нужно также назвать на командной строке члены
архива каталога. tar несовершенен в интерпретации имен членов. Команда
'tar --extract --file=имя_архива.' извлекает не все содержимое из
архива, а только тех членов, чьи имена начинаются с '/'.
2.1.4. Создание архива из верхнего каталога *
- 17 -
Вы можете заархивировать каталог с помощью задания его имени в
качестве аргумента имени файла. Файлы каталога будут заархивированы
относительно рабочего каталога, и все содержимое каталога будет
создано заново, когда архив будет извлечен.
Чтобы заархивировать каталог, в первую очередь нужно переместиться
на его верхний каталог. Если вы следуете введению, вы должны набрать:
% сd ..
%
В верхнем каталоге вы можете задать подкаталог как аргумент имени
файла. Для того, чтобы сохранить каталог 'practice' в файле 'music'
архива, наберите:
% tar --create --verbose --file=music practice
tar выведет:
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Заметьте, что архив таким образом создается не в подкаталоге
'practice', а в рабочем каталоге - в том, из которого был вызван tar.
Перед тем, как пытаться заархивировать каталог с верхнего каталога, вы
должны убедиться, что у вас есть доступ не только к каталогу, который
вы пытаетесь заархивировать с помощью tar, но и к рабочему каталогу.
Попытка сохранить ваш домашний каталог в архиве с помощью вызова tar
из корневого каталога, вероятно, не удастся.
FIXME: xref absolute-names
(Заметьте также, что 'records', начальный файл архива, сам
заархивирован. tar воспринимает любой файл, независимо от его
- 18 -
содержания, как файл для архивации. Когда извлекается 'music', файл
'records' архива будет записан заново в систему файлов).
Вы можете сохранить каталог в архиве, используя имя каталога как
аргумент имени файла tar. Когда вы задаете файл каталога, tar
архивирует его и все файлы, которые этот каталог содержит. Имена
каталога и файлы, которые он содержит, хранятся в архиве, относящемся
к текущему рабочему каталогу: когда каталог извлечен, они записываются
в систему файлов, соответствующую рабочему на этот момент каталогу.
FIXME: add an ref to -absolute-names
Чтобы заархивировать каталог, в первую очередь переместитесь на его
верхний каталог. Если вы следуете введению, наберите:
% cd ..
%
В верхнем каталоге задайте подкаталог, используя аргумент имени
файла. Чтобы сохранить файл '~/practice' каталога в файле 'music'
архива, наберите:
% tar --create --verbose --file=music practice
tar ответит:
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Заметьте, что '~/practice/records', другой файл архива, сам
заархивирован. tar воспринимает любой файл, даже файл архива, как
подлежащий архивации.
FIXME: cимвольные указатели и измененные каталоги находятся не во
введении, а в основной части.
- 19 -
2.1.5. Сравнение файлов архива с файлами системы файлов *
Несмотря на то, что операция '--list' ('-t'), заданная c помощью
опции '--verbose' ('-v'), используется при сравнении файлов в текущем
архиве с файлами системы файлов (что позволяет пользователю сравнивать
размер и даты модификации), проще заставить сам tar cравнивать
атрибуты файлов и сообщать о различиях между файлами. Чтобы это
сделать, используйте операцию '--compare' ('-d') или '--diff'.
Операция '--compare' ('-d'), как показывает ее название, заставляет
tar сравнивать файлы и каталоги в архиве с помощью противоположных
частей (файлов с тем же именем) в системе, и возвращать различия в
размере файлов, режиме, датах создания и модификации. При выполнении
операции '--compare' tar имеет дело только с файлами архива, игнорируя
файлы активной системы файлов, если они не существуют в архиве. Если
tar дается имя файла, не существующего в архиве, он выдает сообщение
об ошибке.
Чтобы сравнить файлы в каталоге с их противоположными частями в
файле 'records' архива в том же каталоге, вы должны, находясь в
каталоге 'practice':
* Вызвать tar и задать операцию сравнения файлов в архиве с
противоположными частями в системе файлов - '--compare' или '--diff'.
* Задать имя архива, где хранятся файлы, подлежащие сравнению -
'--file=имя_архива'('-f имя_архива').
* Задать имена файлов или каталогов, подлежащих сравнению, как
аргументы имени файла (в этом случае вы сравниваете все файлы в
архиве, и ничего не нужно задавать).
% tar --compare --file=records
%
Несмотря на то, что кажется, будто ничего не происходит, фактически
- 20 -
tar производит сравнение и не находит, что сказать. Тот же пример с
помощью опции '--verbose' выдаст список файлов архива в том порядке,
каком они сравниваются с противоположными частями с теми же именами:
% tar --compare --verbose --file=records
blues
blues: mod time differs
blues: size differs
folk
jazz
jazz; does not exist
%
Вы опять не заметите, что хотя '--compare' заставляет tar сообщать о
файлах, не существующих в системе файлов, tar игнорирует файлы
активной системы файлов, не существующие в архиве. Чтобы это
продемонстрировать, создадим файл в каталоге 'practice' по имени
'rock' (используя текстовый редактор). Если вы вызовете список
каталога, то увидите, что там появился новый файл.
% ls
blues folk records rock
Если вы опять выполняете '--compare', вы получаете следующее:
% tar --compare --verbose --file=records
blues
blues: mod time differs
blues: size differs
folk
jazz
jazz: does not exist
%
tar игнорирует файл 'rock', потому что он сравнивает файлы архива с
файлами системы файлов, а не наоборот. Если 'rock' проходит как
аргумент имени файла, tar возвращает сообщение об ошибке:
- 21 -
% tar --compare --verbose --file-records rock
tar: rock not found in archive
%
Чтобы сравнить атрибуты членов архива с атрибутами других
противоположных частей в системе файлов, используется операция
'--compare' ('-d') или 'diff'. Хотя вы можете использовать '--list
--verbose' ('-tv') для сравнения вручную некоторых атрибутов файлов,
проще заставить сам tar сравнивать атрибуты файлов и сообщать о
различиях в них.
FIXME: вручную?
Операция '--compare', как видно из ее имени, сравнивает члены архива
с файлами под теми же именами в системе файлов, и сообщает о различиях
в размере, режиме, датах создания и модификации. 'tar + compare' имеет
дело только с членами архива: он игнорирует файлы системы файлов, не
хранящиеся в архиве. Если вы с '--compare' даете ('-d') аргумент
имени, который не соответствует имени члена архива, tar отвечает
сообщением об ошибке.
Чтобы сравнить члены архива в файле 'records' архива с файлами в
каталоге '~/practice', в первую очередь нужно перейти к каталогу
'practice'. Затем:
* Вызвать tar и задать операцию '--compare' ('-d') - '--compare'
('-d') или '--diff'.
* Задать архив, где хранятся файлы, подлежащие сравнению
-'--file=имя_архива' ('-f имя_архива').
* Задать члены архива для сравнения. (В данном примере вы сравниваете
все члены архива между собой, и вам не нужно использовать никаких
аргументов имен файлов).
% tar --compare --file=кусщквы
%
- 22 -
Хотя кажется, чтол ничего не произошло, tar на самом деле производит
сравнение и не находит, что сообщить.
Используйте опцию '--verbose' для того, чтобы получить список имен
членов архива, сравниваемых с противоположными частями с теми же
именами в системе файлов:
% tar --compare --verbose --file=records
blues
folk
jazz
%
Если tar нашел, что сообщить, он это сделает, как только сравнит
все файлы.
Если вы удаляете файл 'jazz' из системы файлов ('rm jazz') и
модифицируете файл 'blues' (например, добавлением текста с помощью
редактора типа Emacs), верхний пример будет выглядеть следующим
образом:
% tar --compare --verbose --file=records
blues
blues: mod time differs
blues: size differs
folk
jazz
jazz; does not exist
%
Заметим опять, что в то время как '--compare' докладывает об именах
членов архива, не имеющих противоположных частей в системе, он
игнорирует файлы системы, не имеющие противоположных частей в архиве.
Чтобы это продемонстрировать, создададим файл в каталоге 'practice' по
имени 'rock' (используя любой текстовый редактор). Новый файл
появляется, когда вы смотрите содержимое каталога:
FIXME: нужно привести пример.
- 23 -
2.1.6. Использование сравнения начиная с верхнего каталога *
Кроме использования '--compare' для сравнения отдельных файлой
архива с их противоположными частями в системе файлов, эту опцию можно
использовать для сравнения заархивированных каталогов с их
противоположными частями в действующей системе файлов. Вы можете
создать заново верхний пример, используя ваш домашний каталог и файл
'music' (в котором хранится каталог 'practice') вместо архивного файла
'records'.
В первую очередь перейдите к домашнему каталогу ('cd..'). Затем
постарайтесь проделать то же, что в предыдущем примере, используя
'music' в качестве заданного архивного файла, а каталог 'practice' как
аргумент имени файла.
% tar --compare --verbose --file=music practice
practice
practice/blues
practice/blues: mod time differs
practice/blues: size differs
practice/folk
practice/jazz
practice/jazz: does not exist
practice/records
Кроме использования '--compare' ('-d') для сравнения текстовых
файлов, вы можете его использовать для сравнения каталогов. Чтобы это
проиллюстрировать, нужно переделать вышеприведенные примеры, используя
ваш домашний каталог в качестве рабочего каталога, и используя
архивный файл '~/music' вместо архивного файла '~/practice/records'.
В первую очередь перейдите к вашему домашнему каталогу ('cd~').
Затем попытайтесь использовать в вышеприведенном примере 'music' в
качестве заданного архивного файла, а 'practice' - в качестве
аргумента имени файла.
- 24 -
% tar --compare --verbose --file=music practice
Если вы следовали этой инструкции, tar ответит:
practice
practice/blues
practice/blues: mod time differs
practice/blues: size differs
practice/folk
practice/jazz
practice/jazz: does not exist
practice/records
2.2. Как составлять список архивов *
Используйте '--list' для выведения имен членов, хранящихся в архиве.
Опцию '--file=имя_архива' используйте так же, как c '--create' ('-c')
для задания имени архива. Например, содержимое архива 'afiles.tar',
созданного в прошлом разделе, можно проверить с помощью команды 'tar
--list --file-afiles.tar'. tar выдаст:
apple
angst
asparagus
Список архива 'bfiles.tar' будет таким:
./baloons
baboon
./bodacious
(Разумеется, 'tar --list --file-afiles.tar' не вызовет никакого
вывода).
Если вы используете опцию '--verbose' ('-v') с помощью '--list'
('-t'), tar выдаст список, напоминающий список при использовании 'ls
-l' и содержащий имя хозяина, размер файла и т.д.
- 25 -
Вы можете также задать имена членов, используя '--list' ('-t'). В
этом случае tar выдаст список только тех имен членов, которые вы
идентифицировали. Например, 'tar --list --file-afiles.tar apple'
выдаст только 'apple'. Это очевидно, когда заданные в качестве имен
членов имена в точности являются именами членов. Например, 'tar --list
--file=bfiles baloons' ничего не выдаст, потому то нет члена по имени
'baloons', а только './baloons'. Хотя 'baloons' и './baloons' - имена
одного и того же файла, при простейшем сравнении, для которого
необходим точный набор, имена членов различаются.
2.2.1. Список содержимого архива *
Вы можете можете получить список только что созданного архива с
помощью другой опции tar: '--list' ('-t').
Чтобы получить список
содержимого архива, наберите:
% tar --list --file=records
tar ответит:
blues folk jazz
FIXME: xref Listing Archive Contents, Listing Contents
для получения более подробной информации об операции '--list' ('-t').
FIXME:
Вы можете использовать '--list' для вывода списка файлов архива.
Если вы используете аргументы имени файла в этой операции, tar ищет
заданные файлы в архиве и высвечивает их имена, только если они
действительно там хранятся. Bы можете использовать '--list'('-t') с
опцией '--verbose' ('-v'), чтобы узнать атрибуты (имя хозяина, размер
и т. д.) хранимого файла.
Вы можете получить список содержимого архива и с помощью другой
- 26 -
операции tar: '--list' ('-t'). Чтобы получить список только что
созданного архива, наберите:
% tar --list --file=records
tar ответит:
blues folk jazz
FIXME: xref Listing Archive Contents, Listing Contents
для получения более подробной информации об операции '--list' ('-t').
В предыдущем примере вы создавали архив 'music' в домашнем каталоге.
Чтобы получить список 'music':
* Перечислите содержимое архива с помощью '--list' ('-t') tar.
* задайте имя архива, список которого нужно получить:
'--file=имя-архива' ('-f имя_архива').
Таким образом:
% tar --list --file=music
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Используйте '--list' ('-t') для выдачи имен файлов, хранящихся в
архиве. Если вы используете аргументы имени файла в этой операции, tar
выдаст имена заданных файлов, если они хранятся в архиве. Если вы
используете имя каталога как аргумент имени файла, tar выдает также
имена всех нижележащих файлов, включая подкаталоги. Если вы не
используете аргументы имени файла, tar выдает имена всех членов архива.
Вы можете использовать '--list' c '--verbose' для вывода атрибутов
- 27 -
членов архива (имени хозяина, размера и т.д.).
Чтобы получить список имен файлов, хранящихся в архиве, используйте
операцию '--list' ('-t') tar.
В предыдущем примере вы создали архив '~/music'.
Чтобы получить
список его содержимого, находясь в вашем домашнем каталоге:
* Перечислите содержание архива с помощью '--list'.
* Задайте архив, список которого нужно получить: '--file=имя_архива'.
Таким образом:
% tar --list --file=music
practice/
practice/blues
practice/folk
practice/jazz
practice/records
2.2.2. Получение дополнительной информации о файле *
Когда вы задаете опцию '--verbose' ('-v') вместе с '--list' ('-t'),
tar выдает дополнительную информацию о перечисляемых файлах (защита
файла, хозяин и идентификатор группы, размер, и дату и время
создания). Вышеприведенный пример в словесном режиме будет:
% tar --list --verbose --file=music
drwxrwxrwx myself/user 0 May 31 21:49 1990 practice/
-rw-rw-rw- myself/user 42 May 21 13:29 1990 practice/blues
-rw-rw-rw- myself/user 62 May 23 10:55 1990 practice/folk
-rw-rw-rw- myself/user 40 May 21 13:30 1990 practice/jazz
-rw-rw-rw- myself/user 10240 May 31 21:49 1990 practice/records
%
Заметьте, что '--verbose' с '--list' не заставляют tar выводить
- 28 -
имена файлов, а при использовании '--verbose' в сочетании со всеми
другими операциями этот эффект наблюдается.
Для получения более подробной информации, когда вы заносите в список
имена файлов, хранящихся в архиве, задайте опции '--verbose' и
'--list'.
tar напечатает защиту членов архива, имя хозяина, групповой
идентификатор, размер, дату и время создания.
Например:
% tar --list --verbose --file=music
drwxrwxrwx myself/user 0 May 31 21:49 1990 practice/
-rw-rw-rw- myself/user 42 May 21 13:29 1990 practice/blues
-rw-rw-rw- myself/user 62 May 23 10:55 1990 practice/folk
-rw-rw-rw- myself/user 40 May 21 13:30 1990 practice/jazz
-rw-rw-rw- myself/user 10240 May 31 21:49 1990 practice/records
%
Заметьте, что когда вы используете вместе '--verbose' и '--list',
tar не выдает имена файлов, а при использовании '--verbose' в
сочетании со всеми другими операциями этот эффект наблюдается.
2.2.3. Занесение заданного файла в архив *
Чтобы узнать, находится ли определенный файл в архиве, задайте имя
файла. Например, если вы хотите проверить, находится ли файл 'folk' в
архивном файле 'music', вы:
* Вызываете tar и задаете операцию для получения списка архива:
'--list' ('-t').
* Задаете имя архивного файла: '-file=имя_архива' ('-f имя_архива').
* Задаете имя, которое должен искать tar, как аргумент имени файла.
Т.к. tar сохраняет пути, имена файлов должны быть заданы так, как они
- 29 -
появляются в архиве (чтобы они соответствовали каталогу, из которого
был создан архив).
FIXME: xref-P
Наберите:
% tar --list --file=music practice/folk
tar ответит:
practice /folk
Если бы файла не было в архиве (как, например, файла
'practice/rock'), предыдущий пример выглядел бы следующим образом:
% tar --list --file=music practice/rock
tar: practice/rock не найден в архиве
Опция '--verbose' не оказывает никакого влияния на выполнение
операции '--list', если вы задали аргументы имени файла.
FIXME: это ошибка (?)
Чтобы узнать, содержится ли конкретный файл в архиве, используйте
имя файла. Например, чтобы проверить, содержится ли файл 'folk' в
архивном файле 'music', проделайте следующее:
* Вызовите tar и задайте операцию '--list'.
* Задайте архивный файл: '--file=имя_архива' ('-f имя_архива').
* Задайте файлы для поиска c помощью набора их имен как аргументов
имен файлов. Вы должны набирать имя файла, как только он появляется в
архиве (обычно это соответствует каталогу, из которого был создан
архив).
FIXME: xref absolute-names
- 30 -
Наберите:
% tar --list --file=music practice/folk
tar ответит:
practice/folk
Если бы файлы не хранились в архиве (как, например, файл
'practice/folk), вышеприведенный пример выглядел бы следующим образом:
% tar --list --file=music practice/rock
tar: practice/rock not found in archive
Ели бы вы использовали '--verbose' ('-v'), пример выглядел бы
следующим образом:
% tar --list --file=music practice/folk
-rw-rw-rw- myself/user 62 May 23 10:55 1990 practice/folk
2.2.4. Перечисление содержимого сохраненного каталога *
Чтобы получить информацию о содержимом заархивированного каталога,
используется имя каталога как аргумент имени файла в сочетании с
'--list'. Чтобы узнать атрибуты файлов, включите опцию '--verbose'.
Например, чтобы чтобы узнать о файла в каталоге 'practice' в
архивном файле 'music', наберите:
% tar --list --file=music practice
tar ответит:
drwxrwxrwx myself/user 0 May 31 21:49 1990 practice/
-rw-rw-rw- myself/user 42 May 21 13:29 1990 practice/blues
- 31 -
-rw-rw-rw- myself/user 62 May 23 10:55 1990 practice/folk
-rw-rw-rw- myself/user 40 May 21 13:30 1990 practice/jazz
-rw-rw-rw- myself/user 10240 May 31 21:49 1990 practice/records
Когда вы используете имя каталога как аргумент имени файла, tar
имеет дело со всеми файлами (включая файлы подкаталогов) этого
каталога.
2.3. Как извлекать из архива его члены *
Для того, чтобы извлечь члены из архива, используется опция
'--extract' ('-x'). Задайте имя архива с помощью '--file=имя_архива'
('-f имя_архива'). Чтобы извлечь члены заданного архива, задайте их
имена членов как аргументы. Естественно дать им их точные имена
членов, как введенные с помощью '--list' ('-t'). Это создаст копию
члена архива с тем же именем файла, что и его имя в архиве.
В примере с двумя архивами, созданными в начале этого введения, 'tar
--extract --file=afiles.tar apple' в текущем каталоге создастся файл
'apple' c содержимым архивного файла 'apple'. Любой уже существующий
файл с именем 'apple' уничтожится, но это не изменит архива.
Очень важно задавать точные имена членов. Команда 'tar --extract
--file=briles.tar baloons' будет ошибочна, т.к. нет члена с именем
'baloons'. Чтобы извлечь член с именем './baloons', вы должны набрать
'tar --extract --file=bfiles.tar ./baloons'. Чтобы узнать точные имена
членов архива, используйте '--list' ('-t').
FIXME: xref Listing Archives.
Если вы не перечисляете имен членов архива, '--extract' извлечет
имена всех членов архива.
Если вы даете опцию '--verbose', то '--extract' напечатает имена
членов архива, которые только что извлек .
2.3.1. Извлечение файлов из архива в ваш текущий каталог *
- 32 -
Очевидно, что конечная цель пользователей tar - получить свои файлы
обратно. Чтобы это сделать, используйте операцию '--extract' или
'--get'. '--extract' ('-x') может использоваться для извлечения
отдельного файла из архива или для того, чтобы записать все файлы
архива обратно в систему файлов.
В предыдущем примере вы конкатенировали два архива: 'music' и
'practice/records'. Теперь, чтобы извлечь полное содержание 'music'
(выходной файл процесса конкатенации), вы должны, находясь в домашнем
каталоге:
* Вызвать tar и задать операцию извлечения файлов из архива
('--extract' ('-x') или '--get').
* Задать имя архивного файла, который нужно извлечь -
'--file=имя_архива' ('-f имя_архива').
* Задать имена файлов, которые вы хотите извлечь, как аргументы имен
файлов (в том случае, если вы хотите извлечь целый архив, вам не нужно
ничего задавать).
% tar --extract --file=music
tar: Could not make directory practice : File exists
Т.к. файлы, хранящиеся изначально в 'music', хранились как файлы
подкаталога (а не как файлы рабочего каталога), они хранятся в архиве
с ведущим именем каталога - tar при их обновлении пытался создать
заново этот каталог и получил ошибку: этот каталог уже существует.
Однако извлечение не было прекращено. Если вы производите
переход в каталог 'practice' и генерируете список каталога, вы
получаете, что 'jazz', который мы перемещали в более ранний каталог,
восстановлен.
% cd practice
% ls
blues classical folk jazz records rock
- 33 -
Однако, если вы более строго просмотрите файлы каталога, вы
получите, что файлы 'blues' и 'folk' - фактически начальные версии
файла, который хранился в 'music' в начале введения. tar при
извлечении файлов из 'music' перезаписал существующий файл в систему
файлов.
Т.к. более новые версии файлов хранились в 'records' выше, их нельзя
больше оттуда извлечь. 'records' тоже был заархивирован tar, когда
каталог 'practice' хранился в архивном файле 'music' и был обновлен,
когда файлы в 'practice' были перезаписаны. Однако более новая версия
'records' была связана с 'music'. Содержание более новой версии
'records', следовательно, будет извлечено, когда будут извлечены все
файлы 'music'. Последние извлечены. tar сохранил их заново в рабочем
каталоге, используя имена, под которыми они изначально хранились.
Поскольку изначально они хранились как часть 'records', в каталоге
'practice', у них нет предшествующего каталога, хранящегося как часть
их имен. Для того, чтобы найти последние версии 'blues', 'folk',
'jazz', 'rock' и 'classical', посмотрите в вашем домашнем каталоге.
Вы можете захотеть обновить файлы в вашем каталоге 'practice' перед
извлечением их из 'music'. Вместо того, чтобы перемещать файлы из
вашего домашнего каталога в подкаталог 'practice', вы можете выполнить
такое же извлечение, как в предыдущем примере, используя каталог
'practice' в качестве вашего домашнего каталога:
% cd practice
% tar --extract --verbose --file=~/music
practice/
practice/blues
practice/folk
practice/jazz
practice/records
blues
folk
jazz
blues
rock
blues
- 34 -
classical %
Если вы теперь проверите файлы в практическом каталоге, вы найдете,
что они обновили свое состояние. Старые версии файлов, которые
хранились в 'music' с предыдущим именем каталога, записаны в
новосозданный подкаталог рабочего каталога (ваш подкаталог
'practice'). Новый каталог также называется 'practice'.
2.3.2. Извлечение файлов из архива *
Cоздание архива - только половина дела: нет смысла хранить файлы в
архиве, если потом нельзя их извлечь. Чтобы извлечь файлы из архива,
используется операция '--extract' ('-x').
Чтобы извлечь заданные файлы, используют из имена как аргументы
имени файла. Если вы используете имя каталога как аргумент имени
файла, tar извлекает все файлы (включая подкаталоги) этого каталога.
Если вы не используете аргументы имени файла, tar извлекает все файлы
архива.
Заметьте: tar извлекает член архива в систему файлов без проверки,
не существует ли уже файл с таким именем члена архива. Если он уже
существует, его содержание уничтожится, т.к. tar запишет на его место
другой файл.
FIXME: xref keep-old
2.3.3. Извлечение заданных файлов *
Чтобы извлечь определенные файлы, задайте их, используя аргументы
имени файла.
В вышеприведенном примере вы создали архивный файл
'~/practice/records', содержащий файлы 'blues', 'folk' и 'jazz' в
каталоге 'practice'. Если по какой-то причине вы лишились одного из
этих текстовых файлов (rm ~/practice/blues'), вы можете извлечь его из
- 35 -
архивного файла.
В первую очередь перейдите в каталог 'practice'. Затем:
* Вызовите tar и задайте операцию '--extract' или '--get'.
* Задайте архив, из которого нужно извлечь файлы - '--file=имя_архива'
('-f имя_архива').
* Задайте файлы, которые нужно извлечь, используя аргументы имени
файла (если вы не задали никаких файлов, tar извлекает все члены
архива).
% tar --extract --file=records blues
Если вы посмотрите список содержимого каталога, вы увидите, что
'blues' стоит последним:
% ls
folk
jazz
records
blues
2.3.4 Извлечение каталогов *
Чтобы извлечь каталог и все файлы, которые он содержит, используется
имя каталога как аргумент имени файла в сочетании с 'tar + extract'.
Помните: tar хранит и извлекает файлы с именами, относящимися к
рабочему каталогу.
В предыдущем примере вы хранили каталог '~/practice' в архивном
файле '~/music'. Если вы уничтожили содержание 'practice', вы можете
восстановить его.
В первую очередь перейдите в подкаталог 'practice' ('cd
~/practice'). Затем удалите все файлы в '~/practice'('rm*'). Если вы
теперь посмотрите список каталога, то увидите, что он пустой:
- 36 -
% ls
%
Теперь давайте попытаемся восстановить содержание 'practice' с
помещью извлечения его из архивного файла '~/music':
tar --extract --file=~/music practice
Теперь опять посмотрим содержимое 'practice':
% ls
practice
Что случилось с файлами? Когда вы создавали '~/music', вашим рабочим
каталогом был ваш домашний каталог. Когда вы извлекали '~/music',
вашим рабочим каталогом был '~/practice'. tar хранил файлы в
'practice', соответствующем вашему домашнему каталогу, а затем извлек
их. Сейчас файлы в новом каталоге по имени '~/practice/practice'.
Чтобы восстановить файлы на их старых позициях, уничтожьте новый
каталог и его содержимое, а затем сделайте заново предыдущий пример
при условии, что рабочий каталог - ваш домашний.
% rm ~/practice/practice/*
%rmdir practice
% cd
% tar --extract --file=music practice
(tar сообщит, что он не может создать каталог '~/practice', потому
что он уже существует. И извлечение других членов архива работать не
будет.)
2.4. Как добавлять файлы в уже существующие архивы *
Если вы хотите добавить файлы в существующий архив, нельзя
использовать '--create'('-c'). Эта опция уничтожит архив и создаст
- 37 -
новый на его месте. Вместо этого используется '--append' ('-r').
Команда 'tar --append --file=afiles.tar arbalest' добавит 'arbalest' в
существующий архив 'afiles.tar'. При использовании '--append' архив
должен уже существовать.
Как и с помощью '--create', нооводобавленные файлы могут быть
извлечены так же, как если бы их имена как членов архива были даны на
командной строке. Опция '--verbose' выведет имена файлов в том
порядке, как они были записаны в архив.
Если вы '--append' добавляете в архив файл под именем, которое уже
имеет один из членов архива, старый член не уничтожается. Но
происходит, однако, довольно сложный процесс.
FIXME: xref Multiple Members with the Same Name.
Если вы хотите уничтожить член архива, используйте сначала
'--delete', а затем '--append'.
FIXME: мы хотим, чтобы люди использовали документацию по резервному
копированию, т.ч. я не собираюсь объяснять это во введении.
Вместо того, чтобы создавать новый архив кажадый раз, когда вы
хотите сохранить файл, иногда более целесообразно добавлять файлы в
уже существующий архив.
Чтобы добавить файл в уже существующий архив, используйте операцию
'--append'. Чтобы записать новые версии членов архива в архив,
используйте операцию '--update' ('-u').
Если вы используете tar для создания архива целого каталога или
каталогового дерева, более разумно, когда резервное копирование
производится только для тех файлов архивов, которые недавно созданы
или изменялись в процессе последнего резервного копирования.
Ччобы добавить новые файлы в существующий архив, или добавить новые
версии старых файлов, вы можете использовать операцию '--append' или
'--update'.
- 38 -
2.4.1. Запись файлов в архив *
Простейший способ добавить файлы в уже существующий архив - операция
'--append' ('-r'), которая записывает заданные файлы в архив,
безотносительно к тому, существуют ли они уже среди файлов архива.
Когда вы используете '--append', вы обязательно должны задать
аргументы имени файла, т.к. по умолчанию они не задаются. Если вы
задаете файл, уже существующий в архиве, другая его копия добавляется
в конец архива.
В одном из вышеприведенных примеров вы создавали в каталоге файл по
имени 'rock', которого не существовало ни в архивном файле
'records' практического каталога, ни в архивном файле 'music' рабочего
каталога. Чтобы добавить 'rock' в 'records', вы должны, находясь в
практическом каталоге:
* Вызвать tar и задать операцию добавления файла - '--append'.
* Задать имя архива, в который нужно добавить файл -
'--file=имя_архива' ('-f имя_архива').
* Задать имя (имена) файла(ов), добавляемых в архив, как аргумент(ы)
имени файла.
% tar --append --file=records rock
Если вы теперь воспользуетесь операцией '--list', вы увидите, что
'rock' появился в архиве:
% tar --list --file=records
blues
folk
jazz
rock
Хотя все новосозданные файлы добавились в 'records', он еще не
- 39 -
является текущим относительно содержимого практического каталога. Если
обратиться к предыдущему примеру, использовавшему '--compare; -
'blues' был изменен, после того как был создан архив 'create'.
Однако
для решения проблемы очень просто использовать '--append':
% tar --append --verbose --file=records blues
blues
Т.к. вы задали опцию '--verbose', tar сразу напечатал имя
добавленного файла. Если вы сейчас используете опцию '--list' для
получения содержимого архива, вы увидите следующее:
% tar --list -f records
blues
folk
jazz
rock
blues
Новейшая версия 'blues' сейчас в конце архива. Т.к. файлы
извлекаются из архива в том порядке, в котором они там появились, и
т.к. извлеченные файлы даны в системе файлов под теми же именами, что
и те, под которыми они хранились в архиве, когда извлечены файлы
'records', новая версия 'blues' (которая имеет то же имя, что и
старая) запишется на версию, которая была записана первой.
FIXME: xref Keep Old Files
FIXME: -update обычно берет аргумент каталога, если файлы,
заархивированные из каталога, больше там не содержатся. Это
ошибка.
Простейший способ добавить файл в уже существующий архив - операция
'--append' ('-r'), которая записывает файлы в архив безотносительно к
тому, являются ли они уже членами архива. Когда вы используете
'--append', вы обязаны использовать аргументы имени файла. Если вы
задаете файл, уже хранящийся в архиве, tar добавляет в архив другую
копию файла.
- 40 -
Если вы прорабатывали предыдущие примеры, у вас должен быть
текстовый файл по имени '~/practice/rock', который не хранится ни в
архивном файле '~/practice/records', ни в архивном файле 'music'.
Чтобы добавить 'rock' в 'records', сначала сделайте 'practice' рабочим
каталогом ('cd practice'). Затем:
* Вызовите tar и задайте операцию '--append'.
* Задайте архив, в который нужно добавить файл - '--file=имя_архива'
('-f имя_архива').
* Задайте файлы, которые нужно добавить в архив, используя аргументы
имени файла.
Например:
% tar --append --file=records
blues
folk
jazz
rock
FIXME: здесь должна быть своего рода вершина.
Вы можете использовать '--append' для подержания членов архива
текущими с помощью активных файлов.
Т.к. '--append' сохраняет файлы
вне зависимости от того, есть ли уже в архиве файлы с такими именами,
вы можете использовать '--append' для добавления более новых версий
членов архива в архив. Когда вы извлекаете файл, только версия,
сохраненная последней, входит в систему файлов. Т.к. '--extract'
извлекает файлы из архива последовательно и перезаписывает их в
систему файлов под теми же именами, если файл возникает в архиве
больше, чем однажды, последняя версия этого файла будет записана на
предыдущую версию, которая только что была извлечена.
Если вы вспомните предыдущий пример, использовавший '--compare',
'blues' был изменен после того, как был создан архив 'records'. Однако
- 41 -
проще использовать '--append' для того, чтобы добавить новую версию
'blues' в 'records'.
% tar --list -f records
blues
Если вы теперь посмотрите список содержимого архива, вы увидите следующее:
% tar --list -f records
blues
folk
jazz
rock
blues
Новейшая версия 'blues' - в конце архива. При извлечении файлов
'records' из архива более новая версия 'blues' (имеющая то же имя, что
и старая), запишется на версию, сохраненную первой. Когда
заканчивается выполнение 'extract', в системе файлов находится только
более новая версия 'blues'.
FIXME: xref keep-old-files
2.4.2. Модифицированные файлы в архиве *
Поскольку опция '--append' используется для модифицированных файлов
в архиве, для сохранения архива текущим вы должны сначала
использовать опции '--compare' ('-d') или '--list' ('-t') для того,
чтобы определить, какие файлы были изменены (или намереваться занять
пространство путем добавления идентичных копий архивных файлов в конец
архива). Проще использовать операцию '--update' и заставить tar
работать за вас.
Опция '--update' ('-u') заставляет tar добавлять файлы в коней
архива, так же, как опция '--append' ('-r'). Когда вы вызываете tar c
помощью задания опции '--update', вы должны задать аргументы имени
файла. В отличие от '--append', '--update' заставляет tar проверять
- 42 -
архив, подлежащий модификации, на тот предмет, сохранен ли уже
задаваемый файл. Если файл (или что-то с тем же именем) уже в архиве,
tar cмотрит дату модификации его в архиве и сравнивает ее с датой
модификации файла с тем же именем в системе файлов. Файл заносится в
архив только если он новый или дата его модификации была изменена на
более позднюю.
FIXME: xref After-Date
Чтобы увидеть опцию '--update' в рвботе, создайте новый файл,
'classical', в вашем практическом каталоге, и добавьте строку в файл
'blues', используя текстовый редактор. Затем вызовите tar с помощью
операции '--update' ('-u') и опции '--verbose', используя имена всех
файлов в практическом каталоге как аргументы имени файла:
% tar --update --verbose --file=records blues folk rock classical
blues
classical
%
Т.к. мы задали командный режим, tar печатает имена файлов, с
которыми он работает, которые в данном случае являются именами файлов,
которые нужно модифицировать. Если вы теперь вызовете tar и зададите
операцию '--list' для генерации списка файлов архива, вы увидите, что
'blues' и 'classical' добавлены в конец.
[tar не записывает новую версию на старую, т.к. запись в середину
участка ленты - трудный процесс. Ленты не расчитаны на возвращение по
ним назад. Даже если бы это было возможно, представьте, что бы было,
если бы новая версия оказалась длиннее старой...].
Для поддержания членов архива с помощью их противоположных частей с
теми же именами в системе файлов используйте опцию '--update' ('-u').
Она добавит заданный файл в архив, если в архиве еще нет файла с таким
именем. Если в архиве уже есть файл с таким именем, tar смотрит дату
модификации члена архива, и добавляет фай, только если он был
модифицирован позже. Если файл хранится в архиве, но уже не существует
под таким именем в системе файлов, tar сообщает об ошибке.
- 43 -
Вы можете использовать опцию '--append' ('-r') для поддержания
архива текущим, но при этом вы должны или использовать опции
'--compare' и '--list' для определения, какие файлы нуждаются в
реархивации (которая может занять много времени), или добавить
идентичные копии уже существующих файлов в архив (которые могут занять
много места).
При операции '--update' вы обязаны использовать аргументы имени
файла.
Для того, чтобы увидеть опцию '--update' в работе, создайте новый
файл '~/practice/classical' и модифицируйте файл '~/practice/blues'
(и для того, и для другого вы можете использовать текстовый редактор,
такой как Emacs). Затем, используя 'practice' в качестве вашего
домашнего каталога, вызовите tar опцией '--update', используя имена
всех файлов практического каталога как аргументы имени файла, и задав
опцию '--verbose':
% tar --update --verbose --file=records blues folk rock classical
blues
classical
%
Т.к. вы задали словесный режим, tar печатает имена файлов, с
которыми он работает. Если вы теперь посмотрите список членов архива
('tar --list --file=records'), вы увидите, что в 'records' добавились
файл 'classical' и другая версия файла 'blues'.
Заметьте: когда вы модифицируете архив, tar не записывает более
новые версии файлов на старые члены архива - он хранит их отдельно.
Это потому, что члены архива возникают в нем в том порядке, в котором
они хранятся, и некоторые архивные устройства не позволяют запись в
середину архива.
2.4.3 Конкатенация архивов *
- 44 -
Иногда, вместо того, чтобы добавлять отдельные файлы в конец архива,
бывает более удобно добавлять сами архивы в конец архива. Хотя
интуитивно для этой цели хочется использовать cat, утилиту для
добавления файлов в совокупности, архивы, созданные tar, помечаются на
конце файловым маркером, который уничтожается, если конкатенированные
архивы должны читаться как один архив.
FIXME: xref Ignore zeros.
Таким образом,чтобы добавить архивы к концу другого архива, вы
должны использовать операцию '--concatenate' ('-A').
В более ранних примерах вы создали архивный файл 'music' в вашем
домашнем каталоге. Однако, с тех пор вы изменили содержание каталога
'practice', который хранился в архиве. 'records', архивный файл в
каталоге'practice', недавно был модифицирован, и содержит текущую
версию файла в 'practice'. Но прежде чем модифицировать 'music',
давайте добавим в него 'records'.
* Перейдите в домашний каталог ('cd..').
* Вызовите tar и задайте операцию присоединения архивов к концу
другого архива - '--concatenate' ('-A').
* Задайте имя архивного файла, который нужно добавить -
'--file=имя_архива'.
* Задайте аргументы имени файла, которые являются именами архивных
файлов. Запомните, что нужно включить имя каталога в имя файла, если
архивный файл не находится в вашем домашнем каталоге.
% cd..
% tar --concatenate --file=music practice/records
Прежде чем посмотреть новое содержание 'music', давайте извлечем все
файлы, чтобы увидеть, что произошло.
Чтобы конкатенировать архивные файлы, используйте опцию
- 45 -
'--concatenate' ('-A'). Эта операция добавляет другие архивы в конец
архива. Хотя интуитивно для этой цели хочется использовать cat,
утилиту для добавления файлов в совокупности, архивы, сложенные
вместе, не могут быть прочитаны tar. Архивные файлы помечаются на
конце файловым маркером: если архивы конкатенированы с помощью cat,
этот маркер появится перед концом нового архива. Это будет
препятствовать операциям с этим архивом.
FIXME: xref Ignore zeros.
В более ранних примерах вы хранили каталог '~/practice' в архивном
файле '~/music'. Если вы следили за примерами, у вас с тех пор
изменилось содержание каталога '~/practice'. Эти текущие версии файлов
каталога 'practice', однако, хранятся в архивном файле
'~/practice/records'.
Чтобы сохранить текущие версии файлов 'practice' в архивном файле
'music', вы можете использовать '--concatenate' ('-A') для добавления
архивного файла '~/practice/records' к 'music'. В первую очередь
убедитесь, что вы находитесь в вашем домашнем каталоге ('cd~'). Затем:
* Вызовите tar и задайте операцию '--concatenate' ('-A').
* Задайте архивные файлы, которые нужно добавить - '--file=имя_архива'.
* Задайте архивы, которые нужно добавить, используя аргументы имени
файла. В этом случае аргументы имени файла являются именами архивных
файлов. (Если архивный файл не находится в вашем домашнем каталоге, не
забудьте включить в имя архива путь).
% cd ~
% tar --concatenate --file=music practice/records
Если вы теперь посмотрите содержимое 'music', вы увидите члены
архива 'practice/records':
- 46 -
% tar --list--file=music
blues
folk
jazz
rock
blues
practice/blues
practice/folk
practice/jazz
practice/rock
practice/blues
practice/classical
2.5. Как удалить из архива его члены *
Вы можете удалить из архива его члены с помощью '--delete'. Задайте
имя архива с помощью '--file=имя_архива'. Введите список имен членов,
подлежащих удалению. (Если вы не укажете эти имена, ничего не
удалится.) Опция '--verbose' заставляет tar печатать имена членов
после их удаления. Так же, как при использовании '--extract', важно,
чтобы вы дали точные имена членов. Для того, чтобы узнать точные имена
членов архива, используйте '--list'.
FIXME: xref Listing Archives
Опция '--delete' работает только с архивами, хранящимися на диске.
Вы не можете удалить члены из архива, хранящегося на ленте.
В некоторых случаях удобно удалять файлы из архива, хранящегося на
диске (но никогда не бывает удобно удалять файлы из архива,
хранящегося на ленте: из-за строчной природы записи на ленту этот
процесс похож на шифрование архива). Вы можете использовать операцию
'--delete' для удаления файлов из архива. Имена файлов, подлежащих
удалению, должны быть заданы как аргументы имени файла. Все версии
названных файлов удаляются из архива. Выполнение операции '--delete'
может быть очень медленным.
- 47 -
Чтобы уничтожить все версии файла 'blues' из архива 'records'
каталога 'practice', убедитесь, что вы находитесь в этом каталоге, а
затем
* Посмотрите содержимое архива 'records' (как это сделать, см. выше),
чтобы убедиться, что файлы, которые вы хотите удалить, хранятся в
архиве. (Этот шаг необязатален)
* Вызовите tar и задайте операцию удаления файлов из архива
Вызов GNU TAR
3.1 Общий обзор tarОбычный способ вызова tar:
tar опция...[имя]...
Фактически вы можете набирать аргументы в любом порядке, но в данном
руководстве для облегчения понимания примеров опции всегда
предшествуют другим аргументам. Далее опции, начинающие основной
операционный режим (основную команду tar), обычно стоят первыми.
В tar cуществует много опций и три разных стиля их написания:
мнемонический, краткий и старый. Эти стили обсуждаются ниже. Некоторые
опции можно использовать со многими командами, в то время как другие
имеют смысл только с несколькими основными командами. Одна опция
должна определять основную команду, все остальные обязательны.
Помните, что опции tar очень чувствительны. Например, 'List' или
'list' не эквивалентны '--list' - фактически они даже не существуют.
Опции '-T' и '-t-' - разные опции: первая требует аргумента для
задания имени файла, обеспечивая список имен, а вторая не требует
аргумента и другой вариант ее написания - '--list'.
Каждое имя интерпретируется как имя члена архива, когда основная
команда - '--compare', '--delete', '--exrtact', '--list' или
'--update'. Для всех остальных основных команд имена интерпретируются
как имена файлов (включая каталоги) в системе файлов. tar
интерпретирует имена файлов, как относящиеся к рабочему каталогу.
tar делает все имена файлов относительными (с помощью передвижения
'/' при архивировании или пересохранении файлов), если вы не задали
что-то другое (используя опцию '--absolute-names').
- 50 -
FIXME: xref File Name
Interpretation
для получения более подробной информации о '--absolute-names' ('-P').
FIXME: имя еще одного узла, который, вероятно, неверен.
Различие между именами файлов и именами членов архива особенно
важно, когда используется глоббирование оболочки, и иногда является
источником недоразумений у новичков. Глоббирование - операция, с
помощью котороц определенные символы, например '*' или '?'
перемещаются и расширяются во все существующие файлы, соответствующие
данному шаблону. Проблема в том, что оболочки могут глоббировать
только при использовании существующих файлов системы файлов. Только
tar может глоббировать на членах архива, т.ч. при необходимости вы
можете убедиться, что вышеупомянутые символы достигают tar без
предварительной интерпретации их оболочкой. Для этого обычно
достаточно использовать '\' перед '*' или '?' или заключать аргумент в
кавычки.
Хотя имена часто задаются на командной строке, они также могут быть
считаны из текстового файла системы файлов при использовании
'--files-from=файлы_с_именами' ('-T файлы_с_именами').
Каждый из нижеприведенных подразделов группирует несколько опций
общей функциональности.
Вы можете использовать tar для хранения файлов в архиве, для
извлечения их из архива и производить другие типы манипуляций с
архивами. Начальный аргумент tar, называемый операцией,
задает действие, которое нужно выполнить. Другие аргументы tar - или
опции, которые влияют на способ выполнения операции, или имена файлов,
которые задают файлы, с которыми tar будет работать.
GNU возвращает только некоторые выходные состояния. Если вы
используете опцию '--compare' ('-d'), то ноль значит, что все прошло
нормально, за исключением, может быть, незначительной мелочи. Не ноль
- 51 -
значит, что что-то было неверно. Обычно не ноль - почти всегда 2, за
исключением некоторых операций, где он может быть 128.
3.2 Стили написания опций
3.2.1 Мнемонический стиль
Каждая опция имеет хотя бы одно мнемоническое имя, начинающееся с
двух тире подряд, например '--list'. Мнемонические имена опций более
понятны, чем краткие или старые, их предпочитают те, кто любит во всем
ясность. Иногда бывает, что одна мнемоническая опция имеет много
разных имен-синонимов. К тому же, имена мнемонических опцих иногда
могут быть даны с необычными сокращениями. Например, '--cre' может
быть использована вместо '--create', т.к. нет другой мнемонической
опции, начинающейся с '--cre'.
Некоторые опции требуют аргументов. Например, '--file=имя_архива',
сообщающая имя архива tar. Аргумент мнемонической опции обычно дается
сразу после самой опции и записывается такими же символами. Например,
опция '--file=имя_архива' дается файлом 'archive.tar' как аргументом
при использовании записи '--file=archive.tar'.
Мнемонические опции предназначены для простоты запоминания, в
отличие от кратких опций, о которых будет рассказано ниже. Например,
запись:
tar --create --verbose --block-size=20 --file=/dev/rmtO
дает хорошее представление о том, что делают команды, даже тем, кто
мало знаком с tar.
3.2.2 Краткий стиль
Большинство опций, хотя не все, также имеют краткое имя, состоящее
из одинарного тире и еще одного символа, например '-t' - краткое имя
мнемонической опции '--list', они имеют одно и то же значение.
- 52 -
Функциональности этих опций абсолютно идентичны.
Краткие имена опций быстрее набираются на клавиатуре, чем
мнемонические. В данном руководстве мы часто после мнемонической опции
в скобках даем ее краткую форму (если она существует).
Краткие опции, требующие аргументов, обычно записываются перед ними
и отделены от них пробелом. Иногда можно писать аргумент сразу после
краткого имени опции, не оставляя пробела. Например, можно писать '-f
аrchive.tar' или '-farchive.tar вместо '--file=archive.tar'. Когда
опция дана отдельно, ее аргумент пишется после нее, как обычно в
программах Unix. Например:
tar -c -v -b 20 -f /dev/rmtO
Краткие опции можно смешивать, но, в противоположность старым
опциям, это необязательно. Когда несколько опций идут подряд, для них
всех можно использовать одно общее тире. Только последняя из опций
может иметь аргумент. (Но мне кажется, что очень глупо нагромождать
несколько опций, последняя из которых имеет аргумент. Я даже думаю,
что опции GNU getopts достаточно, чтобы это сделать).
Если вы вставляете краткие опции в команду, убедитесь, что вы
вставили туда и их аргументы.
3.2.3 Старый стиль опций *
Старые опции - одиночные буквы без тире, которые появляются только в
положении, следующем за ключевым словом tar команды после пробела.
Буква старой опции соответствует букве краткой опции. Например, старая
опция 't' - то же, что краткая опция '-t' и мнемоническая '--list'.
Все время своего существования программы tar, GNU и non-GNU,
используют старые опции. GNU tar использует их не только по
историческим причинам, но и потому, что ими пользуются многие люди.
Все старые опции записываются как отдельный аргумент без пробелов,
- 53 -
в виде слияния всех букв, задающих эти опции. Этот набор букв должен
появляться на командной строке первым, после имени программы tar:
старые опции не могут быть ни в каком другом месте. Затем, если опция
требует аргументов, они тоже появляются на командной строке. Аргументы
опции возникают так же, как буквы, к которым они относятся. Синтаксис
команды tar при использовании старых опций:
tar буква...[аргумент]... [опция]...[имя]...
Этот синтаксис используется, потому что он позволяет вам набирать
одиночные буквы для операций и опций как отдельные аргументы tar без
предшествующих '-'или пробелов между буквами. 'tar cv'или 'tar -cv'
эквивалентны 'tar -c -v'.
Для совместимости с Unix tar первый аргумент может содержать
опционную букву (или группы опционных букв): например, 'tar cv' задает
опцию '-v' к команде '-c'. Когда опции, для которых нужны аргументы,
даются вместе с командой, все связанные аргументы следуют в том же
порядке, что и опции. Вышеприведенный пример можно записать в старом
стиле следующим образом:
tar cvbf 20 /dev/rmtO
Здесь '20' - аргумент '-b', а '/dev/rmtO' - аргумент '-f'.
С другой стороны, синтаксис старого стиля создает некоторые
сложности для понимания, какой аргумент к какой опции относится, это
часто создает путаницу. Например,в команде 'tar cvbf 20 /dev/rmtO'
'20' - аргумент для '-b', '/dev/rmtO' - аргумент для '-f', а '-v' не
имеет аргументов. Даже при использовании кратких опций 'tar -c -v -b
20 -f /dev/rmtO' все более понятно, т.к. аргументы стоят
непосредственно после опций, которым они соответствуют.
Если вы хотите изменить порядок букв в аргументе старой опции,
проверьте, чтобы вы так же изменили порядок аргументов, им
соответствующих.
Этот старый способ написания опций tar может удивить даже опытных
- 54 -
пользователей. Например, две команды
tar cfz archive.tar.gz file
tar -cfz archive.tar.gz file
- совершенно разные. Первый пример использует 'archive.tar.gz' как
значение для опции 'f', а потом содержит опцию 'z'. Во втором же
примере 'z' используется как значение для опции 'z'. (Мне кажется
достаточно неудобным, что getopts воспринимает оставшееся 'z' как
значение для 'f'. Я считаю, что из соображений ясности нельзя
допускать сбегания опционных букв, если какие-нибудь из них требуют
аргументов. Но это нужно для согласованности с традиционными
системами). Второй пример можно исправить многими способами. Приведу
несколько из них:
tar -cfz archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file
3.2.4 Cмешанные стили опций
В одной команде tar можно перемешать все три стиля, соблюдая правила
каждого из них.
В GNU tar до 1.11.6, испольовавшем опции старого стиля, исключалась
возможность использования опций, не имеющих кратких форм. Многие
пользователи выражали возмущение по поводу дешифратора опций tar, и я
его изменил. Однако tar должен быть согласованным с другими tar.
Краткие опции должны обеспечивать полную согласованность. Так что,
если вы найдете какие-то несоответствия в дешифровке опций, сообщите,
пожалуйста, мне.
Опции старого стиля можно смешивать с современными опциями в одном и
том же вызове программы tar. Однако, опции старого стиля должны быть
представлены только одним аргументом, а современные могут даваться
только после всех аргументов опций старого стиля. Если это правило не
выполняется, современная опция может быть неправильно интерпретирована
- 55 -
как значение аргумента одной из опций старого стиля.
Например, все следующие команды совершенно эквивалентны и
иллюстрируют множество комбинаций стилей опций.
tar --create --file=archive.tar
tar --create --f archive.tar
tar --create --farchive.tar
tar --file=archive.tar --create
tar --file=archive.tar --c
tar -c --file=archive.tar
tar -c -f archive.tar
tar -c -farchive.tar
tar -cf archive.tar
tar -cfarchive.tar
tar -f archive.tar --create
tar -f archive.tar -c
tar -farchive.tar --create
tar -farchive.tar -c
tar c --file=archive.tar
tar c -f archive.tar
tar c -farchive.tar
tar cf archive.tar
tar f archive.tar --create
tar f archive.tar -c
tar fc archive.tar
C другой стороны, приведенные команды не эквивалентны следующему
набору:
tar -f -c archive.tar
tar -fc archive.tar
tar -fcarchive.tar
tar -farchive.tarc
tar cfarchive.tar
Эти последние примеры значат нечто более сложное, чем может
понадобиться пользователю. Первые четыре задают, что архив tar должен
- 56 -
быть назван '-c', 'c', 'carchive.tar' или 'archive.tarc'
соответственно. Первые два примера также задают один неопционный
аргумент, имеющий значение 'archive.tar'. Последний пример содержит
только буквы опций старого стиля и не содержит значение аргумента.
3.3 Все доступные опции *
Опции изменяют способ выполнения tar операций.
'--absolute-names'
'--after-date=дата'
Ограничивает оперирование с файлами заданной датой.
FIXME: xref File Exsclusion
'--block-size=номер'
Задает блочный фактор архива.
FIXME: xref Blocking Factor
'--compress'
Задает уплотненый архив.
FIXME: xref Compressed Archives
'--confirmation'
Запрашивает подтверждение для каждого файла.
FIXME: xref Interactive Operations
FIXME: xref должен быть синоним.
'--derefence'
Рассматривает символьный указатель как альтернативное имя
для файла к точкам указателя.
FIXME: xref Symbolic Links
'--directory=каталог'
Изменяет рабочий каталог.
FIXME: xref Сhanging Working Directory
- 57 -
'--exclude=шаблон'
Исключает файлы, соответствующие выпажению, записанному в
шаблоне.
FIXME: xref File Exclusion
'--exclude-from=файл'
Исключает файлы, соответствующие какому-нибудь из
выражений, записанных в фале 'file'.
FIXME: xref File Exclusion
'--file=имя_архива'
Называет архив.
FIXME: xref Archive Name
'--files-from='file'
Читает аргументы имени файла из файла системы файлов.
FIXME: xref File Name lists
'--ignore-umask'
Устанавливает режимы извлечения файлов к их записям в
архиве.
FIXME: xref Writing Options
'--ignore-zeros'
Игнорирует введение данных конца архива.
FIXME: xref Archive Reading Options
'--tape-length=n (-L)'
FIXME: альтернативный способ создания мультиархива. Идет до
этой длины и выдает приглашение новой ленте, автоматически
включает multi-volume.
'--info-script=файл_программы'
Создает многотомный архив с помощью сценария.
FIXME: xref Multi-Volume Archives
- 58 -
'--interactive'
Запрашивает подтверждение перед выполнением любой операции
с файлом или членом архива.
'--keep-old-files'
Предотвращает перезаписывание во время извлечения.
FIXME: xref File Writing Options
'--label=метка_архива'
Включает метку архива в созданный архив.
FIXME: xref Archive Label
'--modification-time'
Устанавливает время модификации извлеченных файлов.
FIXME: xref File Writing Options
'--multi-volume'
Задает многотомный архив.
FIXME: xref Multi-Volume Archives
'--newer=дата'
Ограничивает операции изменения файлов указанной датой.
FIXME: xref File Exclusion
'--newer-mtime=дата'
Ограничивает операцию модификации файлов указанной датой.
FIXME: xref File
Exclusion
'--old'
Создает архив старого формата.
FIXME: xref Old Style File Information
FIXME: согласны ли мы, что это нужно убрать как синоним?
'--old-archive'
Создает архив старого формата.
FIXME: xref Old Style File Information
- 59 -
'--one-file-system'
Предохраняет tar от пересечения границы системы файлов при
архивировании.
FIXME: xref File Exclusion
'--portability'
Создает архив старого формата.
FIXME: xref Old Style File Information
'--preserve-order'
Помогает составлять большие списки имен файлов на машинах с
малым количеством памяти.
FIXME: xref Archive Reading Options
'--preserve-permission'
Устанавливает режимы извлечения файлов к их записям в
архиве.
FIXME: xref File Writing Options
'--read-full-blocks'
Читает архив с размером блока меньше заданного или
содержащий неполные блоки.
FIXME: xref Archive Reading Options
'--record-number'
Выдает номер записи при генерации сообщения.
FIXME: xref Additional Information
'--same-order'
Помогает составлять большие списки имен файлов на машинах с
малым количеством памяти.
FIXME: xref Archive Reading Options
'--sparse'
Устанавливает режимы извлечения файлов к файлам, записанным
в архиве.
FIXME: xref File Writing Options
- 60 -
'--starting-file= имя_файла'
Начинает чтение в середине архива.
FIXME: xref Scarce Disk Space
'--to-stdout'
Записывает файлы на стандартный вывод.
FIXME: xref File Writing Options
'--uncompress'
Задает уплотненный архив.
FIXME: xref Compressed Archives
"-V метка_архива'
Включает метку архива в созданный архив.
FIXME: xref Archive Label
FIXME: был -volume
'--verbose'
Выводит имена файлов или членов архива, которыми нужно
оперировать.
FIXME: xref Additional Information
'--verify'
Делает проверку на несоответствия в архиве сразу после
того, как он был записан.
FIXME: xref Write Verification
'-B'
Читает архив с размером блока меньше заданного или
содержащий неполные блоки.
FIXME: xref Archive Reading Options
'-K имя_файла'
Начинает чтение в середине архива.
FIXME: xref Scarce Disk Space
'-M'
Задает многотомный архив.
- 61 -
FIXME: xref Multi-Volume Archives
'-N дата'
Ограничивает операции изменения файлов указанной датой.
FIXME: xref File Exclusion
'-O'
Записывает файлы на стандартный вывод.
FIXME: xref File Writing Options
"-R'
Выдает номер записи при генерации сообщения.
FIXME: xref Additional Information
'-S'
Разреженно архивирует разреженные файлы.
FIXME: xref Sparse Files
'-T файл'
Читает аргументы имени файла из файла системы файлов.
FIXME: xref File Name Lists
'-W'
Делает проверку на несоответствия в архиве сразу после
того, как он был записан.
FIXME: xref Write Verification
'-Z'
Задает уплотненный архив.
FIXME: xref Compressed Archives
'-b число'
Задает блочный фактор архива.
FIXME: xref Вlocking Factor
'-f имя_архива'
Имя архива.
- 62 -
FIXME: xref Archive name
'-h'
Рассматривает символьный указатель как альтернативное имя
для файла к точкам указателя.
FIXME: xref Symbolic Links
'-i'
Игнорирует введение данных конца архива.
FIXME: xref Archive Reading Options
'-k'
Предотвращает перезаписывание во время извлечения.
FIXME: xref File Writing Options
'-l'
Предохраняет tar от пересечения границы системы файлов при
архивировании.
FIXME: xref File Exclusion
'-m'
Устанавливает время модификации извлеченных файлов.
FIXME: xref File Writing Options
'-o'
Создает архив старого формата.
FIXME: xref Old Style File Information
'-p'
Устанавливает режимы извлечения файлов к файлам, записанным
в архиве.
FIXME: xref File Writing Options
'-s'
Помогает составлять большие списки имен файлов на машинах с
малым количеством памяти.
FIXME: xref Archive Reading Options
- 63 -
'-v'
Выводит имена файлов или членов архива, с которыми нужно
оперировать.
FIXME: xref Additional Information
'-w'
FIXME: cм. -interactive.
'-z'
Задает уплотненный архив.
FIXME: xref Compressed Archives
'-z -z'
Создает целый блочный уплотненный архив.
FIXME: xref Compressed Archives
FIXME: это единственная опция в краткой форме, состоящая из
двух букв.
'-C 'directory''
Изменяет рабочий каталог.
FIXME: xref Сhanging Working Directory
'-F программный_файл'
Создает многотомный архив с помощью сценария.
FIXME: xref Multi-Volume Archives
'-X 'file''
Выключает файлы, соответствующие какому-нибудь из
регулярных выражений, записанных в фале 'file'.
FIXME: xref File Exclusion
3.3.1 Выбор устройства и переключение *
-f [имя_машины:]файл
--file=[имя_машины:]файл
Используйте архивный файл или устройство на имени названной
машине.
- 64 -
FIXME: xref Device
--force-local
Архивный файл локален, даже если он содержит двоеточие.
FIXME: xref Device
--rsh-command=команда
Используйте отдаленную команду вместо rsh.
FIXME: xref Device
-[0-7][imh]
Задает устройство и плотность.
FIXME: xref Device
-M
--multi-volume
Создает многотомный архив (или дает список его
содержимого).
FIXME: xref Multi
-L число
--tape-length=число
Меняет ленту после задания число*1024 байта.
FIXME: xref Multi
-F файл
--info-script=файл
--new-volume-script=файл
Выполняет 'file' в конце каждой ленты. Предполагает
'--multi-volume' ('-M').
FIXME: xref Multi
3.3. 2 Разбивка устройства на блоки *
-b блок
--block-size=блок
Устанавливает размер блока=блок*1024 байта.
- 65 -
FIXME: xref Blocking
--block-compress
Блокирует сброс на ленту.
FIXME: xref Blocking
-i
--ignore-zeros
Игнорирует блоки нулей в архиве (имеется в виду EOF).
FIXME: xref Blocking
-B
--read-full-blocks
Переблокирует по мере чтения (для чтения каналов 4.2BSD).
FIXME: xref Blocking
3.3.3 Cтарая классификация опций *
Опции можно сгруппировать в три категории:
Общие опции
Опции, которые всегда имеют значение.
Опции создания
Опции для создания или модификации архива.
Опции выведения
Опции для составления списеа или извлечения файлов.
Опции, которые всегда имеют значение:
'-B число', '--block-size число'
'-f имя_файла', '--file имя_файла'
'-C каталог', '--directory каталог'
'-M', '--multi-volume'
'-N дата', '--after-date дата'
'-R', '--record-number' ('-R')
- 66 -
'-T имя_файла', '--files-from имя_файла'
'-v', '--verbose' ('-v')
'-w', '--interactive'
'-X файл', '--exclude файл'
'-z', '-Z', '--compress', '--uncompress'
Ниже приведены опции для создания или модификации архива. Эти опции
используются для контроля за файлами, которые tar заносит в архив, или
для проверки формата записанного архива.
FIXME: ref Format
За исключением указанных, эти опции используются с командами
'--create' ('-c'), '--append' ('-r'), '--update' ('-u'),
'--concatenate' ('-A') и 'delete'. Также заметьте, что опция {No value
for "read-full-block"}
FIXME: (pxref Extraction Options)
также используется с командами '--append' ('r'), '--update' ('-u'),
Основные операции TAR
В этой главе описываются основные операции, поддерживаемыепрограммой tar. Один вызов tar точно выполняет одну из этих операций.
Член архива обычно извлекается в файл с тем же именем, что и член
архива. Однако, вы можете использовать '--to-stdout' ('-O'), чтобы
заставить tar вывести извлеченные члены архива на стандартный вывод.
Если вы извлекаете много членов, они появляются на стандартном выводе
конкатенированными, в том порядке, в котором они были найдены в архиве.
Операция '--create' ('-c') записывает новый архив, а операция
'--extract' ('-x') читает файлы из архива и записывает их в систему
файлов. Вы можете использовать другие операции tar для записывания
новой информации в уже существующий архив (путем добавления в него
файлов, добавления к нему другого архива или удаления из него файлов),
и можете прочесть список файлов архива без их извлечения, используя
операцию '--list'.
Начальный аргумент tar - операция, которая задает действие, которое
tar должен произвести. tar можно использовать для:
* добавления файлов в уже существующий архив: '--append' ('-r').
* сравнения файлов в архиве с файлами системы файлов: '--compare'
('-d') или '--diff'.
* добавления к другому архиву: '--concatenate' ('-A').
* создания архива: '--create' ('-c').
* удаления файлов из архива: '--delete'.
* извлечения файлов из архива: '--extract' ('-x') или '--get'.
* вывода списка файлов архива: '--list' ('-t').
- 69 -
* модификации архива посредством добавлении более новых версий уже
хранящихся файлов: '--update' ('-u').
FIXME: xref reading and Writing
для получения более подробной информации об этих операциях.
Аргументы опций tar изменяют подробности операции, такие как формат
архива, имя архива или уровень диалога пользователя. Вы можете задать
более чем одну опцию. Все опции необязательны.
Аргументы имени файла задают файлы (включая каталоговые файлы) для
архивирования, извлечения, удаления или других операций.
Если вы не используете аргументов имени файла, '--append', 'update'
и '--delete' ничего не делают. Остальные операции tar что-нибудь
делают по умолчанию.
Когда вы используете аргумент имени файла, чтобы задать каталоговый
файл, tar работает со всеми файлами этого каталога, включая
подкаталоги.
Вы можете использовать опцию из нижеследующего списка. Эти опции
задают выполнение основных операций tar.
'--create'
'-c' Создает новый архив.
'--catenate'
'--concatenate'
'-A' Добавляет содержимое одного или более архивов к другому
архиву.
'--append'
'-a' Добавляет файлы в существующий архив.
- 70 -
'--list'
'-t' Выводит список файлов архива
'--delete'
Удаляет из архива его члены.
'--extract'
'--get'
'-x' Извлекает из архива его члены.
'--compare'
'-diff'
'-d' Сравнивает члены архива с файлами системы файлов.
'--update'
'-u' Модифицирует архив путем добавления новый версий уже
хранящихся файлов.
Остальные опции tar изменяют подробности выполнения операции, такие
как формат архива, имя архива или интерактивеый уровень пользователя.
Вы можете задать более чем одну опцию.
Остальные аргументы интерпретируются как имена файлов или имена
членов архива, зависящие от основной операции, выполняемой tar. Для
опций '--append' и '--create' эти аргументы задают имена файлов
(которые, может быть, уже существуют) для помещения в архив. Для
других типов операций дополнительные аргументы задают члены архива для
сравнения, удаления, извлечения, составления списка или
модифицирования. При назывании члена архива вы должны дать его точное
имя, проверив правильность с помощью '--list'.
Если вы не используете дополнительных аргументов, '--append',
- 71 -
'update' и '--delete' ничего не делают. '--create' создаст пустой
архив, если не задать файлы, которые нужно туда добавить. Другие
операции tar ('--list' ('-t'), '--extract' ('-x'). '--compare' ('-d')
и '--update' ('-u')) будут в этом случае работать со всем содержимым
архива.
Если вы даете имя каталога как имя файла или имя члена, tar работает
рекурсивно со всеми файлами и каталогами этого каталога. Например, имя
'/' идентифицирует все файлы системы файлов tar.
Аргумент операции tar задает, какое действие вы хотите произвести.
'-A'
Добавляет копии архива или архивы в конец другого файла.
'-c'
Создает новый архив.
'-d'
Сравнивает файлы архива с их противоположными частями в
системе файлов, и сообщает о различиях в размере, режиме,
имени хозяина, дате модификации и содержимом.
'-r'
Добавляет файлы в конец архива.
'-t'
Выдает список содержимого архива.
'-x'
Считывает файлы из архива и записывает их в действующую
систему файлов.
- 72 -
'-u'
Добавляет файлы в конец архива, но только если они более
новые, чем противоположные части уже в архиве, или их еще не
существует в архиве.
'--catenate'
Добавляет копии архива или архивы в конец другого архива.
'--append'
Добавляет файлы в конец архива.
'--compare'
Сравнивает файлы архива с их противоположными частями в
системе файлов, и сообщает о различиях в размере, режиме,
имени хозяина, дате модификации и содержимим.
'--concatenate'
Добавляет копии архива или архивы в конец другого архива.
'--create'
Создает новый архив.
'--delete'
Удаляет файлы из архива. Удаляются все версии файлов.
'--diff'
Сравнивает файлы архива с их противоположными частями в
системе файлов, и сообщает о различиях в размере, режиме,
имени хозяина, дате модификации и содержимим.
- 73 -
'--extract'
Считывает файлы из архива и записывает их в действующую
систему файлов.
'--get'
Считывает файлы из архива и записывает их в действующую
систему файлов.
'--list'
Выдает список содержимого архива.
'--update'
Добавляет файлы в конец архива, но только если они более
новые, чем противоположные части уже в архиве, или их еще не
существует в архиве.
'--version'
Выдает номер версии программы tar на стандартную ошибку.
Программа tar может создавать архив, извлекать файлы из архива,
модифицировать архив или составлять список его содержимого. Каждый
раз, когда вы работаете с tar, вы должны дать команду, чтобы задать,
что именно из этого вы хотите делать.
Команда должна всегда быть первым аргументом tar. Этот аргумент
может также содержать опции.
FIXME: pxref Invoking tar
Для согласованности с Unix tar первый аргумент всегда
рассматривается как содержащий буквы команд и опций, даже если он
- 74 -
начинается не с '-'. Таким образом, 'tar c' эквивалентно 'tar -c': и
то, и другое задает команду '--create' создания архива.
Кроме того, опции с длинными именами можно использовать, не смешивая
их с однобуквенными флагами. Опции с длинными именами легки для
запоминания и логичны, тогда как об однобуквенных флагах этого не
скажешь. Опции с длинными именами начинаются с '--'.
Аргументы начиная с первого - или опции, если они начинаются с '-'
или '--', или файлы, которыми нужно оперировать.
Имена файлов, которые вы даете как аргументы - файлы, с которыми tar
будет работать - например, это файлы для занесения в архив или для
извлечения из него. Если вы не даете аргументов имени файла, все
зависит от того, какую команду вы используете. Некоторые команды в
этом случае используют все файлы, а некоторые - сообщают об ошибке.
Если аргумент имени файла точно называет каталог, то используются
(рекурсивно) и этот каталог, и все его файлы и подкаталоги.
Список команд tar:
-c
--create Создает новый архив.
Эта команда заставляет tar создать новый архив, содержащий
файлы, заданные на командной строке. Если вы не задаете
файлы, используются все файлы текущего каталога. Если
архивный файл уже существует, на него записывается новый:
старое содержимое теряется.
'-x
--extract
--get
Извлекает файлы из архива.
Эта команда заставляет tar извлекать заданные файлы из
архива. Если не даны имена файлов, из архива извлекаются все
файлы.
- 75 -
-t
--list
Выводит список содержимого архива.
Эта команда заставляет tar вывести на экран список файлов
архива. Если вы задаете имена файлов, будут упомянуты только
заданные вами файлы (но каждый из них упоминается, только
если он есть в архиве).
-d
--diff
--compare
Находит различия между файлами архива и файлами, записанными
на строке. Эта команда заставляет tar сравнивать файл архива
с файлом системы файлов. Он сообщает о различиях в размере,
режиме, имени хозяина и содержимом. Если файл существует в
архиве, но не существует в системе файлов, tar сообщит об
этом. Если вы задаете имена файлов, эти файлы сравниваются,
и все они должны существовать в архиве. Если вы не задаете
файлы, сравниваются все файлы архива.
-r
--append
Добавляет файлы в конец архива.
Эта команда заставляет tar добавлять заданные файлы в конец
архива. Это предполагает, что архивный файл уже существует и
имеет надлежащий формат (что, по-видимому, значит, что он
был предварительно создан программой tar). Если архив имеет
формат, непонятный tar, результаты непредсказуемы.
Вы обязаны задать файлы, которые нужно использовать: по
умолчанию ничего не происходит).
-u
--update
Добавляет в архив более новые версии файлов, чем те, что уже
там находятся.
Эта команда заставляет tar добавлять заданные файлы в конец
архива, как '--append', но только если файла еще нет в
архиве или эта его версия более новая, чем имеющаяся в
- 76 -
архиве (сравнивается время последней модификации).
Добавление файлов в конец архива может быть очень медленным.
Вы обязаны задавать файлы, которые нужно использовать.
-A
--catenate
--concatenate
Добавляет существующие архивы к другому архиву.
Эта команда используется для конкатенирования нескольких
архивных файлов в один большой архивный файл. Все файлы для
этого должны быть архивными файлами. Они все добавляются к
концу архивного файла, с которым работает tar. (Другие файлы
не меняются).
Возникает желание использовать здесь cat, но обычно это не
работает. Архив tar содержит данные, указывающие конец
архива, т.ч. добавленный материал игнорируется. Эта команда
работает, потому что она перемещает маркеры конца архива из
середины.
--delete
Удаляет файлы из архива (если он не на ленте).
Эта команда заставляет tar удалять заданные файлы из архива.
Выполнение этой команды крайне медленно. Будьте осторожны:
использование этой команды для архивов, хранящихся на
магнитной ленте, может привести к их шифровке. Это неудачный
способ удаления файлов с магнитной ленты (за исключением
полной перезаписи архива).
Программа tar может создать архив, извлечь файлы из архива,
модифицировать архив или дать список его содержимого. Каждый раз,
когда вы работаете с tar, вы должны дать команду, чтобы задать, что
именно из этого вы хотите делать.
Команда должна всегда быть первым аргументом tar. Этот аргумент
может также содержать опции.
FIXME: pxref Invoking tar
Для согласованности с Unix tar первый аргумент всегда
- 77 -
рассматривается как содержащий буквы команд и опций, даже если он
начинается не с '-'. Таким образом, 'tar c' эквивалентно 'tar -c': и
то, и другое задает команду '--create' создания архива.
Кроме того, опции с длинными именами можно использовать, не смешивая
их с однобуквенными флагами. Опции с длинными именами легки для
запоминания и логичны, тогда как об однобуквенных флагах этого не
скажешь. Опции с длинными именами начинаются с '--'.
Аргументы после первого - или опции, если они начинаются с '-' или
'--', или файлы, которыми нужно оперировать.
Имена файлов, которые вы даете как аргументы - файлы, с которыми tar
будет работать, например, это файлы для занесения в архив или для
извлечения из него. Если вы не даете аргументов имени файла, все
зависит от того, какую команду вы используете. Некоторые команды в
таком случае используют все файлы, а некоторые сообщают об ошибке.
Если аргумент имени файла точно называет каталог, то используются
(рекурсивно) и этот каталог, и все его файлы и подкаталоги.
Модифицирование архивов.
При создании архива вы можете в него добавить члены,
содержимое другого архива или новые версии уже хранящихся членов, или
удалить уже имеющиеся члены архива.
Чтобы узнать, какие файлы уже хранятся в архиве, используйте 'tar
--list --file=имя_архива'.
FIXME: xref Listing Contents
4.1 Cоздание нового архива *
Опция '--create' ('-c') заставляет tar создавать новый архив. Файлы,
которые должны быть заархивированы, называются на командной строке.
Каждый файл добавится в архив под тем именем, которое дано на
- 78 -
командной строке. (Когда вы даете абсолютное имя файла, tar его
модифицирует).
FIXME: xref Absolute Names
Если вы не даете имена файлов для архивации, создается пустой архив.
Если файлов слишком много, чтобы разместить список на командной
строке, вы можете записать этот список в файл, и tar прочтет его.
FIXME: xref Reading Names from a File
Если вы назвали каталог, то tar заархивирует не только его, но -
рекурсивно - и его содержимое. Например, если вы назвали '/', tar
заархивирует всю систему файлов.
Не используйте опцию '--create' для добавления файлов в существующий
архив: он удалится, и на его место запишется новый. Вместо этого
используйте '--append'.
FIXME: xref Adding to an Existing Archive
Есть разные способы пропускать некоторые файлы и не архивировать их.
FIXME: xref Specifying Names to tar
FIXME: операции, наверно, должны иметь примеры.
Чтобы создать архив, используйте '--create' ('-c'). Чтобы назвать
архив - '--file=имя_архива' с операцией '--create'.
FIXME: pxref Archive Name
Если вы не называете архив, tar использует значение переменной среды
TAPE как имя файла для архива, или, если она недоступна, tar
использует имя по умолчанию.
- 79 -
FIXME: xref Archive Name
для получения более подробной информации о задании имени архива.
В нижеприведенном примере создается архив с именем '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
FIXME: xref File Name Lists
о других способах задания файлов для архивирования.
Заметьте: в вышеприведенном примере архив, содержавший все файлы
рабочего каталога, был записан в рабочий каталог. GNU tar сохраняет
файлы в рабочем каталоге архива, который сам находится в рабочем
каталоге, без вхождения в бесеконечный цикл. С другими версиями tar
такое может быть.
4.2 Добавление в существуюший архив *
Опция '--append' ('-r') заставляет tar добавлять новые файлы в
существующий архив. Она интерпретирует имена файлов и членов так же,
как '--create'. Если вы не задаете списка имен, ничего не случается.
- 80 -
Эта опция никогда не удаляет члены архива. Если новый член
добавляется под тем же именем, что и существующий член, то в архиве
останутся они оба - новый после старого. Для получения более подробной
информации о том, как это происходит,
FIXME: ref Multiple Members with the Same Name
Эта операция не может выполняться на некоторых ленточных драйверах
вследствие недостаточного формата, используемого этим драйвером.
Чтобы добавить файлы в архив, используется '--append' ('-r').
Архив,
который нужно добавить, должен уже существовать и быть в надлежащем
формате (обычно это значит, что он был предварительно создан с помощью
tar). Если архив был создан с не таким размером блока, какой был
задан, tar сообщит об ошибке.
FIXME: pxref Blocking Factor
Если архив не является допустимым архивом tar, результаты
непредсказуемы. Вы не можете добавить файлы в уплотненный архив,
однако вы можете добавить их в последний том многотомного архива.
FIXME: xref Matching Format Parameters
В следующем примере файл 'shemp' добавляется в архив 'stooges',
созданный выше:
tar --append --file=stooges shemp
Вы обязаны задавать файлы, которые нужно добавить.
'--update' действует так же, как '--append', но не добавляет файл в
архив, если там уже есть файл с таким именем, имеющий то же время
модификации.
И '--update', и '--append' существуют для добавления файлов в архив.
Когда вы извлекаете файл из архива, только версия, сохраненная
- 81 -
последней, попадает в систему файлов. Т.к. '--extract' извлекает файлы
из архива последовательно и записывает их под теми же именами в
систему файлов, то если имя файла возникает более чем однажды в
архиве, более поздняя версия этого файла записывается на более раннюю,
которая уже была извлечена. Вы можете избежать хранения старых версий
файла в архиве.
Заметьте: '--update' не приспособлена для выполнения резервного
копирования, потому что она не изменяет содержимое каталога, и потому,
что каждый раз при ее использовании удлиняется архив.
FIXME: xref сценарий резервного копирования для более подробной
информации о резервном копировании.
4.3 Модификация архива *
Опция '--update' модифицирует архив tar c помощью сравнения данных
заданных членов архива с данными файлов под теми же именами. Если файл
был модифицирован позже, чем член архива, то последний уничтожается
(как с помощью '--delete') и затем файл добавляется в архив (как с
помощью '--append'). На тех носителях, где не может выполняться опция
'--delete' (таких как магнитная лента), опция '--update' тоже ошибочна.
Если не названы члены архива (ни на командной строке, ни с помощью
'--files-from=файл_по_имени' ('-T файл_по_имени')), то процесс
охватывает весь архив.
4.4 Комбинирование архивов *
Опция '--concatenate' ('-A', '--catenate') заставляет tar добавлять
содержимое нескольких архивов к существующему архиву.
Назовите архивы для конкатенации на командной строке. (Ничего не
случится, если вы не станете их называть). Члены и их имена
скопируются из этих архивов дословно. Если появится много членов с
одинаковыми именами, ни один из них не уничтожится. Для того, чтобы
- 82 -
узнать, как это происходит,
FIXME: ref Multiple Members with the Same Name
Вы должны использовать эту опцию для конкатенации архивов. Если вы
комбинируете их с помощью cat, результатом может быть архив
недоступного tar формата.
Эту операцию, к сожалению, нельзя выполнять на некоторых ленточных
устройствах, из-за недостаточного формата, используемого ими.
Для того, чтобы добавить копии архива или архивы к концу другого
архива, используйте '--concatenate' ('-A'). Архив-источник и выходной
архив должны уже существовать и быть созданными с подходящими
параметрами формата.
FIXME: pxref Matching Format Parameters
tar остановит чтение архива, если он встретит маркер конца архива.
Утилита cat не уничтожает маркеры конца архива и, таким образом, она
не подходит для конкатенации архивов. '--concatenate' ('-A') удаляет
маркер конца архива из выходного архива перед добавлением каждого
нового архива.
FIXME: xref ignore-zeros
Вы должны задать архивы-источники с помощью '--file=имя_архива' ('-f
имя_архива').
FIXME: pxref Archive Name
Если вы не задаете выходной архив, tar использует значение
переменной среды TAPE, или, если она не задана, имя архива для
умолчания.
В следующем примере содержимое архива 'hail/hail/fredonia'
- 83 -
добавляется к архиву 'stooges' (оба были созданы ранее):
tar --catenate --file=stooges hail/hail/fredonia
Если вам нужно достать файлы из архива, который был добавлен с
помощью утилиты cat, используйте опцию '--ignore-zeros' ('-i').
FIXME: pxref Archive Reading Options
4.5 Удаление членов архива *
Вы можете использовать опцию '--delete' для удаления из архива его
членов. Назовите на командной строке имена членов, которые нужно
удалить. Эта опция переписывает архив, поэтому она не работает на
ленточных устройствах. Если вы не задали список членов, подлежащих
удалению, ничего не происходит.
Чтобы удалить члены архива из архива, используйте '--delete'. Вы
можете задать имена файлов или членов для удаления. Все члены архива
с заданными именами будут удалены из архива.
В нижеприведенном примере файл 'curley' удаляется из архива
'stooges':
tar --delete --file=stooges curley
Вы можете использовать '--delete' для архива, только если архивное
устройство позволяет вам осуществлять запись в любое место носителя.
Предостережение: Не пытайтесь удалить член архива с магнитной ленты,
чтобы не зашифровать архив. Это способ (не считая полного
переписывания архива) не подходит для удаления файлов с большинства
видов магнитных лент.
FIXME: Как насчет автоматического выявления носителя архива? Дает
ошибку, если архивное устройство или в необычном файле, или другой
ввод и вывод (-file=).
- 84 -
4.6 Вывод списка членов архива *
Опция '--list' ('-t') выводит список имен членов архива. Назовите
имена членов, которые нужно занести в список, на командной строке
(чтобы модифицировать способ интерпретации этих имен).
FIXME: pxref Specifying Names to
Если вы не называете имена членов, '--list' выведет список всех
членов архива.
Чтобы увидеть больше чем только имена членов, используйте опцию
'--verbose', чтобы заставить tar напечатать список, как при
использовании 'ls -l'.
Список содержимого архива
'--list' выводит список имен членов архива на стандартный вывод.
Если вы задаете на командной строке аргументы имени файла (или
используете опцию '--files-from=файлы_с_именами',
FIXME: pxref File Name Lists
только файлы, которые вы задаете, будут занесены в список (если они
существуют в архиве). Незаданные файлы игнорируются, даже если они
находятся в заданном каталоге.
Если вы включаете опцию '--verbose', tar печатает список архива, как
при 'ls -l'.
FIXME: pxref Additional
Information
для описания опции '--verbose'.
Если блочный фактор архива отличается от соответствующего
- 85 -
умолчанию, tar сообщает об этом.
FIXME: xref Blocking Factor
FIXME: xref Archive Reading Options
для получения списка, который можно использовать для модификации
операции '--list'.
В очередном примере выводится список членов архива '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
- 86 -
-rw-rw-rw- ringo/user 42 Jul 4 17:29 1776 sneezy
4.7 Извлечение членов архива *
Используйте '--extract' или '--get' для извлечения из архива его
членов. Для каждого названного члена (или для всего архива, если не
названы члены) на командной строке - или с помощью
'files-from=файлы_с_именами' - создается файл с содержимым члена
архива. Имя файла то же, что и имя члена.
Некоторые опции заставляют tar извлекать больше, чем только
содержимое файла - имя хозяина, дату модификации и т.д.
FIXME: начало
Опции '--same-permissions' или '--preserve-permissions' заставляют
новый файл иметь те же возможности, что имел изначальный файл, когда
-находился в архиве. Без этих опций для этого используется текущий
umask.
При извлечении tar обычно присваивает времени модификации значение,
записанное в архиве. Это позволяет сделать опция '--modification-time'
('-m').
FIXME: конец
Чтобы считать члены архива и записать их в систему файлов,
используйте '--extract'. Сам архив остается неизмененным.
Если вы не задали файлы, подлежащие извлечению, tar извлечет все
файлы архива. Если вы задали имя каталога как аргумент имени файла,
tar извлечет все файлы, хранящиеся как часть этого каталога. Если файл
был сохранен с именем каталога, являющимся частью имени файла, tar
создаст каталог.
FIXME: xref Selecting Archive
Members
- 87 -
для получения более подробной информации о задании файлов для
извлечения.
В следующем примере показано извлечение архива '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').
FIXME: pxref File Writing Options
Если архив был создан с помощью '--block-size=512-размер' ('-b
512-размер), '--compress' ('-Z') или '--multi-voloume' ('-M'), вы
должны задать эти опции опять при извлечении файлов из архива.
FIXME: oxref Format Variations
4.7.1 Опции, помогающие чтению архива *
- 88 -
FIXME: Обзор опций после меню.
Обычно tar требует данных в полных блоках из устройства хранения
архива. Если устройство не может возвращать полный блок, tar сообщает
об ошибке. Однако некоторые устройства не всегда возвращают полные
блоки или не требуют, чтобы последний блок архива ложился к границе
следующего блока. Чтобы продолжать читать до тех пор, пока вы не
получите полный блок, или принять неполный блок, если он содержит
маркер конца архива, задайте опцию '--read-full-blocks' ('-B') в
сочетании с операциями '--extract' или '--list'.
FIXME: xref Listing Contents
Опция '--read-full- blocks включается по умолчанию, когда tar читает
архивы со стандартного ввода или с удаленной машины. Это из-за системы
BSD Unix. Если эта опция не включена, tar столкнется с ошибкой при
чтении неполного блока из канала.
Если вы не уверены в блокирующем факторе архива, вы можете прочитать
архив с помощью задания '--read-full-blocks' и
'--block-size=512-размер', используя блочный фактор больше, чем
использует архив. Это позволит вам избежать определения блочного
фактора архива.
FIXME: xref Blocking Factor
'--read-full-blocks'
'-B'
Используется в сочетании с '--extract' для чтения архива, содержащего
неполные блоки или имеющего блочный фактор меньше, чем заданный.
Обычно tar прекращает чтение, когда он сталкивается с блоком нулей
между элементами файла (который обычно обозначает конец архива).
'--ignore-zeros' ('-i') позволяет tar полностью читать архив,
содержащий блок нулей перед концом (т.е. архив, который был поврежден
или создан c помощью cat из нескольких архивов).
- 89 -
Опция '--ignore-zeros' выключает реакцию на умолчание, потому что во
многих версих tar после конца архива печатается ненужная информация,
из-за чего какая-то часть носителя никогда не будет прочитана. В GNU
tar в конце архива не пишется ничего, но между архивирующими утилитами
нужна согласованность.
'--ignore-zeros'
'-i'
Для игнорирования блоков нулей, с которыми можно столкнуться при
чтении архива. используется в сочетании с '--extract' или '--list'.
Если вы используете машину с небольшим количеством памяти и вам
нужно составить большой список имен, вы можете уменьшить место,
необходимое tar для этого. Чтобы это сделать, задайте опцию
'--same-order' ('-s') и обеспечьте упорядоченный список имен файлов.
Эта опция сообщает tar, что аргументы имени, данные на командной
строке или считанные из файла при помощи
'--files-from=файлы_с_именами', записаны в том же порядке, что и файлы
в архиве.
Вы можете создать файл, содержащий упорядоченный список файлов
архива с помощью 'tar --list --file=имя_архива'.
FIXME: xref Listing Contents
для информации об операции '--list'.
Эта опция в современных компьютерных системах, наверно, не нужна.
'--same-order'
'--preserve-order'
'-s'
Для составления длинных списков имен на машинах с небольшим
количеством памяти. Используется в сочетании с '--compare', '--list'
или '--extract'.
FIXME: даже хотя она нам не нужна - сохраним еще раз
- 90 -
4.7.2 Изменения в записи tar файлов *
FIXME: найти более подходящее название
Обычно tar записывает извлеченные файлы в систему файлов
безотносительно к тому, существуют ли они уже в системе файлов: файлы
с теми же именами, что уже имеющиеся, записываются на них. Чтобы
предотвратить извлечение tar из архива его членов при перезаписывании
файлов в систему файлов, используйте '--keep-old-files' в сочетании с
'--extract'. Когда задана эта опция, tar сообщает об ошибке,
констатирующей конфликт имен файлов вместо записи файлов из архива.
'--keep-old-files'
'-k'
Предотвращает записывание новых файлов на старые в системе файлов во
время извлечения файлов.
Обычно tar устанавливает время модификации извлекаемых файлов равным
времени модификации, записанному для файлов в архиве, но ограничивает
разрешения извлекаемых файлов с помощью umask.
Чтобы установить время модификации равным времени извлечения файлов,
используйте опцию '--modification-time' ('-m') в сочетании с
'--extract'.
'--modification-time'
'-m'
Устанавливает время модификации извлеченных членов архива
равным времени извлечения файлов, а не времени, записанному
для них в архиве. Используется в сочетании с '--extract'.
Чтобы установить режимы извлечения файлов к тем, что записаны для
них в архиве, используется опция 'same-permissions' в сочетании с
операцией '--extract'.
preserve-permission'
- 91 -
'--same-permission'
'--ignore-umask'
'-p'
Устанавливает режимы извлечения файлов к тем, что записаны для
них в архиве, вместо установления umask. Используется в
сочетании с '--extract'.
FIXME: следующий абзац нужно переписать: почему нельзя применить к
этим файлам cat? Можно ли это использовать для более чем одного
файла?
Чтобы вывести извлеченные файлы на стандартный вывод вместо создания
файлов в системе файлов, используйте '--to-stdout' ('-O') в сочетании
с '--extract'. Эта опция используется, если вы выводите файлы для
того, чтобы послать их через канал, и нет необходимости хранить их в
системе файлов.
'--to-stdout'
'-O'
Записывает файлы на стандартный вывод. Используется в сочетании
с '--extrsct'.
FIXME: Зачем нужно выводить отдельные файлы на стандартный вывод?
Используется ли это для более чем одного файла?
4.7.3 Извлечение с недостаточного пространства диска *
Если предыдущая попытка извлечь файлы потерпела неудачу вследствие
недостатка места на диске, вы можете использовать
'--starting-file=имя' ('-K имя) для того, чтобвы начать извлечение
только начиная с названного файла при извлечении файлов из архива.
Это, разумеется, предполагает, что или сейчас здесь есть свободное
место, или вы извлекаете файлы в другую систему файлов.
'--starting-file=имя_файла'
'-K имя_файла'
Начинает операцию в середине архива. Используется в сочетании с
- 92 -
'--extract' или '--list'.
Если вы замечаете, что во время операции извлечения вы находитесь
вне пространства диска, вы можете заставить tar удалить из системы
ненужные файлы и затем начать эту операцию заново. В этом случае в
'--starting-file=имя' нет необходимости.
FIXME: xref -incremental, xref -interactive, zref -exclude
4.8 Сравнение членов архива с файлами *
Опция '--compare' ('-d', '-diff') сравнивает содержимое заданных
членов архива с файлами под теми же именами, и сообщает о различиях,
которые находит. Если на командной строке или с помощью
'--files-from=файлы_с_именами' члены не заданы, сравнение происходит
для всех членов архива.
4.9 Согласование параметров формата *
Некоторые параметры формата должны быть взяты в рассмотрение при