Прим.: текст немного "битый" -- какие-то пропуски, опечатки..
Прим.: текст немного "битый" -- какие-то пропуски, опечатки..
В этой главе представляются некоторые понятия, используемые в данном руководстве, такие как "архив", "член", "имя", "распаковать" и др., а также рассказывается, кто написал GNU tar и документацию к нему, и объясняется, как послать сообщение об ошибке или комментарий.
Программа tar используется для создания tar-архивов и манипулирования ими. Архив - это файл, заключающий в себе содержимое многих файлов. Кроме того, архив идентифицирует имена файлов, их хозяев и т.д. (в архивах также записываются разрешение доступа, пользователь и группа, размер в байтах и время последней модификации. В некотрых архивах еще указываются имена файлов в каждом заархивированном каталоге и информация о каталогах).
Файлы, соодержащиеся в архиве, называются членами aрхива. В данном руководстве мы используем термин "файл" только для файлов, доступных обычным способом (с помoщью ls, cat и т.д.), и термин "члены архива" для обозначения членов архива. Аналогично, "имя файла" - для имен файлов в системе файлов, а "имя члена архива" - для имени члена архива внутри архива.
Изначально tar-архивы использвались для компактнго хранения файлов на магнитной ленте - отсюда термин tar (tape archiver). Вне зависимости от имени утилиты tar может направлять свой вывод на любое доступное устройство, а текже хранить ее в файле или направлять в другую программу через канал. tar также может иметь дооступ к удаленным устройствам и файлам.
Есть много способов использования tar-архивов. Расскажем о некоторых из них: хранении, резервном копировании и транспортировке.
Часто tar-архивы используются для переноса файлов по сети. Например, проект GNU размещает свое программное обеспечение в tar-архивах так, что все файлы, относящиеся к определенной программе (или ко множеству программ) могут переноситься как единое целое.
Магнитная лента может сохранять последовательно несколько файлов, но они при этом не имеют имен - только относительное положение на ленте. tar-архив - один из способов сохранить несколько файлов на одной ленте и запомнить их имена. Даже когда основной переносной механизм может содержать дорожку имен, как FTP, неудобство поддерживания множества файлов, каталогов указателей делает tar-архивирование привлекательным методом.
Заархивированные файлы также используются для долгосрочного хранения.
Поскольку архивы, созданные tar, могут сохранять инфоормацию файла и структуру каталога, tar обычно используется для выполнения полного и пошагового резервного копирования диска, складывания вместе пучка файлов, возможно, относящихся к разным пользователям и проектам, во избежание случайного разрушения этих дисков.
GNU tar первоначально был написан Джоном Гилмором и впоследствии много раз модифицирован. Усовершенствования GNU были написаны Джеем Фенальсоном, и весь пакет был впоследствии поддержан Майклом Бушнеллом, а затем Франсуа Пинардом, с помощью многочисленных пользователей. Хотелось бы подчеркнуть, что tar создан в процессе коллективной работы и многим обязан тем людям, которые сообщали о проблемах, предлагали решения и делились своими мыслями и соображениями.
Джей Фенальсон набросал эскиз руководства по GNU tar, позаимствовав кое-что у Джона Гилмора, этот эскиз распространен в версиях начиная с 1.04 (или более ранней) до 1.10, и потом использован в версии 1.11. Майкл Бушнелл и Эми Горин работали над руководством по GNU tar. Для версии 1.11.8 Франсуа Пинард создал новое руководство, слив воедино информацию из разных источников.
Пожалуйста, сообщите обо всех ошибках, замеченных вами в этой программе, по адресу bug-gnu-utils$prep.ai.mit.edu. Вы можете также написать непосредственно и менее официально по адресу pinard@iro.umontreal.ca. Существует ряд основных версий tar, очень много их накопилось в последние годы. Вы можете ожидать быстрого признания ваших замечаний, но собственно их внедрение может сильно затянуться.
Эта глава проведет вас по основным примерам операций tar. Если вы уже знаете, как использовать какие-нибудь другие версии tar, вам, видимо, нет необходимости ее читать. В этой главе опускаются сложные подробности многих методов работы tar. Для получения более полной информации см. дальнейшие главы.
Перед тем, как перейти к этой главе, убедитесь, что вы уже понимаете и отчетливо представляете, что такое "архив" и "член архива".
B примерах операций tar строкам, которые вы должны напечатать, предшествует '%' - это обычное приглашение оболочки. В примерах и в обсуждении в тексте мы используем мнемонические формы операций и опций, но краткие их формы дают тот же результат.
Большая часть опций tar дана и в краткой, и в длинной формах. Опции, описываемые во введении, (за исключением '--delete', которая не имеет сокращенной формы) имеют следующие аббревиатуры:
'--create' '-c'
'--list' '-t'
'--extract' '-x'
'--append' '-r'
'--verbose' '-v'
'--file=имя_архива' '-f имя архива'
Эти опции облегчают набор длинных команд. Например, вместо того,
чтобы набирать
tar --create --file=/tmp/afiles.tar --verbose apple agnst asparagus
можно набрать
tar -c -f /tmp/afiles.tar -v apple angst asparagus
Для более подробной информации по синтаксису опций
Когда мы упоминаем какую-нибудь мнемоническую опцию в тексте, мы также иногда даем соответствующую краткую опцию в скобках.
Для создания нового архива используйте опцию '--create' (-c). В общем случае можно использовать опцию '--file=имя_архива' ('-f имя_архива') для задания имени, которое будет иметь архив tar. Затем задайте имена файлов, которые вы хотите поместить в новый архив. Например, чтобы занести файлы 'apple', 'angst' и 'asparagus' в архив по имени 'afiles.tar', используйте следующую команду:
tar --create --file=afiles.tar apple angst asparagus
При использовании мнемонических опций порядок аргументов не важен.
Вы можете также набрать:
tar apple --create angst --file=afiles.tar asparagus
Однако этот порядок труднее для восприятия. В данном руководстве мы даем список аргументов в причинно-следственном порядке, чтобы сделать команды более легкими для понимания, но вы можете набирать их в том порядке, который вам нравится.
Если вы не задали имена файлов для занесения в архив, то tar создаст пустой архив. Нижеследующие команды создают архивы, в которых ничего нет:
tar --create --file=empty-archive.tar
Где бы вы не использовали '--create' ('-c'), tar уничтожает текущее
содержимое файла c помощью '--file=имя_архива' ('-f имя_архива'), если
он существует. Чтобы добавить файлы в существующий архив, вы должны
использовать другую опцию.
Когда архив создается с помощью '--create' ('-c'), имена членов архива такие же, как имена файлов, которые вы набрали в команде tar. Таким образом имена членов 'afiles' (как созданные в первом примере, приведенном ранее) - 'apple', 'angst' и 'asparagus'. Однако предположим, что архив был создан с помощью следующей команды:
tar --create --file=bfiles.tar./ballons baboon ./bodacious
Тогда файлы 'ballons', 'baboon' и 'bodacious' будут помещены в архив (потому что './' - синоним текущего каталога), но их имена как членов архива будут './ballons', 'baboon' и './bodacious'.
Если вы хотите увидеть, как tar заносит файлы в архив, вы можете использовать опцию '--verbose' ('-v').
Если один из файлов, названный с помощью '--create' ('-c') - каталог, то операция tar более сложна.
Если вы не задали опцию '--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 будет использовать значение для умолчания.
Нижеследующий пример покажет вам, как создать архивный файл, если ваш рабочий каталог содержит еще и другие файлы. В этом примере используются три файла под названиями 'blues', 'folk' и 'jazz'. Архивный файл называется 'records'. Кроме того, что архив в данном примере записывается в систему файлов, его можно записать на магнитную ленту. (Если вы хотите проследить этот и следующие примеры, создайте подкаталог, содержащий файлы с этими именами. Чтобы создать каталог, наберите 'mkdir practice' в качестве приглашения для системы. Вы можете создать файлы при помощи текстового редактора, например emacs).
Если вы хотите заархивировать каталог, содержащий файлы, перечислите содержимое каталога.
Наберите:
% cd practice
% ls
Система отвечает:
blues folk jazz
%
Это для того, чтобы проверить, что файлы, подлежащие архивации,
действительно существуют в рабочем каталоге, и чтобы проверить, что
имя архива, которое вы выбрали, еще не использовано. Если бы
оказалось, что оно уже использовано, 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' - ваш рабочий каталог.
Теперь проверьте, что файлы, подлежащие архивации, действительно существуют в рабочем каталоге, и убедитесь, что в рабочем каталоге нет файла с тем именем архива, которое вы хотите использовать:
Чтобы получить список имен файлов рабочего каталога, наберите:
% ls
Cистема отвечает:
blues folk jazz
%
Затем:
% tar --create --file=records blues folk jazz
Если вы теперь перечислите содержание рабочего каталога, вы найдете
файл архива, записанный так же, как файлы, которые вы видели раньше.
% ls
blues folk jazz records
%
Когда имена файлов или членов задают каталоги, оперирование 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=имя_архива.' извлекает не все содержимое из архива, а только тех членов, чьи имена начинаются с '/'.
Вы можете заархивировать каталог с помощью задания его имени в качестве аргумента имени файла. Файлы каталога будут заархивированы относительно рабочего каталога, и все содержимое каталога будет создано заново, когда архив будет извлечен.
Чтобы заархивировать каталог, в первую очередь нужно переместиться на его верхний каталог. Если вы следуете введению, вы должны набрать:
% сd ..
%
В верхнем каталоге вы можете задать подкаталог как аргумент имени
файла. Для того, чтобы сохранить каталог 'practice' в файле 'music'
архива, наберите:
% tar --create --verbose --file=music practice
tar выведет:
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Заметьте, что архив таким образом создается не в подкаталоге
'practice', а в рабочем каталоге - в том, из которого был вызван tar.
Перед тем, как пытаться заархивировать каталог с верхнего каталога, вы
должны убедиться, что у вас есть доступ не только к каталогу, который
вы пытаетесь заархивировать с помощью tar, но и к рабочему каталогу.
Попытка сохранить ваш домашний каталог в архиве с помощью вызова tar
из корневого каталога, вероятно, не удастся.
(Заметьте также, что 'records', начальный файл архива, сам заархивирован. tar воспринимает любой файл, независимо от его содержания, как файл для архивации. Когда извлекается 'music', файл 'records' архива будет записан заново в систему файлов).
Вы можете сохранить каталог в архиве, используя имя каталога как аргумент имени файла tar. Когда вы задаете файл каталога, tar архивирует его и все файлы, которые этот каталог содержит. Имена каталога и файлы, которые он содержит, хранятся в архиве, относящемся к текущему рабочему каталогу: когда каталог извлечен, они записываются в систему файлов, соответствующую рабочему на этот момент каталогу.
Чтобы заархивировать каталог, в первую очередь переместитесь на его верхний каталог. Если вы следуете введению, наберите:
% cd ..
%
В верхнем каталоге задайте подкаталог, используя аргумент имени
файла. Чтобы сохранить файл '~/practice' каталога в файле 'music'
архива, наберите:
% tar --create --verbose --file=music practice
tar ответит:
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Заметьте, что '~/practice/records', другой файл архива, сам
заархивирован. tar воспринимает любой файл, даже файл архива, как
подлежащий архивации.
Несмотря на то, что операция '--list' ('-t'), заданная c помощью опции '--verbose' ('-v'), используется при сравнении файлов в текущем архиве с файлами системы файлов (что позволяет пользователю сравнивать размер и даты модификации), проще заставить сам tar cравнивать атрибуты файлов и сообщать о различиях между файлами. Чтобы это сделать, используйте операцию '--compare' ('-d') или '--diff'.
Операция '--compare' ('-d'), как показывает ее название, заставляет tar сравнивать файлы и каталоги в архиве с помощью противоположных частей (файлов с тем же именем) в системе, и возвращать различия в размере файлов, режиме, датах создания и модификации. При выполнении операции '--compare' tar имеет дело только с файлами архива, игнорируя файлы активной системы файлов, если они не существуют в архиве. Если tar дается имя файла, не существующего в архиве, он выдает сообщение об ошибке.
Чтобы сравнить файлы в каталоге с их противоположными частями в файле 'records' архива в том же каталоге, вы должны, находясь в каталоге 'practice':
% tar --compare --file=records
%
Несмотря на то, что кажется, будто ничего не происходит, фактически
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 возвращает сообщение об ошибке:
% tar --compare --verbose --file-records rock tar: rock not found in archive %
Чтобы сравнить атрибуты членов архива с атрибутами других противоположных частей в системе файлов, используется операция '--compare' ('-d') или 'diff'. Хотя вы можете использовать '--list --verbose' ('-tv') для сравнения вручную некоторых атрибутов файлов, проще заставить сам tar сравнивать атрибуты файлов и сообщать о различиях в них.
Операция '--compare', как видно из ее имени, сравнивает члены архива с файлами под теми же именами в системе файлов, и сообщает о различиях в размере, режиме, датах создания и модификации. 'tar + compare' имеет дело только с членами архива: он игнорирует файлы системы файлов, не хранящиеся в архиве. Если вы с '--compare' даете ('-d') аргумент имени, который не соответствует имени члена архива, tar отвечает сообщением об ошибке.
Чтобы сравнить члены архива в файле 'records' архива с файлами в каталоге '~/practice', в первую очередь нужно перейти к каталогу 'practice'. Затем:
% tar --compare --file=кусщквы
%
Хотя кажется, чтол ничего не произошло, 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' (используя любой текстовый редактор). Новый файл
появляется, когда вы смотрите содержимое каталога:
Кроме использования '--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' - в качестве аргумента имени файла.
% 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
Используйте '--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' и содержащий имя хозяина, размер файла и т.д.
Вы можете также задать имена членов, используя '--list' ('-t'). В этом случае tar выдаст список только тех имен членов, которые вы идентифицировали. Например, 'tar --list --file-afiles.tar apple' выдаст только 'apple'. Это очевидно, когда заданные в качестве имен членов имена в точности являются именами членов. Например, 'tar --list --file=bfiles baloons' ничего не выдаст, потому то нет члена по имени 'baloons', а только './baloons'. Хотя 'baloons' и './baloons' - имена одного и того же файла, при простейшем сравнении, для которого необходим точный набор, имена членов различаются.
Вы можете можете получить список только что созданного архива с помощью другой опции tar: '--list' ('-t'). Чтобы получить список содержимого архива, наберите:
% tar --list --file=records
tar ответит:
blues folk jazz
для получения более подробной информации об операции '--list' ('-t').
Вы можете использовать '--list' для вывода списка файлов архива. Если вы используете аргументы имени файла в этой операции, tar ищет заданные файлы в архиве и высвечивает их имена, только если они действительно там хранятся. Bы можете использовать '--list'('-t') с опцией '--verbose' ('-v'), чтобы узнать атрибуты (имя хозяина, размер и т. д.) хранимого файла.
Вы можете получить список содержимого архива и с помощью другой операции tar: '--list' ('-t'). Чтобы получить список только что созданного архива, наберите:
% tar --list --file=records
tar ответит:
blues folk jazz
для получения более подробной информации об операции '--list' ('-t').
В предыдущем примере вы создавали архив 'music' в домашнем каталоге. Чтобы получить список 'music':
% tar --list --file=music
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Используйте '--list' ('-t') для выдачи имен файлов, хранящихся в
архиве. Если вы используете аргументы имени файла в этой операции, tar
выдаст имена заданных файлов, если они хранятся в архиве. Если вы
используете имя каталога как аргумент имени файла, tar выдает также
имена всех нижележащих файлов, включая подкаталоги. Если вы не
используете аргументы имени файла, tar выдает имена всех членов архива.
Вы можете использовать '--list' c '--verbose' для вывода атрибутов членов архива (имени хозяина, размера и т.д.).
Чтобы получить список имен файлов, хранящихся в архиве, используйте операцию '--list' ('-t') tar.
В предыдущем примере вы создали архив '~/music'. Чтобы получить список его содержимого, находясь в вашем домашнем каталоге:
% tar --list --file=music
practice/
practice/blues
practice/folk
practice/jazz
practice/records
Когда вы задаете опцию '--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 выводить
имена файлов, а при использовании '--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' в
сочетании со всеми другими операциями этот эффект наблюдается.
Чтобы узнать, находится ли определенный файл в архиве, задайте имя файла. Например, если вы хотите проверить, находится ли файл 'folk' в архивном файле 'music', вы:
Наберите:
% tar --list --file=music practice/folk
tar ответит:
practice /folk
Если бы файла не было в архиве (как, например, файла
'practice/rock'), предыдущий пример выглядел бы следующим образом:
% tar --list --file=music practice/rock
tar: practice/rock не найден в архиве
Опция '--verbose' не оказывает никакого влияния на выполнение
операции '--list', если вы задали аргументы имени файла.
Чтобы узнать, содержится ли конкретный файл в архиве, используйте имя файла. Например, чтобы проверить, содержится ли файл 'folk' в архивном файле 'music', проделайте следующее:
Наберите:
% 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
Чтобы получить информацию о содержимом заархивированного каталога, используется имя каталога как аргумент имени файла в сочетании с '--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
-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
имеет дело со всеми файлами (включая файлы подкаталогов) этого
каталога.
Для того, чтобы извлечь члены из архива, используется опция '--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').
Если вы не перечисляете имен членов архива, '--extract' извлечет имена всех членов архива.
Если вы даете опцию '--verbose', то '--extract' напечатает имена членов архива, которые только что извлек .
Очевидно, что конечная цель пользователей tar - получить свои файлы обратно. Чтобы это сделать, используйте операцию '--extract' или '--get'. '--extract' ('-x') может использоваться для извлечения отдельного файла из архива или для того, чтобы записать все файлы архива обратно в систему файлов.
В предыдущем примере вы конкатенировали два архива: 'music' и 'practice/records'. Теперь, чтобы извлечь полное содержание 'music' (выходной файл процесса конкатенации), вы должны, находясь в домашнем каталоге:
% 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
Однако, если вы более строго просмотрите файлы каталога, вы
получите, что файлы '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
classical %
Если вы теперь проверите файлы в практическом каталоге, вы найдете,
что они обновили свое состояние. Старые версии файлов, которые
хранились в 'music' с предыдущим именем каталога, записаны в
новосозданный подкаталог рабочего каталога (ваш подкаталог
'practice'). Новый каталог также называется 'practice'.
Cоздание архива - только половина дела: нет смысла хранить файлы в архиве, если потом нельзя их извлечь. Чтобы извлечь файлы из архива, используется операция '--extract' ('-x').
Чтобы извлечь заданные файлы, используют из имена как аргументы имени файла. Если вы используете имя каталога как аргумент имени файла, tar извлекает все файлы (включая подкаталоги) этого каталога. Если вы не используете аргументы имени файла, tar извлекает все файлы архива.
Заметьте: tar извлекает член архива в систему файлов без проверки, не существует ли уже файл с таким именем члена архива. Если он уже существует, его содержание уничтожится, т.к. tar запишет на его место другой файл.
Чтобы извлечь определенные файлы, задайте их, используя аргументы имени файла.
В вышеприведенном примере вы создали архивный файл '~/practice/records', содержащий файлы 'blues', 'folk' и 'jazz' в каталоге 'practice'. Если по какой-то причине вы лишились одного из этих текстовых файлов (rm ~/practice/blues'), вы можете извлечь его из архивного файла.
В первую очередь перейдите в каталог 'practice'. Затем:
% tar --extract --file=records blues
Если вы посмотрите список содержимого каталога, вы увидите, что
'blues' стоит последним:
% ls
folk
jazz
records
blues
Чтобы извлечь каталог и все файлы, которые он содержит, используется имя каталога как аргумент имени файла в сочетании с 'tar + extract'. Помните: tar хранит и извлекает файлы с именами, относящимися к рабочему каталогу.
В предыдущем примере вы хранили каталог '~/practice' в архивном файле '~/music'. Если вы уничтожили содержание 'practice', вы можете восстановить его.
В первую очередь перейдите в подкаталог 'practice' ('cd ~/practice'). Затем удалите все файлы в '~/practice'('rm*'). Если вы теперь посмотрите список каталога, то увидите, что он пустой:
% 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', потому
что он уже существует. И извлечение других членов архива работать не
будет.)
Если вы хотите добавить файлы в существующий архив, нельзя использовать '--create'('-c'). Эта опция уничтожит архив и создаст новый на его месте. Вместо этого используется '--append' ('-r'). Команда 'tar --append --file=afiles.tar arbalest' добавит 'arbalest' в существующий архив 'afiles.tar'. При использовании '--append' архив должен уже существовать.
Как и с помощью '--create', нооводобавленные файлы могут быть извлечены так же, как если бы их имена как членов архива были даны на командной строке. Опция '--verbose' выведет имена файлов в том порядке, как они были записаны в архив.
Если вы '--append' добавляете в архив файл под именем, которое уже имеет один из членов архива, старый член не уничтожается. Но происходит, однако, довольно сложный процесс.
Если вы хотите уничтожить член архива, используйте сначала '--delete', а затем '--append'.
Вместо того, чтобы создавать новый архив кажадый раз, когда вы хотите сохранить файл, иногда более целесообразно добавлять файлы в уже существующий архив.
Чтобы добавить файл в уже существующий архив, используйте операцию '--append'. Чтобы записать новые версии членов архива в архив, используйте операцию '--update' ('-u').
Если вы используете tar для создания архива целого каталога или каталогового дерева, более разумно, когда резервное копирование производится только для тех файлов архивов, которые недавно созданы или изменялись в процессе последнего резервного копирования.
Ччобы добавить новые файлы в существующий архив, или добавить новые версии старых файлов, вы можете использовать операцию '--append' или '--update'.
Простейший способ добавить файлы в уже существующий архив - операция '--append' ('-r'), которая записывает заданные файлы в архив, безотносительно к тому, существуют ли они уже среди файлов архива. Когда вы используете '--append', вы обязательно должны задать аргументы имени файла, т.к. по умолчанию они не задаются. Если вы задаете файл, уже существующий в архиве, другая его копия добавляется в конец архива.
В одном из вышеприведенных примеров вы создавали в каталоге файл по имени 'rock', которого не существовало ни в архивном файле 'records' практического каталога, ни в архивном файле 'music' рабочего каталога. Чтобы добавить 'rock' в 'records', вы должны, находясь в практическом каталоге:
% tar --append --file=records rock
Если вы теперь воспользуетесь операцией '--list', вы увидите, что
'rock' появился в архиве:
% tar --list --file=records
blues
folk
jazz
rock
Хотя все новосозданные файлы добавились в 'records', он еще не
является текущим относительно содержимого практического каталога. Если
обратиться к предыдущему примеру, использовавшему '--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' (которая имеет то же имя, что и
старая) запишется на версию, которая была записана первой.
Простейший способ добавить файл в уже существующий архив - операция '--append' ('-r'), которая записывает файлы в архив безотносительно к тому, являются ли они уже членами архива. Когда вы используете '--append', вы обязаны использовать аргументы имени файла. Если вы задаете файл, уже хранящийся в архиве, tar добавляет в архив другую копию файла.
Если вы прорабатывали предыдущие примеры, у вас должен быть текстовый файл по имени '~/practice/rock', который не хранится ни в архивном файле '~/practice/records', ни в архивном файле 'music'. Чтобы добавить 'rock' в 'records', сначала сделайте 'practice' рабочим каталогом ('cd practice'). Затем:
% tar --append --file=records
blues
folk
jazz
rock
Вы можете использовать '--append' для подержания членов архива текущими с помощью активных файлов. Т.к. '--append' сохраняет файлы вне зависимости от того, есть ли уже в архиве файлы с такими именами, вы можете использовать '--append' для добавления более новых версий членов архива в архив. Когда вы извлекаете файл, только версия, сохраненная последней, входит в систему файлов. Т.к. '--extract' извлекает файлы из архива последовательно и перезаписывает их в систему файлов под теми же именами, если файл возникает в архиве больше, чем однажды, последняя версия этого файла будет записана на предыдущую версию, которая только что была извлечена.
Если вы вспомните предыдущий пример, использовавший '--compare', 'blues' был изменен после того, как был создан архив 'records'. Однако проще использовать '--append' для того, чтобы добавить новую версию 'blues' в 'records'.
% tar --list -f records
blues
Если вы теперь посмотрите список содержимого архива, вы увидите следующее:
% tar --list -f records
blues
folk
jazz
rock
blues
Новейшая версия 'blues' - в конце архива. При извлечении файлов
'records' из архива более новая версия 'blues' (имеющая то же имя, что
и старая), запишется на версию, сохраненную первой. Когда
заканчивается выполнение 'extract', в системе файлов находится только
более новая версия 'blues'.
Поскольку опция '--append' используется для модифицированных файлов в архиве, для сохранения архива текущим вы должны сначала использовать опции '--compare' ('-d') или '--list' ('-t') для того, чтобы определить, какие файлы были изменены (или намереваться занять пространство путем добавления идентичных копий архивных файлов в конец архива). Проще использовать операцию '--update' и заставить tar работать за вас.
Опция '--update' ('-u') заставляет tar добавлять файлы в коней архива, так же, как опция '--append' ('-r'). Когда вы вызываете tar c помощью задания опции '--update', вы должны задать аргументы имени файла. В отличие от '--append', '--update' заставляет tar проверять архив, подлежащий модификации, на тот предмет, сохранен ли уже задаваемый файл. Если файл (или что-то с тем же именем) уже в архиве, tar cмотрит дату модификации его в архиве и сравнивает ее с датой модификации файла с тем же именем в системе файлов. Файл заносится в архив только если он новый или дата его модификации была изменена на более позднюю.
Чтобы увидеть опцию '--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 сообщает об ошибке.
Вы можете использовать опцию '--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 не записывает более новые версии файлов на старые члены архива - он хранит их отдельно. Это потому, что члены архива возникают в нем в том порядке, в котором они хранятся, и некоторые архивные устройства не позволяют запись в середину архива.
Иногда, вместо того, чтобы добавлять отдельные файлы в конец архива, бывает более удобно добавлять сами архивы в конец архива. Хотя интуитивно для этой цели хочется использовать cat, утилиту для добавления файлов в совокупности, архивы, созданные tar, помечаются на конце файловым маркером, который уничтожается, если конкатенированные архивы должны читаться как один архив.
Таким образом,чтобы добавить архивы к концу другого архива, вы должны использовать операцию '--concatenate' ('-A').
В более ранних примерах вы создали архивный файл 'music' в вашем домашнем каталоге. Однако, с тех пор вы изменили содержание каталога 'practice', который хранился в архиве. 'records', архивный файл в каталоге'practice', недавно был модифицирован, и содержит текущую версию файла в 'practice'. Но прежде чем модифицировать 'music', давайте добавим в него 'records'.
% cd..
% tar --concatenate --file=music practice/records
Прежде чем посмотреть новое содержание 'music', давайте извлечем все
файлы, чтобы увидеть, что произошло.
Чтобы конкатенировать архивные файлы, используйте опцию '--concatenate' ('-A'). Эта операция добавляет другие архивы в конец архива. Хотя интуитивно для этой цели хочется использовать cat, утилиту для добавления файлов в совокупности, архивы, сложенные вместе, не могут быть прочитаны tar. Архивные файлы помечаются на конце файловым маркером: если архивы конкатенированы с помощью cat, этот маркер появится перед концом нового архива. Это будет препятствовать операциям с этим архивом.
В более ранних примерах вы хранили каталог '~/practice' в архивном файле '~/music'. Если вы следили за примерами, у вас с тех пор изменилось содержание каталога '~/practice'. Эти текущие версии файлов каталога 'practice', однако, хранятся в архивном файле '~/practice/records'.
Чтобы сохранить текущие версии файлов 'practice' в архивном файле 'music', вы можете использовать '--concatenate' ('-A') для добавления архивного файла '~/practice/records' к 'music'. В первую очередь убедитесь, что вы находитесь в вашем домашнем каталоге ('cd~'). Затем:
% cd ~
% tar --concatenate --file=music practice/records
Если вы теперь посмотрите содержимое 'music', вы увидите члены
архива 'practice/records':
% tar --list--file=music
blues
folk
jazz
rock
blues
practice/blues
practice/folk
practice/jazz
practice/rock
practice/blues
practice/classical
Вы можете удалить из архива его члены с помощью '--delete'. Задайте имя архива с помощью '--file=имя_архива'. Введите список имен членов, подлежащих удалению. (Если вы не укажете эти имена, ничего не удалится.) Опция '--verbose' заставляет tar печатать имена членов после их удаления. Так же, как при использовании '--extract', важно, чтобы вы дали точные имена членов. Для того, чтобы узнать точные имена членов архива, используйте '--list'.
Опция '--delete' работает только с архивами, хранящимися на диске. Вы не можете удалить члены из архива, хранящегося на ленте.
В некоторых случаях удобно удалять файлы из архива, хранящегося на диске (но никогда не бывает удобно удалять файлы из архива, хранящегося на ленте: из-за строчной природы записи на ленту этот процесс похож на шифрование архива). Вы можете использовать операцию '--delete' для удаления файлов из архива. Имена файлов, подлежащих удалению, должны быть заданы как аргументы имени файла. Все версии названных файлов удаляются из архива. Выполнение операции '--delete' может быть очень медленным.
Чтобы уничтожить все версии файла 'blues' из архива 'records' каталога 'practice', убедитесь, что вы находитесь в этом каталоге, а затем
% tar --list --file=records
blues
folk
jazz
% tar --delete --file=records blues
% tar --list --file=records
folk
jazz
%
В некоторых случаях вы можете захотеть удалить определенные файлы из
архива, хранящегося на диске.
Вы не можете удалить файлы из архива, хранящегося на ленте: из-за строчной природы записи на ленту этот процесс похож на шифрование архива.
Для удаления из архива его членов используйте операцию '--delete'. Вы можете задать имена файлов, подлежащих удалению, как аргументы имени файла. Все версии названных файлов удаляются из архива.
Выполнение операции '--delete' может быть очень медленным.
Чтобы уничтожить все версии файла 'blues' из архива 'records' каталога 'practice', убедитесь, что вы находитесь в этом каталоге, а затем
% tar --list --file=records
blues
folk
jazz
% tar --delete --file=records blues
% tar --list --file=records
folk
jazz
%
Обычный способ вызова tar:
tar опция...[имя]...
Фактически вы можете набирать аргументы в любом порядке, но в данном
руководстве для облегчения понимания примеров опции всегда
предшествуют другим аргументам. Далее опции, начинающие основной
операционный режим (основную команду tar), обычно стоят первыми.
В tar cуществует много опций и три разных стиля их написания: мнемонический, краткий и старый. Эти стили обсуждаются ниже. Некоторые опции можно использовать со многими командами, в то время как другие имеют смысл только с несколькими основными командами. Одна опция должна определять основную команду, все остальные обязательны.
Помните, что опции tar очень чувствительны. Например, 'List' или 'list' не эквивалентны '--list' - фактически они даже не существуют. Опции '-T' и '-t-' - разные опции: первая требует аргумента для задания имени файла, обеспечивая список имен, а вторая не требует аргумента и другой вариант ее написания - '--list'.
Каждое имя интерпретируется как имя члена архива, когда основная команда - '--compare', '--delete', '--exrtact', '--list' или '--update'. Для всех остальных основных команд имена интерпретируются как имена файлов (включая каталоги) в системе файлов. tar интерпретирует имена файлов, как относящиеся к рабочему каталогу.
tar делает все имена файлов относительными (с помощью передвижения '/' при архивировании или пересохранении файлов), если вы не задали что-то другое (используя опцию '--absolute-names').
Различие между именами файлов и именами членов архива особенно важно, когда используется глоббирование оболочки, и иногда является источником недоразумений у новичков. Глоббирование - операция, с помощью котороц определенные символы, например '*' или '?' перемещаются и расширяются во все существующие файлы, соответствующие данному шаблону. Проблема в том, что оболочки могут глоббировать только при использовании существующих файлов системы файлов. Только tar может глоббировать на членах архива, т.ч. при необходимости вы можете убедиться, что вышеупомянутые символы достигают tar без предварительной интерпретации их оболочкой. Для этого обычно достаточно использовать '\' перед '*' или '?' или заключать аргумент в кавычки.
Хотя имена часто задаются на командной строке, они также могут быть считаны из текстового файла системы файлов при использовании '--files-from=файлы_с_именами' ('-T файлы_с_именами').
Каждый из нижеприведенных подразделов группирует несколько опций общей функциональности.
Вы можете использовать tar для хранения файлов в архиве, для извлечения их из архива и производить другие типы манипуляций с архивами. Начальный аргумент tar, называемый операцией, задает действие, которое нужно выполнить. Другие аргументы tar - или опции, которые влияют на способ выполнения операции, или имена файлов, которые задают файлы, с которыми tar будет работать.
GNU возвращает только некоторые выходные состояния. Если вы используете опцию '--compare' ('-d'), то ноль значит, что все прошло нормально, за исключением, может быть, незначительной мелочи. Не ноль значит, что что-то было неверно. Обычно не ноль - почти всегда 2, за исключением некоторых операций, где он может быть 128.
Каждая опция имеет хотя бы одно мнемоническое имя, начинающееся с двух тире подряд, например '--list'. Мнемонические имена опций более понятны, чем краткие или старые, их предпочитают те, кто любит во всем ясность. Иногда бывает, что одна мнемоническая опция имеет много разных имен-синонимов. К тому же, имена мнемонических опцих иногда могут быть даны с необычными сокращениями. Например, '--cre' может быть использована вместо '--create', т.к. нет другой мнемонической опции, начинающейся с '--cre'.
Некоторые опции требуют аргументов. Например, '--file=имя_архива', сообщающая имя архива tar. Аргумент мнемонической опции обычно дается сразу после самой опции и записывается такими же символами. Например, опция '--file=имя_архива' дается файлом 'archive.tar' как аргументом при использовании записи '--file=archive.tar'.
Мнемонические опции предназначены для простоты запоминания, в отличие от кратких опций, о которых будет рассказано ниже. Например, запись:
tar --create --verbose --block-size=20 --file=/dev/rmtO
дает хорошее представление о том, что делают команды, даже тем, кто
мало знаком с tar.
Большинство опций, хотя не все, также имеют краткое имя, состоящее из одинарного тире и еще одного символа, например '-t' - краткое имя мнемонической опции '--list', они имеют одно и то же значение. Функциональности этих опций абсолютно идентичны.
Краткие имена опций быстрее набираются на клавиатуре, чем мнемонические. В данном руководстве мы часто после мнемонической опции в скобках даем ее краткую форму (если она существует).
Краткие опции, требующие аргументов, обычно записываются перед ними и отделены от них пробелом. Иногда можно писать аргумент сразу после краткого имени опции, не оставляя пробела. Например, можно писать '-f аrchive.tar' или '-farchive.tar вместо '--file=archive.tar'. Когда опция дана отдельно, ее аргумент пишется после нее, как обычно в программах Unix. Например:
tar -c -v -b 20 -f /dev/rmtO
Краткие опции можно смешивать, но, в противоположность старым
опциям, это необязательно. Когда несколько опций идут подряд, для них
всех можно использовать одно общее тире. Только последняя из опций
может иметь аргумент. (Но мне кажется, что очень глупо нагромождать
несколько опций, последняя из которых имеет аргумент. Я даже думаю,
что опции GNU getopts достаточно, чтобы это сделать).
Если вы вставляете краткие опции в команду, убедитесь, что вы вставили туда и их аргументы.
Старые опции - одиночные буквы без тире, которые появляются только в положении, следующем за ключевым словом tar команды после пробела. Буква старой опции соответствует букве краткой опции. Например, старая опция 't' - то же, что краткая опция '-t' и мнемоническая '--list'.
Все время своего существования программы tar, GNU и non-GNU, используют старые опции. GNU tar использует их не только по историческим причинам, но и потому, что ими пользуются многие люди.
Все старые опции записываются как отдельный аргумент без пробелов, в виде слияния всех букв, задающих эти опции. Этот набор букв должен появляться на командной строке первым, после имени программы 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 может удивить даже опытных пользователей. Например, две команды
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
В одной команде tar можно перемешать все три стиля, соблюдая правила каждого из них.
В GNU tar до 1.11.6, испольовавшем опции старого стиля, исключалась возможность использования опций, не имеющих кратких форм. Многие пользователи выражали возмущение по поводу дешифратора опций tar, и я его изменил. Однако tar должен быть согласованным с другими tar. Краткие опции должны обеспечивать полную согласованность. Так что, если вы найдете какие-то несоответствия в дешифровке опций, сообщите, пожалуйста, мне.
Опции старого стиля можно смешивать с современными опциями в одном и том же вызове программы tar. Однако, опции старого стиля должны быть представлены только одним аргументом, а современные могут даваться только после всех аргументов опций старого стиля. Если это правило не выполняется, современная опция может быть неправильно интерпретирована как значение аргумента одной из опций старого стиля.
Например, все следующие команды совершенно эквивалентны и иллюстрируют множество комбинаций стилей опций.
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 должен
быть назван '-c', 'c', 'carchive.tar' или 'archive.tarc'
соответственно. Первые два примера также задают один неопционный
аргумент, имеющий значение 'archive.tar'. Последний пример содержит
только буквы опций старого стиля и не содержит значение аргумента.
Опции изменяют способ выполнения tar операций.
Ограничивает оперирование с файлами заданной датой.
Задает блочный фактор архива.
Задает уплотненый архив.
Запрашивает подтверждение для каждого файла.
Рассматривает символьный указатель как альтернативное имя для файла к точкам указателя.
Изменяет рабочий каталог.
Исключает файлы, соответствующие выпажению, записанному в шаблоне.
Исключает файлы, соответствующие какому-нибудь из выражений, записанных в фале 'file'.
Называет архив.
Читает аргументы имени файла из файла системы файлов.
Устанавливает режимы извлечения файлов к их записям в архиве.
Игнорирует введение данных конца архива.
этой длины и выдает приглашение новой ленте, автоматически включает multi-volume.
Создает многотомный архив с помощью сценария.
Запрашивает подтверждение перед выполнением любой операции с файлом или членом архива.
Предотвращает перезаписывание во время извлечения.
Включает метку архива в созданный архив.
Устанавливает время модификации извлеченных файлов.
Задает многотомный архив.
Ограничивает операции изменения файлов указанной датой.
Ограничивает операцию модификации файлов указанной датой. Exclusion
Создает архив старого формата.
Создает архив старого формата.
Предохраняет tar от пересечения границы системы файлов при архивировании.
Создает архив старого формата.
Помогает составлять большие списки имен файлов на машинах с малым количеством памяти.
Устанавливает режимы извлечения файлов к их записям в архиве.
Читает архив с размером блока меньше заданного или содержащий неполные блоки.
Выдает номер записи при генерации сообщения.
Помогает составлять большие списки имен файлов на машинах с малым количеством памяти.
Устанавливает режимы извлечения файлов к файлам, записанным в архиве.
Начинает чтение в середине архива.
Записывает файлы на стандартный вывод.
Задает уплотненный архив.
"-V метка_архива' Включает метку архива в созданный архив.
Выводит имена файлов или членов архива, которыми нужно оперировать.
Делает проверку на несоответствия в архиве сразу после того, как он был записан.
Читает архив с размером блока меньше заданного или содержащий неполные блоки.
Начинает чтение в середине архива.
Задает многотомный архив.
Ограничивает операции изменения файлов указанной датой.
Записывает файлы на стандартный вывод.
"-R' Выдает номер записи при генерации сообщения.
Разреженно архивирует разреженные файлы.
Читает аргументы имени файла из файла системы файлов.
Делает проверку на несоответствия в архиве сразу после того, как он был записан.
Задает уплотненный архив.
Задает блочный фактор архива.
Имя архива.
Рассматривает символьный указатель как альтернативное имя для файла к точкам указателя.
Игнорирует введение данных конца архива.
Предотвращает перезаписывание во время извлечения.
Предохраняет tar от пересечения границы системы файлов при архивировании.
Устанавливает время модификации извлеченных файлов.
Создает архив старого формата.
Устанавливает режимы извлечения файлов к файлам, записанным в архиве.
Помогает составлять большие списки имен файлов на машинах с малым количеством памяти.
Выводит имена файлов или членов архива, с которыми нужно оперировать.
Задает уплотненный архив.
Создает целый блочный уплотненный архив. двух букв.
Изменяет рабочий каталог.
Создает многотомный архив с помощью сценария.
Выключает файлы, соответствующие какому-нибудь из регулярных выражений, записанных в фале 'file'.
Используйте архивный файл или устройство на имени названной машине.
Архивный файл локален, даже если он содержит двоеточие.
Используйте отдаленную команду вместо rsh.
Задает устройство и плотность.
Создает многотомный архив (или дает список его содержимого).
Меняет ленту после задания число*1024 байта.
Выполняет 'file' в конце каждой ленты. Предполагает '--multi-volume' ('-M').
Устанавливает размер блока=блок*1024 байта.
Блокирует сброс на ленту.
Игнорирует блоки нулей в архиве (имеется в виду EOF).
Переблокирует по мере чтения (для чтения каналов 4.2BSD).
Опции можно сгруппировать в три категории:
Опции, которые всегда имеют значение.
Опции для создания или модификации архива.
Опции для составления списеа или извлечения файлов.
'-B число', '--block-size число'
'-f имя_файла', '--file имя_файла'
'-C каталог', '--directory каталог'
'-M', '--multi-volume'
'-N дата', '--after-date дата'
'-R', '--record-number' ('-R')
'-T имя_файла', '--files-from имя_файла'
'-v', '--verbose' ('-v')
'-w', '--interactive'
'-X файл', '--exclude файл'
'-z', '-Z', '--compress', '--uncompress'
Ниже приведены опции для создания или модификации архива. Эти опции
используются для контроля за файлами, которые tar заносит в архив, или
для проверки формата записанного архива.
За исключением указанных, эти опции используются с командами '--create' ('-c'), '--append' ('-r'), '--update' ('-u'), '--concatenate' ('-A') и 'delete'. Также заметьте, что опция {No value for "read-full-block"}
также используется с командами '--append' ('r'), '--update' ('-u'), '--concatenate' ('-А'), и '--delete'.
'-G', '--incremental'
'-h', '--derefence' ('-h')
'-l', '--one-file-system'
'-o', '--old-archive' ('-o')
'--old', '--portability'
'-S', '--sparse'
'-V NAME', '--volume NAME'
'-W', '--verify'
Ниже приведены опции для составления списка или извлечения файлов.
Опции в этой части имеют смысл с командами '--extract' и '--list'
('-t').
'-B", '--read-full-blocks'
'-G', '--incremental'
'-i', '--ignore-zeros'
'-k', '--keep-old-files'
'-K имя_файла', '--starting-file имя_файла'
'-m', '--modification-time'
'-O', '--to-stdout'
'-p', '--same-permissions', '--preserve-permissions'
'-P', '--absolute-names' ('-P')
'-s', '--same-order', '--preserve'order'
'--preserve'
В этой главе описываются основные операции, поддерживаемые программой tar. Один вызов tar точно выполняет одну из этих операций.
Член архива обычно извлекается в файл с тем же именем, что и член архива. Однако, вы можете использовать '--to-stdout' ('-O'), чтобы заставить tar вывести извлеченные члены архива на стандартный вывод. Если вы извлекаете много членов, они появляются на стандартном выводе конкатенированными, в том порядке, в котором они были найдены в архиве.
Операция '--create' ('-c') записывает новый архив, а операция '--extract' ('-x') читает файлы из архива и записывает их в систему файлов. Вы можете использовать другие операции tar для записывания новой информации в уже существующий архив (путем добавления в него файлов, добавления к нему другого архива или удаления из него файлов), и можете прочесть список файлов архива без их извлечения, используя операцию '--list'.
Начальный аргумент tar - операция, которая задает действие, которое tar должен произвести. tar можно использовать для:
Аргументы опций tar изменяют подробности операции, такие как формат архива, имя архива или уровень диалога пользователя. Вы можете задать более чем одну опцию. Все опции необязательны.
Аргументы имени файла задают файлы (включая каталоговые файлы) для архивирования, извлечения, удаления или других операций.
Если вы не используете аргументов имени файла, '--append', 'update' и '--delete' ничего не делают. Остальные операции tar что-нибудь делают по умолчанию.
Когда вы используете аргумент имени файла, чтобы задать каталоговый файл, tar работает со всеми файлами этого каталога, включая подкаталоги.
Вы можете использовать опцию из нижеследующего списка. Эти опции задают выполнение основных операций tar.
Создает новый архив.
Добавляет содержимое одного или более архивов к другому архиву.
Добавляет файлы в существующий архив.
Выводит список файлов архива
Удаляет из архива его члены.
Извлекает из архива его члены.
Сравнивает члены архива с файлами системы файлов.
Модифицирует архив путем добавления новый версий уже хранящихся файлов.
Остальные опции tar изменяют подробности выполнения операции, такие как формат архива, имя архива или интерактивеый уровень пользователя. Вы можете задать более чем одну опцию.
Остальные аргументы интерпретируются как имена файлов или имена членов архива, зависящие от основной операции, выполняемой tar. Для опций '--append' и '--create' эти аргументы задают имена файлов (которые, может быть, уже существуют) для помещения в архив. Для других типов операций дополнительные аргументы задают члены архива для сравнения, удаления, извлечения, составления списка или модифицирования. При назывании члена архива вы должны дать его точное имя, проверив правильность с помощью '--list'.
Если вы не используете дополнительных аргументов, '--append', 'update' и '--delete' ничего не делают. '--create' создаст пустой архив, если не задать файлы, которые нужно туда добавить. Другие операции tar ('--list' ('-t'), '--extract' ('-x'). '--compare' ('-d') и '--update' ('-u')) будут в этом случае работать со всем содержимым архива.
Если вы даете имя каталога как имя файла или имя члена, tar работает рекурсивно со всеми файлами и каталогами этого каталога. Например, имя '/' идентифицирует все файлы системы файлов tar.
Аргумент операции tar задает, какое действие вы хотите произвести.
Добавляет копии архива или архивы в конец другого файла.
Создает новый архив.
Сравнивает файлы архива с их противоположными частями в системе файлов, и сообщает о различиях в размере, режиме, имени хозяина, дате модификации и содержимом.
Добавляет файлы в конец архива.
Выдает список содержимого архива.
Считывает файлы из архива и записывает их в действующую систему файлов.
Добавляет файлы в конец архива, но только если они более новые, чем противоположные части уже в архиве, или их еще не существует в архиве.
Добавляет копии архива или архивы в конец другого архива.
Добавляет файлы в конец архива.
Сравнивает файлы архива с их противоположными частями в системе файлов, и сообщает о различиях в размере, режиме, имени хозяина, дате модификации и содержимим.
Добавляет копии архива или архивы в конец другого архива.
Создает новый архив.
Удаляет файлы из архива. Удаляются все версии файлов.
Сравнивает файлы архива с их противоположными частями в системе файлов, и сообщает о различиях в размере, режиме, имени хозяина, дате модификации и содержимим.
Считывает файлы из архива и записывает их в действующую систему файлов.
Считывает файлы из архива и записывает их в действующую систему файлов.
Выдает список содержимого архива.
Добавляет файлы в конец архива, но только если они более новые, чем противоположные части уже в архиве, или их еще не существует в архиве.
Выдает номер версии программы tar на стандартную ошибку.
Программа tar может создавать архив, извлекать файлы из архива, модифицировать архив или составлять список его содержимого. Каждый раз, когда вы работаете с tar, вы должны дать команду, чтобы задать, что именно из этого вы хотите делать.
Команда должна всегда быть первым аргументом tar. Этот аргумент может также содержать опции.
Для согласованности с Unix tar первый аргумент всегда рассматривается как содержащий буквы команд и опций, даже если он начинается не с '-'. Таким образом, 'tar c' эквивалентно 'tar -c': и то, и другое задает команду '--create' создания архива.
Кроме того, опции с длинными именами можно использовать, не смешивая их с однобуквенными флагами. Опции с длинными именами легки для запоминания и логичны, тогда как об однобуквенных флагах этого не скажешь. Опции с длинными именами начинаются с '--'.
Аргументы начиная с первого - или опции, если они начинаются с '-' или '--', или файлы, которыми нужно оперировать.
Имена файлов, которые вы даете как аргументы - файлы, с которыми tar будет работать - например, это файлы для занесения в архив или для извлечения из него. Если вы не даете аргументов имени файла, все зависит от того, какую команду вы используете. Некоторые команды в этом случае используют все файлы, а некоторые - сообщают об ошибке.
Если аргумент имени файла точно называет каталог, то используются (рекурсивно) и этот каталог, и все его файлы и подкаталоги.
Список команд tar:
Создает новый архив.
Эта команда заставляет tar создать новый архив, содержащий файлы, заданные на командной строке. Если вы не задаете файлы, используются все файлы текущего каталога. Если архивный файл уже существует, на него записывается новый: старое содержимое теряется.
Извлекает файлы из архива.
Эта команда заставляет tar извлекать заданные файлы из архива. Если не даны имена файлов, из архива извлекаются все файлы.
Выводит список содержимого архива.
Эта команда заставляет tar вывести на экран список файлов архива. Если вы задаете имена файлов, будут упомянуты только заданные вами файлы (но каждый из них упоминается, только если он есть в архиве).
Находит различия между файлами архива и файлами, записанными на строке. Эта команда заставляет tar сравнивать файл архива с файлом системы файлов. Он сообщает о различиях в размере, режиме, имени хозяина и содержимом. Если файл существует в архиве, но не существует в системе файлов, tar сообщит об этом. Если вы задаете имена файлов, эти файлы сравниваются, и все они должны существовать в архиве. Если вы не задаете файлы, сравниваются все файлы архива.
Добавляет файлы в конец архива.
Эта команда заставляет tar добавлять заданные файлы в конец архива. Это предполагает, что архивный файл уже существует и имеет надлежащий формат (что, по-видимому, значит, что он был предварительно создан программой tar). Если архив имеет формат, непонятный tar, результаты непредсказуемы. Вы обязаны задать файлы, которые нужно использовать: по умолчанию ничего не происходит).
Добавляет в архив более новые версии файлов, чем те, что уже там находятся.
Эта команда заставляет tar добавлять заданные файлы в конец архива, как '--append', но только если файла еще нет в архиве или эта его версия более новая, чем имеющаяся в архиве (сравнивается время последней модификации). Добавление файлов в конец архива может быть очень медленным. Вы обязаны задавать файлы, которые нужно использовать.
Добавляет существующие архивы к другому архиву.
Эта команда используется для конкатенирования нескольких архивных файлов в один большой архивный файл. Все файлы для этого должны быть архивными файлами. Они все добавляются к концу архивного файла, с которым работает tar. (Другие файлы не меняются). Возникает желание использовать здесь cat, но обычно это не работает. Архив tar содержит данные, указывающие конец архива, т.ч. добавленный материал игнорируется. Эта команда работает, потому что она перемещает маркеры конца архива из середины.
Удаляет файлы из архива (если он не на ленте).
Эта команда заставляет tar удалять заданные файлы из архива. Выполнение этой команды крайне медленно. Будьте осторожны: использование этой команды для архивов, хранящихся на магнитной ленте, может привести к их шифровке. Это неудачный способ удаления файлов с магнитной ленты (за исключением полной перезаписи архива).
Для согласованности с Unix tar первый аргумент всегда рассматривается как содержащий буквы команд и опций, даже если он начинается не с '-'. Таким образом, 'tar c' эквивалентно 'tar -c': и то, и другое задает команду '--create' создания архива.
Кроме того, опции с длинными именами можно использовать, не смешивая их с однобуквенными флагами. Опции с длинными именами легки для запоминания и логичны, тогда как об однобуквенных флагах этого не скажешь. Опции с длинными именами начинаются с '--'.
Аргументы после первого - или опции, если они начинаются с '-' или '--', или файлы, которыми нужно оперировать.
Имена файлов, которые вы даете как аргументы - файлы, с которыми tar будет работать, например, это файлы для занесения в архив или для извлечения из него. Если вы не даете аргументов имени файла, все зависит от того, какую команду вы используете. Некоторые команды в таком случае используют все файлы, а некоторые сообщают об ошибке.
Если аргумент имени файла точно называет каталог, то используются (рекурсивно) и этот каталог, и все его файлы и подкаталоги.
Модифицирование архивов.
При создании архива вы можете в него добавить члены, содержимое другого архива или новые версии уже хранящихся членов, или удалить уже имеющиеся члены архива.
Чтобы узнать, какие файлы уже хранятся в архиве, используйте 'tar --list --file=имя_архива'.
Опция '--create' ('-c') заставляет tar создавать новый архив. Файлы, которые должны быть заархивированы, называются на командной строке. Каждый файл добавится в архив под тем именем, которое дано на командной строке. (Когда вы даете абсолютное имя файла, tar его модифицирует).
Если вы не даете имена файлов для архивации, создается пустой архив.
Если файлов слишком много, чтобы разместить список на командной строке, вы можете записать этот список в файл, и tar прочтет его.
Если вы назвали каталог, то tar заархивирует не только его, но - рекурсивно - и его содержимое. Например, если вы назвали '/', tar заархивирует всю систему файлов.
Не используйте опцию '--create' для добавления файлов в существующий архив: он удалится, и на его место запишется новый. Вместо этого используйте '--append'.
Есть разные способы пропускать некоторые файлы и не архивировать их.
Чтобы создать архив, используйте '--create' ('-c'). Чтобы назвать архив - '--file=имя_архива' с операцией '--create'.
Если вы не называете архив, tar использует значение переменной среды TAPE как имя файла для архива, или, если она недоступна, tar использует имя по умолчанию.
В нижеприведенном примере создается архив с именем 'stooges', содержащий файлы 'larry', 'moe', и 'curley':
tar --create --file=stooges larry moe curley
Если вы задаете имя каталога как аргумент имени файла, tar
заархивирует все файлы в этом каталоге. В следующем примере создается
архив по имени 'hail/hail/fredonia', содержащий то же, что и каталог
'marx':
tar --create --file=hail/hail/fredonia marx
Если вы не задаете файлы, которые нужно положить в архив, tar
архивирует все файлы рабочего каталога. В следующем примере создается
архивный файл 'home', содержащий все файлы рабочего каталога:
tar --create --file=home
Заметьте: в вышеприведенном примере архив, содержавший все файлы рабочего каталога, был записан в рабочий каталог. GNU tar сохраняет файлы в рабочем каталоге архива, который сам находится в рабочем каталоге, без вхождения в бесеконечный цикл. С другими версиями tar такое может быть.
Опция '--append' ('-r') заставляет tar добавлять новые файлы в существующий архив. Она интерпретирует имена файлов и членов так же, как '--create'. Если вы не задаете списка имен, ничего не случается.
Эта опция никогда не удаляет члены архива. Если новый член добавляется под тем же именем, что и существующий член, то в архиве останутся они оба - новый после старого. Для получения более подробной информации о том, как это происходит,
Эта операция не может выполняться на некоторых ленточных драйверах вследствие недостаточного формата, используемого этим драйвером.
Чтобы добавить файлы в архив, используется '--append' ('-r'). Архив, который нужно добавить, должен уже существовать и быть в надлежащем формате (обычно это значит, что он был предварительно создан с помощью tar). Если архив был создан с не таким размером блока, какой был задан, tar сообщит об ошибке.
Если архив не является допустимым архивом tar, результаты непредсказуемы. Вы не можете добавить файлы в уплотненный архив, однако вы можете добавить их в последний том многотомного архива.
В следующем примере файл 'shemp' добавляется в архив 'stooges', созданный выше:
tar --append --file=stooges shemp
Вы обязаны задавать файлы, которые нужно добавить.
'--update' действует так же, как '--append', но не добавляет файл в архив, если там уже есть файл с таким именем, имеющий то же время модификации.
И '--update', и '--append' существуют для добавления файлов в архив. Когда вы извлекаете файл из архива, только версия, сохраненная последней, попадает в систему файлов. Т.к. '--extract' извлекает файлы из архива последовательно и записывает их под теми же именами в систему файлов, то если имя файла возникает более чем однажды в архиве, более поздняя версия этого файла записывается на более раннюю, которая уже была извлечена. Вы можете избежать хранения старых версий файла в архиве.
Заметьте: '--update' не приспособлена для выполнения резервного копирования, потому что она не изменяет содержимое каталога, и потому, что каждый раз при ее использовании удлиняется архив.
Опция '--update' модифицирует архив tar c помощью сравнения данных заданных членов архива с данными файлов под теми же именами. Если файл был модифицирован позже, чем член архива, то последний уничтожается (как с помощью '--delete') и затем файл добавляется в архив (как с помощью '--append'). На тех носителях, где не может выполняться опция '--delete' (таких как магнитная лента), опция '--update' тоже ошибочна.
Если не названы члены архива (ни на командной строке, ни с помощью '--files-from=файл_по_имени' ('-T файл_по_имени')), то процесс охватывает весь архив.
Опция '--concatenate' ('-A', '--catenate') заставляет tar добавлять содержимое нескольких архивов к существующему архиву.
Назовите архивы для конкатенации на командной строке. (Ничего не случится, если вы не станете их называть). Члены и их имена скопируются из этих архивов дословно. Если появится много членов с одинаковыми именами, ни один из них не уничтожится. Для того, чтобы узнать, как это происходит,
Вы должны использовать эту опцию для конкатенации архивов. Если вы комбинируете их с помощью cat, результатом может быть архив недоступного tar формата.
Эту операцию, к сожалению, нельзя выполнять на некоторых ленточных устройствах, из-за недостаточного формата, используемого ими.
Для того, чтобы добавить копии архива или архивы к концу другого архива, используйте '--concatenate' ('-A'). Архив-источник и выходной архив должны уже существовать и быть созданными с подходящими параметрами формата.
tar остановит чтение архива, если он встретит маркер конца архива. Утилита cat не уничтожает маркеры конца архива и, таким образом, она не подходит для конкатенации архивов. '--concatenate' ('-A') удаляет маркер конца архива из выходного архива перед добавлением каждого нового архива.
Вы должны задать архивы-источники с помощью '--file=имя_архива' ('-f имя_архива').
Если вы не задаете выходной архив, tar использует значение переменной среды TAPE, или, если она не задана, имя архива для умолчания.
В следующем примере содержимое архива 'hail/hail/fredonia' добавляется к архиву 'stooges' (оба были созданы ранее):
tar --catenate --file=stooges hail/hail/fredonia
Если вам нужно достать файлы из архива, который был добавлен с
помощью утилиты cat, используйте опцию '--ignore-zeros' ('-i').
Вы можете использовать опцию '--delete' для удаления из архива его членов. Назовите на командной строке имена членов, которые нужно удалить. Эта опция переписывает архив, поэтому она не работает на ленточных устройствах. Если вы не задали список членов, подлежащих удалению, ничего не происходит.
Чтобы удалить члены архива из архива, используйте '--delete'. Вы можете задать имена файлов или членов для удаления. Все члены архива с заданными именами будут удалены из архива.
В нижеприведенном примере файл 'curley' удаляется из архива 'stooges':
tar --delete --file=stooges curley
Вы можете использовать '--delete' для архива, только если архивное
устройство позволяет вам осуществлять запись в любое место носителя.
Предостережение: Не пытайтесь удалить член архива с магнитной ленты, чтобы не зашифровать архив. Это способ (не считая полного переписывания архива) не подходит для удаления файлов с большинства видов магнитных лент.
ошибку, если архивное устройство или в необычном файле, или другой ввод и вывод (-file=).
Опция '--list' ('-t') выводит список имен членов архива. Назовите имена членов, которые нужно занести в список, на командной строке (чтобы модифицировать способ интерпретации этих имен).
Если вы не называете имена членов, '--list' выведет список всех членов архива.
Чтобы увидеть больше чем только имена членов, используйте опцию '--verbose', чтобы заставить tar напечатать список, как при использовании 'ls -l'.
'--list' выводит список имен членов архива на стандартный вывод. Если вы задаете на командной строке аргументы имени файла (или используете опцию '--files-from=файлы_с_именами',
только файлы, которые вы задаете, будут занесены в список (если они существуют в архиве). Незаданные файлы игнорируются, даже если они находятся в заданном каталоге.
Если вы включаете опцию '--verbose', tar печатает список архива, как при 'ls -l'.
Если блочный фактор архива отличается от соответствующего умолчанию, tar сообщает об этом.
В очередном примере выводится список членов архива 'stooges':
tar --list
--file=stooges
tar отвечает:
larry
moe
shemp
marx/julius
marx/alexander
marx/karl
В следующем примере генерируется список членов архивного файла 'dwarves',
имеющего блочный фактор два:
tar --list -v --file=blocks
tar отвечает:
tar: Blocksize = 2 records
-rw------- ringo/user 42 May 1 13:29 1990 .bashful
-rw-rw-rw- ringo/user 42 Oct 4 13:29 1990 doc
-rw-rw-rw- ringo/user 42 Jul 20 18:01 1969 dopey
-rw-rw-rw- ringo/user 42 Nov 26 13:42 1963 grumpy
-rw-rw-rw- ringo/user 42 May 5 13:29 1990 happy
-rw-rw-rw- ringo/user 42 May 1 12:00 1868 sleepy
-rw-rw-rw- ringo/user 42 Jul 4 17:29 1776 sneezy
Используйте '--extract' или '--get' для извлечения из архива его членов. Для каждого названного члена (или для всего архива, если не названы члены) на командной строке - или с помощью 'files-from=файлы_с_именами' - создается файл с содержимым члена архива. Имя файла то же, что и имя члена.
Некоторые опции заставляют tar извлекать больше, чем только содержимое файла - имя хозяина, дату модификации и т.д.
Опции '--same-permissions' или '--preserve-permissions' заставляют новый файл иметь те же возможности, что имел изначальный файл, когда -находился в архиве. Без этих опций для этого используется текущий umask.
При извлечении tar обычно присваивает времени модификации значение, записанное в архиве. Это позволяет сделать опция '--modification-time' ('-m').
Чтобы считать члены архива и записать их в систему файлов, используйте '--extract'. Сам архив остается неизмененным.
Если вы не задали файлы, подлежащие извлечению, tar извлечет все файлы архива. Если вы задали имя каталога как аргумент имени файла, tar извлечет все файлы, хранящиеся как часть этого каталога. Если файл был сохранен с именем каталога, являющимся частью имени файла, tar создаст каталог.
В следующем примере показано извлечение архива 'stooges' в пустой каталог:
tar --extract --file=stooges
Генерация списка каталога ('ls') дает:
larry
moe
shemp
marx
Подкаталог 'marx' содержит файлы 'julius', 'alexander' и 'karl'.
Если вы хотите только извлечь файлы в подкаталог 'marx', вы можете задать этот каталог как аргумент имени файла в сочетании с операцией '--extract':
tar --extract --file=stooges marx
Предостережение: При извлечении файлов на их место может что-нибудь
записаться. Чтобы избежать потери файлов системы файлов при их
извлечении из архива, используйте опцию '--keep-ol-files' ('-k').
Если архив был создан с помощью '--block-size=512-размер' ('-b 512-размер), '--compress' ('-Z') или '--multi-voloume' ('-M'), вы должны задать эти опции опять при извлечении файлов из архива.
Обычно tar требует данных в полных блоках из устройства хранения архива. Если устройство не может возвращать полный блок, tar сообщает об ошибке. Однако некоторые устройства не всегда возвращают полные блоки или не требуют, чтобы последний блок архива ложился к границе следующего блока. Чтобы продолжать читать до тех пор, пока вы не получите полный блок, или принять неполный блок, если он содержит маркер конца архива, задайте опцию '--read-full-blocks' ('-B') в сочетании с операциями '--extract' или '--list'.
Опция '--read-full-blocks включается по умолчанию, когда tar читает архивы со стандартного ввода или с удаленной машины. Это из-за системы BSD Unix. Если эта опция не включена, tar столкнется с ошибкой при чтении неполного блока из канала.
Если вы не уверены в блокирующем факторе архива, вы можете прочитать архив с помощью задания '--read-full-blocks' и '--block-size=512-размер', используя блочный фактор больше, чем использует архив. Это позволит вам избежать определения блочного фактора архива.
Используется в сочетании с '--extract' для чтения архива, содержащего неполные блоки или имеющего блочный фактор меньше, чем заданный.
Опция '--ignore-zeros' выключает реакцию на умолчание, потому что во многих версих tar после конца архива печатается ненужная информация, из-за чего какая-то часть носителя никогда не будет прочитана. В GNU tar в конце архива не пишется ничего, но между архивирующими утилитами нужна согласованность.
Для игнорирования блоков нулей, с которыми можно столкнуться при чтении архива. используется в сочетании с '--extract' или '--list'.
Вы можете создать файл, содержащий упорядоченный список файлов архива с помощью 'tar --list --file=имя_архива'.
Эта опция в современных компьютерных системах, наверно, не нужна.
Для составления длинных списков имен на машинах с небольшим количеством памяти. Используется в сочетании с '--compare', '--list' или '--extract'.
Обычно tar записывает извлеченные файлы в систему файлов безотносительно к тому, существуют ли они уже в системе файлов: файлы с теми же именами, что уже имеющиеся, записываются на них. Чтобы предотвратить извлечение tar из архива его членов при перезаписывании файлов в систему файлов, используйте '--keep-old-files' в сочетании с '--extract'. Когда задана эта опция, tar сообщает об ошибке, констатирующей конфликт имен файлов вместо записи файлов из архива.
Предотвращает записывание новых файлов на старые в системе файлов во время извлечения файлов.
Чтобы установить время модификации равным времени извлечения файлов, используйте опцию '--modification-time' ('-m') в сочетании с '--extract'.
Устанавливает время модификации извлеченных членов архива равным времени извлечения файлов, а не времени, записанному для них в архиве. Используется в сочетании с '--extract'.
Устанавливает режимы извлечения файлов к тем, что записаны для них в архиве, вместо установления umask. Используется в сочетании с '--extract'.
Записывает файлы на стандартный вывод. Используется в сочетании с '--extrsct'.
Если предыдущая попытка извлечь файлы потерпела неудачу вследствие недостатка места на диске, вы можете использовать '--starting-file=имя' ('-K имя) для того, чтобвы начать извлечение только начиная с названного файла при извлечении файлов из архива. Это, разумеется, предполагает, что или сейчас здесь есть свободное место, или вы извлекаете файлы в другую систему файлов.
Начинает операцию в середине архива. Используется в сочетании с '--extract' или '--list'.
Опция '--compare' ('-d', '-diff') сравнивает содержимое заданных членов архива с файлами под теми же именами, и сообщает о различиях, которые находит. Если на командной строке или с помощью '--files-from=файлы_с_именами' члены не заданы, сравнение происходит для всех членов архива.
Некоторые параметры формата должны быть взяты в рассмотрение при модификации архива:
Уплотненные архивы не могут быть модифицированы.
Вы должны задать размер блока архива при модификации архива, не имеющего значения для умолчания.
Многотомные архивы можно модифицировать как все другие. Чтобы добавить файлы в многотомный архив, вы должны только установить последний том носителя архива (и новые тома, если нужно). Для всех остальных операций вы должны использовать целый архив.
Если многотомный архив был помечен с помощью '--label=метка_архива'
при его создании, tar не будет автоматически помечать тома, добавленные позже. Чтобы пометить последующие тома, опять задайте '--label=метка_архива' в сочетании с '--append', '--update' или '--concatenate'.
По умолчанию tar использует имя архивного файла, откомпилированного при установке tar. Обычно это относится к некоторым физическим ленточным устройствам машины. Часто инсталлятор tar вообще не устанавливает ничего по умолчанию.
В результате большинству пользователей tar приходится сообщать ему, где искать архив. Опция '--file=имя_архива' выбирает для использования в качестве архива другой файл.
Если в имени архивного файла есть двоеточие, то имеется в виду, что он на другой машине. Если архивный файл - ' user@host:file', то файл file используется на машине host. Отдаленная машина позволяет использовать программу rsh с именем пользователя user. Если имя пользователя не указывается (перед знаком @), используется ваше имя (это обычное поведение rsh). Если необходимо для удаленной машины, кроме разрешения вам доступа к rsh, устанавливается программа '/usr/ucb/rmt'. Если вам нужно использовать файлы, в имена которых входит двоеточие, то работу удаленного ленточного учтройства можно заблокировать с помощью опции '--force-local'.
Если вы даете в качестве имени файла в '--file=имя_архива' тире, tar читает архив со стандартного ввода (или записывает на стандартный вывод).
Архив можно сохранить как файл в системе файлов, послать через канал или сеть, или записать на устройство I/O как на ленту или диск. Чтобы задать имя архива, испльзуйте опцию '--file=имя_архива'.
Имя архива может быть именем обыкновенного файла или устройства I/O. tar всегда нужно имя архива: если вы его не задаете, используется переменная среды TAPE или, если она не задана, имя архива для умолчания - обычно это имя /dev/tu00.
Если вы используете тире в качестве имени архива, tar читает архив со стандартного ввода (при составлении списка извлеченных файлов), или записывает его на стандартный вывод (при создании архива). Если вы используете тире как имя архива при модификации архива, tar читает первоначальный архив со стандартного ввода и записывает весь новый архив на стандартный вывод.
Чтобы задать архивный файл на устройстве, подсоединенном к отдаленной машине, используйте следующее:
--file=имя_машины:/устройство/имя_файла
tar, если возможно, завершает дистанционную связь, выводит
приглашение имени пользователя и запрашивает пароль. Если вы
используете '--file=имя_машины:/устройство/имя_файла', tar завершает
дистанционную связь, используя ваше имя как пользователя на отдаленной
машине.
Называет архив для создания или оперирования. Используется в сочетании с другой операцией.
Аргументы имени файла задают, с какими файлами системы файлов tar должен работать при создании или добавлении архива, или то, с какими членами архива tar должен работать при чтении архива или удалении членов из него.
Чтобы задать имена файлов, вы можете напечатать их в качестве последних аргументов на командной строке. Например:
tar операция [опция1 опция2 ...][имя_файла_1 имя_файла_2 ...]
Если вы задаете имя каталога как аргумент имени файла, tar оперирует
всеми файлами этого каталога.
Если вы не задаете файлы при вызове tar, он оперирует всеми некаталоговыми файлами рабочего каталога (если операция - '--create'), всеми членами архива (если задана операция чтения) или ничего не делает (при задании всех остальных операций).
При задании имен файлов или членов, он по умолчанию берет имена файлов с командной строки. Однако существуют другие способы задания имен файлов или членов, или модификации, при которой tar выбирает имена членов, которыми оперирует. Обычно эти методы работают для задания и имен файлов, и членов архива.
Чтобы избежать пересечения границ архива при архивировании частей каталогового дерева, используется '--one-file-system' ('-l'). Эта опция работает только с файлами, которые были заархивированы, потому что находились в заархивированном каталоге. Файлы, названные на командной строке, архивируются вне зависимости от того, где они находятся.
Эта опция используется для выполнения полного или пошагового резервного копирования системы файлов.
Если эта опция используется в сочетании с '--verbose' ('-v'), выключенные файлы упоминаются на стандартной ошибке.
Предотвращает пересечение tar границ системы файлов при архивировании. Используется в сочетании с другими операциями.
Когда вы задаете опцию '--exclude=шаблон', tar игнорирует файлы, соответствующие шаблону, который может быть отдельным файлом или более сложным выражением. Таким образом, если вы вызываете tar с помощью 'tar --create --exclude=*/o', файлы, имена которых кончаются на '.o', не включаются в архив.
'--exclude-from=шаблон' действует как '--exclude=шаблон', но задает файл file, содержащий список шаблонов. tar игнорирует файлы, чьи имена соответствуют какому-нибудь из этих шаблонов.
Вы можете использовать опцию в одной команде более чем однажды.
Заставляет tar игнорировать файлы, соответствующие шаблону.
Заставляет tar игнорировать файлы, соответствующие шаблонам, указанным в file.
'--newer-mtime=дата' действует как '--after-date=дата', но проверяет только время модификации файлов, игнорируя время изменения состояния.
Помните, что весь аргумент должен быть взят в кавычки, если он содержит пробел.
Заметьте: '--newer-mtime=дата' и '--after-date=дата' не используются для пошагового резервного копирования. Некоторые файлы (например, в переименованных каталогах) не выбираются при помощи этих опций.
Действует как '--after-date=дата', но обращает внимание только на время модификации.
Ввод состоит из одного или более параметров: время зона день_недели дата год в любом порядке.
'|' и '/' значат 'или', a '[]' - 'необязательное'.
Время: Н am/pm | H:M [am/pm] пояс: название_часового_пояса | название_часового_пояса dst день_недели | день_недели, | день_недели число: M/D | M/D/Y | месяц D | месяц D, Y | D месяц Y год: Y
Вместо am также может быть a.m,вместо pm - p.m., пунктуация вокруг пробелов не важна.
Вместо того, чтобы давать имена файлов или членов архива на командной строке, вы можете положить их в файл и затем использовать опцию '--files--from=файл_по_имени'. Дайте имя файла, содержащее список, как аргумент '--files--from=файл_по_имени'. Каждое имя файла должно располагаться на новой строке. Если вы в качестае имени файла даете тире, т.е. задаете '--files-from=-', то имена файлов читаются со стандартного ввода.
Если вы хотите задать имена, которые могут содержать несколько строк, используйте опцию '--null'. Тогда имена файлов, вместо того чтобы начинаться каждое с новой строки, будут отделены нулями (ASCII 000). Кроме того, опция '--null' выключает опцию '--directory=каталог'.
Чтобы прочитать имена файлов не с командной строки, а из файла системы файлов, используется опция '--files-from=файл_по__имени'. Если вы задаете тире как файл, имена файлов читаются со стандартного ввода. Заметьте, что при использовании и '--files-from=-', и '--file=-' в одной команде, она не будет работать, если это не '--create' ('-c').
Опция '--after-date=дата' или '--newer=дата' ограничивает действие tar только оперированием с файлами, которые были модифицированы после указанной даты. Для получения более подробной информации о том, как задать дату,
Файл рассматривается, чтобы быть измененным, если было модифицировано его содержимое или изменены хозяин, разрешения и т.д.
Если вы хотите только чтобы tar производил сравнение дат на основании точного содержимого модификации файла, используйте опцию '--newer-mtime=дата'.
Никогда не используйте эту опцию для выполнения пошаговой разгрузки. Чтобы научиться использовать tar для осуществления резервного копирования,
Опция '--one-file-system' заставляет tar модифицировать его обычное поведение при архивировании содержимого каталогов. Если файл каталога не в той системе файлов, что сам каталог, tar не архивирует этот файл или (если он сам - каталог) все файлы, относящиеся к нему.
Это не обязательно ограничивает работу tar только архивированием содержимого отдельной системы файлов, потому что все файлы, имена которых даны на командной строке или в '--files-from=файлы_с_именами', будут заархивированы.
Выполняет переход к каталогу с именем 'каталог'. Эту опцию можно вставлять между файлами, с которыми tar должен работать. Например:
tar -c iggy ziggy -C baz melvin
перемещает файлы 'iggy' и 'ziggy' из текущего каталога на
ленту. Эта опция в основном используется, когда есть
несколько отделенных друг от друга файлов, которые вы хотите
сохранить в одном каталоге архива. Здесь файл 'melvin'
записан в архиве под именем 'melvin', а не 'baz/melvin'.
Таким образом, архив будет содержать три файла, которые
появляются из одного каталога; если архив извлекается с
помощью 'tar -x', все эти файлы будут созданы в текущем
каталоге. Это отличается от команды
tar -c iggy ziggy bar/melvin
которая записывает третий файл в архив под именем
'bar/melvin', т.ч., если используется 'tar -x', третий файл
будет создан в подкаталоге 'bar'.
Предположим, что вы хотите без изменения вашего текущего
каталога вызвать tar, чтобы скинуть файлы с
'/users/ctd/dipp'. Тогда вам нужна '--directory=каталог'. Вы
можете сделать что-то вроде: tar cfC archive.tar
/users/ctd/dipp. (точка обозначает текущий каталог).
Некоторые люди хотят иметь какую-нибудь опцию для извлечения
чего-нибудь из архива в текущий каталог, игнорируя при этом
каталоговую структуру архива. Это так редко бывает нужно,
что я сомневаюсь, что такая опция действительно будет
использоваться. Она, может быть, только поощряла бы
неправильное использование tar. Вообщем,
'--directory=каталог' можно использовать в первую очередь
для создания архивов с более ясной структурой.
Принимает имена для извлечения или создания файла с именем имя_файла. Список файлов читается не с командной строки, а с файла имя_файла. Если имя_файла задано как '-', список читается со стандартного ввода. Заметьте, что опции '-T -' и '-f -' не работают, если вы не используете команду '--create'. Обычно это используется, когда вы сгенерировали список файлов для архива с помощью find.
Эта опция заставляет '--files-from=файлы_с_именами' читать имена, отделенные нулями, а не начинающиеся с новой строки. Таким образом файлы, чьи имена содержат несколько строк, можно заархивировать с помощью '--files-from=файлы_с_именами'. Опция '-null' похожа на соответствующую опцию GNU xargs и cpio и используется с предикатом '-print0' GNU find. В tar '--null' также заставляет рассматривать '--directory=каталог' как имена файлов архива в случае, когда есть файлы по имени '-C'.
Выключает файл 'файл'.
Выключает файлы, перечисленные в "файл". Эта опция заставляет tar читать список регулярных выражений (в синтаксисе оболочки), по одному на линии, из "файла", tar игнорирует файлы, соответствующие этим регулярным выражениям. Таким образом, если tar вызывается как 'tar -c -X foo', и файл 'foo' содержит единственную строку '*', файлы, чьи имена заканчиваются на '.o', не будут добавлены в архив. Опцию '--exclude=шаблон' можно использовать многократно.
Не удаляет начальное /s из имен файлов. По умолчанию GNU tar отправляет начальное /s на ввод или вывод. Эта опция выключает такую реакцию: это эквивалентно изменению корневого каталога перед работой tar (кроме того, убирается также обычное предупреждение).
При создании архива остается в системе файлов. Эта опция предохраняет tar от пересечения границ системы файлов при архивировании частей каталогового дерева. Эта опция работает только с файлами, которые были заархивированы, потому что находились в заархивированном каталоге. Файлы, названные на командной строке, архивируются вне зависимости от того, где они находятся. Эта опция используется для проведения полного или пошагового резервного копирования системы файлов, как с помощью команды dump Unix.
Начинается с файла'имя' архива. --starting-file=имя заставляет tar начинать извлечение или составление списка архива с файла 'имя' и рассматривать только файлы, находящиеся после этого файла. Это используется, если предыдущая попытка извлечь файлы потерпела поражение, не успев дойти до файла 'имя' из-за нехватки свободного места. (Предполагается, разумеется, что сейчас у вас есть свободное место, или вы извлекаете уже в другую систему файлов).
Сохраняет файлы: которые новее указанной даты. Эта опция заставляет tar работать только с файлами, чье время модификации или изменений позже указанной даты. Используется в основном для создания архивов: записываются только самые новые файлы. При извлечении тоже извлекаются только самые новые файлы. Помните, что если аргумент даты содержит хотя бы один пробел, он весь должен быть заключен в кавычки. Синтаксический анализ даты производится с помощью getdate.
Опция '--directory=каталог' заставляет tar перейти из текущего каталога в 'каталог'. В отличие от большинства опций, эта обрабатывает все, что находится в списке для обработки. Рассмотрим следующую команду:
tar --create --file=foo.tar -C/etc passw hosts -C /lib libc.a
Эта команда помещает файлы '/etc/passw', '/etc/hosts' и '/lib/libc.a'
в архив. Однако имена членов архива будут точно такими, какими они
были на командной строке: 'passw', 'hosts' и 'libc.a'. Опция
'--directory=каталог' часто используется для для того, чтобы сделать
архив независимым от изначального имени каталога, содержащего файлы.
Заметьте, что опция '--directory=каталог' интерпретируется последовательно. Если jgwbz '--directory=каталог' задает относительное имя файла, она интерпретируется относительно текущего каталога, который может быть тем же, что и изначальный текущий рабочий каталог, установленный благодаря '--directory=каталог'.
При использовании '--files-from=файлы_с_именем' вы можете занести опцию '-C' в список файлов. К сожалению, нельзя занести туда опции '--directory'.(В этой интерпретации нельзя использовать опцию '--null'.)
Чтобы изменить рабочий каталог в середине списка имен, заданного или на командной строке, или в файле, при помощи '--files-from=файлы_с_именами', используйте '--directory=каталог'. При этом рабочий каталог изменится на каталог "каталог" после определенного места списка. Например, в
tar --create iggy ziggy --directory=baz melvin
файлы 'iggy' и 'ziggt' перемещаются из текущего каталога в архив, за
которым следует файл 'melvin' каталога 'baz'. Эта опция особенно часто
используется, когда у вас есть несколько далеко расположенных файлов,
которые вы хотите сохранить в одном и том же каталоге архива.
Заметьте, что файл 'melvin' записан в архив под именем 'melvin', а не 'baz/melvin'. Таким образом архив будет содержать три файла из одного каталога; если архив извлекается с помощью 'tar --extract', все три файла будут записаны в текущий каталог.
Это отличается от команды
tar -c iggy ziggy bar/melvin
которая записывает третий файл в архив под именем 'bar/melvin', т.ч.,
если используется 'tar -x', третий файл будет создан в подкаталоге
'bar'.
Изменяет рабочий каталог.
Когда tar извлекает члены архива из архива, он удаляет все начальные '/' из имен членов. Это вызывает рассмотрение абсолютных имен членов архива как относительных имен файлов. Это позволит вам извлекать члены, откуда хочется, вместо ограничения извлечения только из каталога, точно названного в архиве. Например, если член архива имеет имя '/etc/passw', tar выведет его, как если бы его имя было 'etc/passw'.
Другие программы tar этого не делают. В результате, если вы создаете архивы, чьи имена начинаются с '/', их трудно будет использовать c помощью низшей программы tar. Поэтому GNU tar также удаляет начальные '/' из имен членов при занесении этих членов в архив. Например, если вы попросите tar добавить файл '/bin/ls' в архив, он это сделает, но имя члена архива будет 'bin/ls'.
Если вы используете опцию '--absolute-names' ('-P'), tar не будет делать таких преобразований.
Чтобы заархивировать или извлечь файлы, относящиеся к рабочему каталогу, задайте опцию '--absolute-names'.
Обычно tar имеет дело с файлами, относящимися к рабочему каталогу - игнорируя имена верхнего каталога при архивировании и начальные '/' при извлечении.
Когда вы задаете '--absolute-names', tar хранит имена файлов, включая все имена верхних каталогов, и сохраняет начальные '/'. Если вы только вызываете tar из корневого каталога, вам никогда не понадобится опция '--absolute-names', но использование этой опции более удобно, чем переключение на корневой каталог.
Предохраняет полные имена файлов (включая имена верхних каталогов) при архивировании файлов. Сохраняет начальный '/' при извлечении файлов.
Будучи внимательным, первое, что вы можете проверить - что вы действительно используете tar. Опция '--version' генерирует послание, дающее подтверждение, что вы пользуетесь tar, с указанием версии tar, которую вы используете. tar идентифицирует себя и выводит номер своей версии на стандатрный вывод, затем успешно выходит, ничего больше не делая и игнорируя все остальные опции. Например, 'tar --version' может возвратить:
GNU tar version 1.18.8
Второе, что вы можете захотеть узнать - написание и значение
некоторых опций tar без обращения к данному руководству, которое вы
уже однажды внимательно прочли. GNU tar имеет незначительные
возможности помощи, ее можно запустить с помощью опции '--help'. При
использовании этой опции tar выдает на стандартный вывод сообщение, в
котором перечисляются все доступные опции, затем успешно выходит,
ничего больше не делая и игнорируя все остальные опции. Даже хотя это
краткий обзор, он может быть несколько экранов длиной. Так что, если
вы используете не какой-нибудь тип прокручиваемого окна, вы можете
воспользоваться, например, этим:
tar --help | less
Это обозначает, что вы хотели бы использовать less для переворачивания
страниц. Чаще всего для этого используются еще more и pg.
Дотошный читатель должен был заметить определенные расхождения в предыдущих абзацах. Там написано, что и '--version', и '--help' что-то печатают и игнорируют все остальные опции. Фактически же они не могут игнорировать друг друга, какая сильнее: проведем эксперимент, действительно ли вам это интересно.
Предоставляемая помощь очень сжата, и вам, может быть, придется вернуться к полной документации. Если вы читаете этот абзац, значит, у вас уже есть некоторое руководство по tar. Это руководство доступно в печатном виде, как маленькая книжечка. Или можно его распечатать, если у вас есть где-нибудь установленный TEX и лазерный принтер. Просто установите это пособие, запустите команду 'make dvi', затем наберите 'doc/tar.dvi' обычным способом (спросите местного гуру, как это делается). Если GNU tar удобно установлен на вашем месте, это руководство также доступно в диалоговой, гипертекстуальной форме стиля Info. Просто вызовите 'info tar', или, если у вас нет программы info, используйте Info reader из GNU Emacs, вызвав tar из основного меню Info.
Обычно tar выполняет большинство операций, не выдавая пользователю никакой информации, кроме сообщений об ошибках. При использовании многих опций, часто со сложным и непредсказуемым поведением, можно наделать много серьезных ошибок. tar обеспечивает несколько опций, которые делают работу с ним легче. Эти опции заставляют tar выводить информацию, как он прогрессирует в задании, и, может быть, вы захотите использовать их, чтобы лучше представлять, что он делает. Однако, если вы при оперировании архивом столкнулись с проблемой, вам нужна для ее решения более подробная информация, чем просто сообщение об ошибке. Нижеприведенные опции являются полезными диагностическими средствами.
Обычно команда '--list' для выдачи списка архива печатает имена файлов (по одному на строке), а другие команды молчат. При использовании большинства операций опция '--verbose' заставляет tar печатать имя каждого файла или члена архива, как только он обработан. Эта и другие опции, заставляющие tar печатать информацию о состоянии, могут использоваться в контроле tar.
При использовании опций '--create', '--extract; или '--verbose' один раз печатаются имена файлов или членов, как только они обработаны. При использовании их дважды tar вынужден печатать для каждого члена более длинный список (как при помощи 'ls -l'). В то время как '--list' сама печатает имена членов архива, '--verbose', используемая с '-list', заставляет tar печатать список файлов архива, как при помощи 'ls -l'. В следующих примерах извлекаются члены архива и выдается длинный список вывода:
tar --extract --file=archive.tar --verbose --verbose
tar xvv archive.tar
Словесный вывод возникает на стандартном выводе, за исключением
случая, когда архив записан на стандартный вывод, как с помощью 'tar
--create --file=- --verbose' ('tar cfv -', или даже 'tar cv' -
инсталлятор, позволяющий иметь архив по умолчании на стандартном
выводе). В этом случае tar записывает словесный вывод на стандартную
ошибку.
Опция '--totals', имеющая смысл только при использовании с '--create', заставляет tar печатать все записанное в архив после того, как он был полностью создан.
Опция '--checkpoint' выдает случайное сообщение, когда tar читает или записывает архив. Фактически она печатает имена каталогов при чтении архива. Она предназначена для тех, кому не нужен более подробный (и объемный) вывод '--record-number' ('-R'), но кто хочет получить наглядное подтверждение, что tar действительно делает прогресс.
Опция '--show-omitted-dirs' при чтении архива с опциями '--list' или '--extract', например, заставляет для каждого каталога архива, который пропущен, печатать сообщение. Это происходит независимо от причины пропуска: каталог может не быть назван на командной строке (явно или неявно), или может быть исключен при помощи опции '--exclude=шаблон'...
Если используется '--record-number', tar печатает, наряду с другим сообщением, которое он обычно выдает, номер записи в архиве, где было запущено сообщение. Эта опция особенно часто используется при чтении поврежденных архивов, она помогает точно указать поврежденный участок. Ее также можно использовать с '--list' при чтении ленты резервного копирования системы файлов, что позволяет вам выбрать из нескольких лент резервного копировании при более позднем извлечении файла, где отдается предпочтение ленте, где файл появляется раньше всего.
Обычно tar выполняет команду без остановки до дальнейших инструкций. Однако в некоторых ситуациях вы можете захотеть исключить некоторые файлы и члены архива из операции (например, если места на диске недостаточно). Вы можете это сделать с помощью автоматического исключения некоторых файлов или с помощью диалогового выполнения операции, используя опцию '--interactive' ('-w'). tar также принимает '--confirm ation' для этой опции.
Когда задана опция '--interactive' перед чтением, записью или удалением файлов, tar сначала выдает сообщение для каждого файла, указывая, какой операции он подлежит, затем спрашивает подтверждения терминала. Действия, требующие подтверждения - добавление файла в архив, извлечение файла из архива, удаление файла из архива и удаление файла с диска. Чтобы подтвердить действие, вы должны ввести строку, начинающуюся с 'y'. Если ваша строка начинается с какого-нибудь другого символа, tar пропускает этот файл.
Если tar читает архив со стандартного ввода, он открывает файл'/dev/tty' для диалогового общения.
Вы можете убедиться в точности архива, сравнивая файлы системы с членами архива. tar может сравнивать архив с системой файлов, как только архив записан, чтобы проконтролировать операцию записи, или может сравнивать с системой файлов прошлый записанный архив.
Чтобы сделать проверку на несоответствия в архиве сразу после того, как он был записан, используйте опцию '--verify' в сочетании с операцией '--create'. Когда задана эта опция, tar проверяет члены архива и их противоположные части в системе файлов и сообщает о несоответствиях на стандартный вывод. В многотомных архивах каждый том проверяется после того, как он записан, перед записью следующего тома.
Чтобы проконтролировать архив, вы должны быть способными его прочитать перед окончанием последней записи. Эта опция используется для выявления ошибок в данных на некоторых лентах. Архивы, записанные на каналы, некоторые картриджные устройства и т.п. не поддаются контролю.
Опция '--compare' сравнивает члены архива в существующем архиве с их противоположными частями в системе файлов и сообщает различия в размере файла, режиме, имени хозяина, датах модификации и содержимом. Если файл представлен в архиве, но не существует в системе файлов, tar сообщает об этом.
Если вы используете аргументы имени файла в сочетании с 'tar --compare', tar сравнивает заархивированные версии заданных файлов с их противоположными частями системы файлов. Если вы задаете файл, которого нет в архиве, tar сообщает об ошибке. Если вы не задаете никаких файлов, tar сравнивает таким образом все файлы архива.
Т.к. tar сравнивает только файлы архива с файлами системы файлов, а не наоборот, он игнорирует файлы системы файлов, которых нет в архиве.
В нижеприведенном примере члены архива 'stooges' 'larry', 'moe' и 'curly'сравниваются с файлами под теми же именами в системе файлов.
tar --compare --file=stooges larry moe curly
Если, например, файла 'curly' не существует в архиве, tar cообщает
об ошибке:
сurly: does mot exist
Создание в отдельной системе архива tar, предназначенного для дальнейшего использования на многих других машинах и с помощью других версий tar, является более сложной задачей, чем может показаться. Форматы архивов tar развиваются еще со времени первой версии Unix, и не всегда совместимы друг с другом. В этом разделе обсуждаются несколько проблем и даются советы, как сделать архивы tar более мобильными.
Золотое правило - простота. Например, ограничьте содержимое ваших архивов только регулярными файлами и каталогами. Не пытайтесь теперь сохранить разреженные файлы. Давайте обсудим еще несколько проблем.
Используйте прямые файлы и имена каталогов, пополненные символами ASCII, избегая двоеточий, /, \ и других "опасных" символов. Избегайте вложений каталогов. Пользуясь машинами старше System V, ограничьте имена ваших файлов и каталогов 14-ю символами.
Если вы собираетесь читать свои архивы под MSDOS, вы не должны полагаться на различия в именах файлов и можете использовать программу GNU doschk, которая поможет вам в дальнейшей диагностике неправильных в MSDOS имен, на которые накладываются еще большие ограничения, чем в System V.
Обычно, когда tar архивирует символьный указатель, он записывает что-то в архив, называющийся как адресат указателя. Так tar получает точную запись содержимого системы файлов. '--derefence' ('-h') используется с '--create' и заставляет tar архивировать файлы, на которые установлены символьные указатели, вместо самих указателей. При использовании этой опции, когда tar сталкивается с символьным указателем, он архивирует указанный файл вместо того, чтобы просто записать присутствие символьного указателя.
Имя, под которым файл хранится в системе файлов, не записано в архиве. Чтобы записать и имя символьного указателя, и имя файла в системе файлов, заархивируйте файл под обоими именами. Если все указатели были записаны автоматически tar, указатель может быть направлен на имя файла, больше не существующего в системе файлов.
Если tar опять сталкивается с файлом, на который смотрит указатель, при создании того же архива, сохраняется вторая его копия. (Это может рассматриваться как ошибка.)
Итак, для мобильных архивов не архивируйте символьные указатели как таковые и используйте '--derefence': многие системы не предполагают символьных указателей и, более того, ваши построения, может быть, не смогут использоваться, если они содержат символьные указатели.
GNU tar использует ранний стандарт POSIX 1003.1 ustar, который отличается от последнего стандарта. Сделать доступ к возможностям последней версии - нетривиальная задача.
Определенные старые версии tar не могут содержать дополнительную информацию, записанную в более новых программах tar. Чтобы создать архив формата V7 (а не ANSI), который можно прочитать этими старыми версиями, задайте опцию '--old-archive' ('-j') в сочетании с '--create'. tar также принимает '--portability' к этой опции. Когда вы ее задаете, tar не включает информации о каталогах, каналах, смежных файлах, файлах устройства и задает информацию о хозяине в виде группы и идентификатора пользователя вместо группы и имени пользователя.
При модифицировании архива не используйте '--old-archive', если архив был создан не с помощью этой опции.
В большинстве случаев архив нового формата может быть прочитан старой программой tar без особых проблем, так что эта опция редко бывает нужна. С другой стороны, большинство современных tar могут читать архивы старого формата, так что, может быть, вам удобнее будет использовать '--old-archive'.
SunOS и HP-UX tar не принимают архивы, созданные GNU tar и содержащие не-ASCII имена файлов, потому что они используют символизированные контрольные суммы, тогда как tar использует несимволизированные контрольные суммы при создании архивов, как в стандарте POSIX. При чтении GNU tar и считает контрольные суммы, и что-нибудь принимает. Меня очень беспокоит то, что многие люди пытаются произвести резервное копирование своих файлов, используя дефектное (или по меньшей мере нестандартное) программное обеспечение, и их ничему не научает пересохранение их ошибочных файлов с помощью несоответствующего извлечения файлов.
GNU tar предполагает вычисление обеих сумм, символизированных и несимволизированных, и что-то принимает. Однако 1.12.1 имеет ошибку, из-за которой символизированная контрольная сумма неправильно инициализируется и поэтому не работает. Это было исправлено в последующих версиях GNU tar. Но GNU tar не модифицирован для создания неправильных архивов, чтобы читать их с помощью ошибочного tar.
Я рассказывал, что вначале, когда Sun импортировал tar на свои системы, они его перекомпилировали без учета того, что контрольные суммы были по-разному сосчитаны из-за изменения в символизации char в их компиляторе. Так что они начали считать контрольные суммы неправильно и впоследствии стали несовместимыми сами с собой. Сейчас на плечи пользователей SunOs и HP-UX легла задача сделать tar способным читать хорошие архивы, которые они получают.
Все ленты и диски могут быть защищены, чтобы предохранить данные на них от изменения. Как только архив записан, вы можете защитить его носитель. (Это защитит архив от изменения ленты или гибкого диска, но не защитит его от магнитных полей или других физических опасностей).
Устройство защиты обычно является частью физического носителя и может состоять из двухпозиционного переключателя (включено/не включено), желобка, который может быть открыт или закрыт, кольца, перемещаемого от центральной катушки ленты и чего-нибудь еще.
Не изменяет время доступа к дампированным файлам.
Не меняет время модификации файлов. При использовании этой опции tar оставляет время модификации файлов, которые он извлекает, соответствующим времени, когда файлы были извлечены, вместо того, чтобы присваивать ему время, записанное в архиве. Эта опция не имеет смысла с '--list'.
Сохраняет извлеченные файлы с тем же правом собственности.
Извлекает всю информацию о защите. Эта опция заставляет tar устанавливать режимы (разрешения доступа) извлеченных файлов, как было записано в архиве. Если эта опция не используется, текущий umask устанавливает ограничения возможностей извлеченных файлов. Эта опция не имеет смысла с '--list'.
Сортирует имена для извлечения в соответствующий архив. Эта опция сообщает tar, что список имен файлов, которые нужно занести в список или извлечь, сортируется в том же порядке, что и файлы в архиве. Это позволяет использовать большой список имен даже на маленькой машине, которая в другом случае не будет способна держать все эти имена в памяти. Такой отсортированный список можно легко создать с помощью применения 'tar -t' к архиву и редактирования его вывода. В современных компьютерных системах эта опция, наверно, не нужна.
То же, что '--same-permissions' и '--same-order' одновременно. Опция '--preserve' не имеет краткого имени. Она эквивалентна '--same-permissions' и '--same-order' одновременно.
Создает архив с именем тома "имя". Эта опция заставляет tar писать заголовок тоа в начале архива. Если используется '--multi-volume' ('-M'), каждый том архива имеет заголовок 'имя Volume n', где 1 соответствует первому тому, 2 - второму, и т.д.
Фильтрует архив через gzip. Эта опция работает на физических устройствах (ленточных и т.д.) и отдаленных файлах как на нормальных файлах, данные на такие устройства или с них или отдаленных файлов переблокируются другой копией программы tar для проведения заданного размера блока. По умолчанию используются коипрессионные параметры: если вам нужно их отменить, используйте опцию '--gzip' и выполните gzip. (Или задайте переменную среды 'GZIP'.) Если опция '--gzip' дана дважды, или используется опция '--compress-blocks', tar перемещает архив на границу следующего блока.
Это может использоваться на нескольких устройствах, что требует, чтобы все операции были умещались в определенный размер. Опция '--gzip' не работает с опцией '--multi-volume' или c командами '--update', '--append', '--concatenate', '--delete'. Будет неточностью сказать, что GNU tar работает во взаимодействии с gzip с помощью метода, похожего на zip. Естественно, tar и gzjp могут работать вместе с одного вызова, например:
tar cfz archive.tar gz subdir
для сохранения всего 'subdir' в gzip-ированный архив. Затем вы
можете набрать:
tar xfz archive.tar.gz
для расширения и распаковки.
Отличие в том, что уплотнен весь архив. С помощью zip члены
архива архивируются индивидуально, а метод tar дает лучшее
уплотнение. С другой стороны, можно посмотреть содержимое
архива zip без его распаковки. А при использовании тандема tar
и gzip вы должны распаковывать архив для того, чтобы
посмотреть его содержимое. Однако это можно делать без места
на диске, при помощи каналов:
tar tfz archive.tar gz
О разрушенных уплотненных архивах: у gzip'ированных файлов нет
излишка для максимального уплотнения. Адаптивная природа схемы
уплотнения значит, что таблицы уплотнения неявно
распространены на весь архив. Если вы потеряли несколько
блоков, динамичная конструкция таблиц уплотнения становится
несинхронизированной, и невелик шанс, что вы сможете
впоследствии обновить архив. Существуют предложения о
потомном или пофайловом уплотнении в GNU tar. Это позволит
просмотр содержимого без распаковки и десинхронизированное
уплотнение каждого тома или файла в случае разрушенных
архивов. Действуя так, мы можем освободить определенную часть
уплотнения. Но тогда обновление может быть легче. Итак, есть и
за, и против. Посмотрим.
Фильтрует архив через compress. Иначе - как '--gzip' ('-z').
Фильтрует через prog (может принимать '-d').
'--compress'является индикатором архивов, хранящихся в уплотненном формате. Опция '--compress' используется при сохранении времени в сети и места в каналах, и когда мало памати. '--compress' заставляет tar уплотнять архив при его записи и распаковывать при чтении.
Чтобы выполнить уплотнение, tar выполняет утилиту compress. По умолчанию tar использует определенные параметры уплотнения. Если вы хотите их отменить, отмените опцию '--compress' и выполните утилиту compress. Используется вызов утилиты compress из самого tar, т.к. у нее нет доступа к удаленным ленточным устройствам.
Если недоступна утилита уплотнения, tar сообщает об ошибке.
'--compress-blocks' работает как '--compress', но при использовании в сочетании с '--create' также заставляет tar перемещать последний блок архива к границе следующего блока. Это используется на определенных устройствах при требовании, чтобы все операции умещались в заданный оазмер.
Заметьте: программа уплотнения может быть запатентована, и поэтому мы рекомендуем вам прекратить ее использовать. Мы надеемся, что в будущем будут другие программы уплотнения. Тогда мы изменим имя этой опции.
Когда задана эта опция, tar уплотняет архив (при его записи) или распаковывает (при его чтении). Используется в сочетании с '--create', '--extract', '--list' и '--compare'.
Действует как '--compress', но
Вы можете уплотнить архивы с помощью '--gzip'. tar использует программу gzip для уплотнения или распаковки архива при его записи или распаковке.
'--compress'. GNU Project не рекомендует вам использовать compress, потому что алгоритм его использования запатентован. Просто это будет посягательством на авторские права.
Вместо использования реальных ленточных устройств исользуйте '--gzip-block' или '--compress-block'.
Файл разрежен, если он содержит блоки нулей, существование которых записано, но для них не выделяется места на диске. Когда вы задаете опцию '--sparse' в сочетании с операцией '--create', tar при архивировании проверяет все файлы на разреженность. Если он находит разреженный файл, то использует разреженное представление файла в архиве.
dbm, содержащих много нулей. Эта опция сильно уменьшает место, необходимое для хранения такого архива.
Пожалуйста, всегда используйте '--sparse' при выполнении резервного копирования системы, чтобы избежать архивирования расширенных форм файлов, хранящихся в разреженном виде в системе. Даже если в вашей системе в данный момент нет разреженных файлов, они могут появиться в будущем. Если вы используете '--sparse' во время резервного копирования, вы можете быть уверены, что архив никогда не займет больше места на носителе, чем то, что файлы занимают на диске (в противном случае архивирование диска с разаеженными файлами может потребовать сотен лент.
tar игнорирует опцию '--sparse' при чтении архива.
'--sparse' '-S'
опцию '--label=архивная_метка' ('-V 'архивная_метка'). Появится специальная запись, идентифицирующая метка_тома как имя архива перед архивом, которая будет выводиться при использовании опции '--list'. Если вы создаете многотоиный архив при помощи '--multi-volume',
то метка тома будет иметь 'Volume nnn', добавленное к имени, которое вы даете, где n - номер тома архива. (Если вы используете опцию '--label=архивная_метка' при чтении архива, она проверяет соответствие метки на ленте той, что вы дали.
участок содержимого файла, который никогда не записывается. Содержимое дырки читается как нули. Во многих операционных системах память диска не рассчитана на дырки, но они включаются в длину файла. Если вы архивируете такой файл, tar может создать архив, который длиннее изначального. Чтобы tar попытался идентифицироватть дырки в файле, используйте '--sparse'. Когда вы используете опцию '--sparse', то для любых файлов, использующих меньше места на диске, чем ожидается, tar ищет файл для последовательных массивов нулей. Затем у файла, в котором находятся последовательные массивы нулей, он архивирует только "истинное содержимое". При извлечении (использование '--sparse' не является необходимым для извлечения) любые такие файлы и cозданные там, где были найдены продолжительные массивы нулей. Таким образом, если вы используете '--sparse', архивы tar занимают не больше места, чем изначальные.
Когда tar читает файлы, он вызывает модификацию их времени. Чтобы tar пытался оставить время таким, каким оно было перед тем, как файл был прочитан, используйте опцию '--atime-preserve'. Она не работает с файлами, которые не являются вашими собственными, и не работает интерактивно с пошаговой разгрузкой,
но достаточно хороша для некоторых других целей.
Хотя архив может содержать много файлов, он сам - тоже не более чем просто обыкновенный файл. Подобно другим файлам, архивный файл может быть записан на устройство для хранения, на ленту или диск, его можно посылать через канал или по сети, хранить в архивной системе файлов и даже хранить в другом архиве. Архивным файлов нелегко манипулировать (и даже читать) без использования утилиты tar или режима Tar в Emacs.
Физически архив состоит из серии элементов файлов, заканчивающейся элементом конца архива, который состоит из 512 байтов нулей. Элемент файла обычно описывает один из файлов архива (член архива) и состоит из заголовка и содержимого файла. Заголовки файлов содержат имена файлов и статистику, информацию о контрольных суммах, которую tar использует для определения разрушенных файлов, и информацию о типах.
Одно и то же имя может иметь более чем один член архива. Такое может быть, например, если в архиве хранится более одной версии файла. Для получения информации о добавлении новых версий файла в архив
Кроме элементов, описывающих члены архива, архив может содержать элементы, которыe tar использует для хранения информации.
Там приводится пример такого архивного элемента.
Пытается проверить архив после его записи. Эта опция заставляет tar проверять архив после его записи. Каждый том проверяется после того, как он был записан, и все несоответствия записываются на стандартный вывод ошибки. Для проверки требуется, чтобы архив был на носителе, на котором возможен возврат назад. Это значит, что каналы, некоторые картриджные устройства и еще некоторые устройства не могут быть проверены.
Удаляет файлы, занося их в архив.
Не заменяет файлы, существующие в архиве, новыми. Опция --keep-old-files предохраняет tar от замены существующих файлов на новые с теми же именами. Опция --keep-old-files не имеет смысла в сочетании с '--list'.
Обрабатывает поврежденные файлы. Эта опция проверяет файлы, подлежащие занесению в архив, на повреждения и, если они есть, специально их обрабатывает. Опция '--sparse' используется, когда много файлов dbm, например, подвергнутых резервному копированию. Использование этой опции очень уменьшает количество памяти, необходимое для хранения таких файлов. В более поздних версиях эту опцию, наверное, можно будет удалить, и проверка и обработка поврежденных файлов будет происходить автоматически специальными опциями GNU. На данном этапе эта опция нужна для задания на командной строке при создании или модификации архива.
Извлекает файлы на стандартный вывод. При использовании этой опции, вместо создания заданных файлов, tar записывает содержимое извлеченных файлов на стандартный вывод. Это может использоваться, только если вы извлекаете файлы, чтобы послать их через канал. Эта опция не имеет смысла с '--list'.
Не существует на нечитаемых файлах.
При использовании совместимости указателей файлов Unix для обновления каталоговых структур указанные файлы идут в один каталог и затем этот каталог tar'ируется.
Привести более новый пример, использующий абсолютные имена.
Пайпирование одного tar к другому - простой способ копирования содержимого каталога с одного диска на другой при сохранении дат, режимов, хозяев и структуры указателей всех этих файлов.
cd sourcedirectory; tar сf - . | (cd targetdir; tar xf -)
или
cd sourcedirectory; tar --create --file=- . | (cd targetdir; tar
--extract --file=-)
Архивные файлы могут использоваться для транспортировки группы
файлов из одной системы в другую: занесите все нужные файлы в архив в
компьютерной системе, перенесите архив в другой и извлеките оттуда
содержимое. Основным носителем переноса может быть магнитная лента,
Internet FTP или даже электронная почта (вы должны закодировать архив
с помощью uuencode для того, чтобы переслать его по почте). Обе машины
не должны использовать одну операционную систему, когда они
обеспечивают программу tar.
Несколько специальных моментов работы с лентами требуют более подробного рассмотрения. Они обсуждаются ниже.
Использование tar на ленточных устройствах сопряжено с большим количеством трудностей. Т.к. создание и манипулирование архивами, расположенными на магнитной ленте, было первоначальным предназначением tar, он имеет много возможностей, облегчающих это манипулирование.
Архивы обычно записываются на неперематывающие устройства - картриджи, магнитные ленты или гибкие диски.
Количество данных на ленте или диске зависит не только от их разме- ра, но также и от того, как они отформатированы. Катушка длиной 2400 футов магнитной ленты содержит 40 мегабайт данных при форматировании 1600 бит на дюйм. Картридж ленты EXABYTE содержит 2,3 гигабайт.
Магнитные носители можно использовать несколько раз: если архив на ленте больше не нужен, его можно удалить, а ленту или диск использовать опять. Однако качество носителя со временем снижается, и ленты и диски начинают производить ошибки данных. Катриджи EXABYTE нужно выбросить, когда появляется error count (какое-то количество бит, которые нельзя использовать) больше 10 кб.
Запись на магнитные носители и удаление с них производится с помощью магнитных полей и должна быть защищена от таких полей во избежание повреждения данных. Засовывать гибкий диск в железный футляр - не очень хорошая идея.
Использует архивный файл или файл устройства на машине hostname. Эта опция используется для задания имени файла архива, с которым работает tar. Если имя файла - '-', tar читает архив со стандартного ввода (при составлении списка или извлечении) или записывает его на стандартный вывод (при создании). Если имя файла '-' дано при модификации архива, tar читает изначальный архив со стандартного ввода и записывает новый архив на стандартный вывод. Если имя файла содержит ':', это интерпретируется как 'hostname:filename'. Если hostname содержит символ '@', это рассматривается как ' uaer@hostname:filename'. В обоих случаях tar вызывает команду rsh (или remsh) для того, чтобы начать '/etc/rmt' на удаленной машине. Если вы даете альтернативное login name, оно пойдет в rsh. Естественно, удаленная машина должна иметь выполнимый '/etc/rmt'. Эта программа - из калифорнийского университета, и копию кода источника можно найти с помощью источника для tar; она компилируется и устанавливается по умолчанию.
Если эта опция не дана, но задана переменная среды TAPE, используется ее значение, в противном случае старые версии tar используют специальное архивное имя (оно выбирается, когда tar откомпилирован). Обычно оно устанавливается на первое ленточное устройство или другой транспортабельный носитель I/O.
Начиная с версии 1.11.5 GNU tar использует в качестве устройства по умолчанию стандартный ввод и стандартный вывод, и я больше не стану предлагать автосатическую проверку устройства во время установления. Это не работает в очень многих случаях, это безнадежно. Сейчас инсталлятор может отменить стандартный ввод и стандартный вывод для устройства умолчания, если это для него/нее более предпочтительно. В дальнейшем, я думаю, использование tar будет осуществляться на каналах и дисках, а не на лентах, картриджах и дискетах.
Некоторые пользователи думают, что использование стандартного ввода и вывода протекает без проблем. Это приводит к злобным сюрпризам на вашем экране, если вы забыли задать имя файла вывода - особенно если вы собираетесь через сеть или терминальный сервер, способный переносить большое количество информации. Появляется так много сообщений об ошибках и так много противоречивых требований, что в конечном итоге мы считаем положение совершенно безвыходным. Можно, конечно, использовать что-нибудь вроде '/dev/tape', но это также сопряжено со многими трудностями, от зависания процессов до случайного разрушения лент. После всего этого вы по-другому станете относиться к стандартному вводу и выводу.
GNU tar читает и записывает архивы в блоках, я подозреваю, что это единственная причина того, что блочные устройства преобладают над символьными. Более вероятно, что блочные устройства просто более эффективны. Инсталлятор можно проверить с помощью 'DEFTAPE' в '<sys/mtio.h>.
Архивный файл локален, даже если он содержит двоеточие.
Использует отдаленную команду вместо rsh. Эта опция работает так, что люди, использующие что-нибудь другое, чем стандарт rsh (т.е. керберизованный rsh), имеют доступ к отдаленным устройствам. Когда эта команда не используется, вместо нее используется команда оболочки, найденная после установления программы tar, например '/usr/ucb/rsh', /usr/bin/remsh', /usr/bin/rsh', /usr/bsd/nsh'. Инсталлятор может это отменить с помощью определения переменной RSH среды во время установления.
Задает устройство и плотность.
Создает список (извлекает) многотомный архив.
Эта опция заставляет tar записывать многотомный архив - он может быть больше, чем соответствующий сердечнику, который его хранит.
Меняет ленту после записи число*1024 байта.
Эту опцию можно использовать, когда ваши ленточные устройства не могут точно определять конец лент. Установив максимальную длины ленты, вы можете полностью избежать проблем.
Выполняет файл в конце каждой ленты. Это обеспечивает '--multi-volume'.
Чтобы получить доступ к ленточному устройству на отдаленной машине, tar использует отдаленный сервер, написанный в университете Беркли. Отдаленный ленточный сервер можно установить с помощью '/etc/rmt' на любой машине, чье ленточное устройство вы хотите использовать. tar вызывает '/etc/rmt' выполнением rsh или remsh на отдаленной машине, обычно использующей другое login name, если оно требуется.
Обеспечивается копия источника для отдаленного ленточного сервера. Это Copуright @ 1983 by the Regents of the University of California, но может распространяться свободно. Инструкции по компилированию и установлению включены в 'Makefile'.
Если вы не используете опцию '--absolute-names', GNU tar не позволит вам создать архив, содержащий абсолютные имена файлов (имена, начинающиеся с '/'). Если вы попытаетесь, tar автоматически удалит начальные '/' из имен, которые он хранит в архиве. Он также выведет предупредительное сообщение, рассказывающее, что он делает.
При чтении архива, который был создан другой программой tar, GNU tar автоматически извлекает элементы архива, имеющие абсолютные имена, как если бы они не были абсолютными. Это важная особенность. Посетитель однажды дал tar ленту для пересохранения; оператор использовал Sun tar вместо GNU tar, и в результате многие участки нашего '/bin' заменились на версии с ленты - стоит ли говорить, что мы не очень обрадовались перспективе восстанавливать систему файлов по резервным копиям.
Например, если архив содержит файл '/usr/bil/computoy', GNU tar извлечет его в текущий каталог. Если вы хотите извлечь файлы архива под теми же абсолютными именами, которые они имели при создании архива, вы должны сделать 'cd /' перед извлечением файлов из архива или использовать опцицию '--absolute-names' или команду 'tar -C /...'.
Некоторые версии Unix (например Ultrix 3.1) требуют, чтобы при неправильности архива следовала короткая запись в конце ленты. В результате опция -M не будет правильно работать. Лучшее решение проблемы - использовать размер архива гораздо больше, чем значение по умолчанию 20.
Чтобы модифицировать архив, tar должен быть способным вернуться по архиву для того, чтобы перечитать или перезаписать блок, который был только что прочтен (или записан). Это возможно на двух типах файлов: нормальные файлы диска (или любые другие файлы, по которым можно вернуться с помощью 'lseek') и стандартные 9-дорожечные магнитные ленты (или другие типы лент, по которым можно вернуться с помощью MTIOCYOP ioctl.
Это значит, что команды '--append', '--update', '--concatenate' и '--delete' не работают на других типах файлов. По некоторым носителям просто нельзя вернуться, это значит, что эти команды и опции никогда не смогут с ними работать. К таким носителям относятся каналы и картриджные ленточные устройства.
По некоторым другим носителям можно возвращаться, и tar будет работать с ними, как только его модифицируют для этого.
Архивы, созданные с помощью опций '--multi-volume', '--label=архивная_метка' и '--incremental', могут не читаться другими версиями tar. В частности, обновление файла, который был разделен границей тома, требует очень осторожной работы с dd, если его вообще можно осуществить. Другие версии tar могут также создавать пустой файл, чье имя - то же, что в заголовке тома. Некоторые версии tar могут создавать нормальные файлы вместо заархивированных каталогов с помощью опции '--incremental'.
ошибки системы:
отрицается разрешение
нет такого файла в каталоге
не хозяин
ошибки tar:
ошибка контрольной суммы каталога
ошибка формата заглавия
ошибки носителя/системы:
ошибка i/o
устройство занято
При записи на ленту tar записывает содержимое архива в так называемые блоки. Чтобы изменить размер блока, принимаемый по умолчанию, используйте опцию '--block-=size=512-размер'. Каждый блок будет выражен в записях размера (одна запись tar - 512 байт).
Каждый файл, записанный в архив, использует по меньшей мере один целый блок. Поэтому использование больших блоков может привести к обилию пустых мест при небольшом количестве файлов. С другой стороны, больший блок может чаще читаться и более эффективно записываться.
Дальнейшее усложнение проблемы в том, что ленточные устройства полностью игнорируют разбивку на блоки. В данном случае тоже предпочтительнее большой размер блока (потому что уровни программного обеспечения ленточного устройства все еще уважают разбивку на блоки), но это не так важно, как на ленточных устройствах, уважающих разбивку на блоки.
При чтении архива tar обычно сам вычисляет размер архива. Если при этом был использован нестандартный размер блока во время создания архива, tar выдает сообщение о нестандартном блочном факторе, а затем нормально работает. На некоторых ленточных устройствах, однако, tar не может сам вычислить размер блока. На большинстве из них вы должны задавать блочный фактор (с помощью '--block-size=512-размер', больший, чем точный блочный фактор, а затем использовать опцию '--read-full-blocks' ('-B'). (Если вы задаете блочный фактор с помощью '--block-size=512-размер' и не используете опцию '--read-full-blocks', tar не пытается вычислять размер блока.) На некоторых устройствах вы можете всегда точно задать размер блока с помощью '--block-size=512-размер' при чтении, т.к. tar не вычисляет его. В любом случае используйте '--list' перед любым извлечением, чтобы посмотреть, правильно ли tar прочитал архив.
Если вы испрльзуете блочный фактор больше 20, более старые программы tar могут не быть способными читать архив, т.ч. мы рекомендуем для использования на практике ограничиться этим значением. Однако GNU tar предполагает как угодно большие размеры блоков, ограниченные только количеством виртуальной памяти или физическими характеристиками ленточного устройства.
Если вы записываете уплотненный архив на ленту с помощью '--compress' или '--gzip',
tar не сможет правильно разбить архив на блоки . Этого не случится, если вы записываете архив в нормальный файл через канал, или записываете его на ленточное устройство. Используйте '--compress-blocks' или '--gzip-block', чтобы заставить tar правильно выполнить разбивку на блоки.
Параметры формата задаются, когда архив записан на носитель. Оптимальный выбор параметров формата варьирует в зависимости от типа и числа архивируемых файлов и от носителя, используемого для хранения архива.
Чтобы задать параметры формата при создании архива, вы можете использовать опции, описанные в следующих разделах. По умолчанию, если вы не задаете параметров формата, tar использует специальные параметры. Вы не можете модифицировать уплотненный архив. Если вы создаете архив с помощью '--block-size=512-размер', вы должны задать размер блока для оперировании архивом.
Там приведены примеры параметров формата.
Данные в архиве группируются в записи, каждая по 512 байт. Записи записываются и читаются в так называемых блоках. Число записей в блоке (т.е. размер блока в 512-байтных единицах) называется блочным фактором. Опция '--block-size=512-размер' задает блочный фактор архива. По умолчанию блочный фактор обычно бывает 20 (т.е. 10240 байта), но его можно и устанавливать. Чтобы вычислить блочный фактор существуюшего архива, используйте 'tar --list --file=имя_архива'. На некоторых устройствах это может не работать.
Блоки разделены промежутками, которые занимают место на носителе архива. Если вы архивируете на магнитной ленте, использование большего блочного фактора (и, стало быть, больших блоков) обеспечивает более быстрое проникновении и позволяет вам поместить на ленту большее количество данных. Если вы архивируете на картридж, очень большой блочный фактор (скажем, 126 или больше) сильно повышает эффективность. С другой стороны, маленький блочный фактор может использоваться при архивировании маленьких файлов, чтобы избежать большого количества нулей. Вообщем, идеальный размер блока зависит от размера межблочных промежутков на ленте, которую вы используете, и среднего размера файлов, которые вы архивируете.
Архивы с блочным фактором больше 20 не могут читаться очень старыми версиями tar или некоторыми новыми версиями tar, выполняемыми на старых машинах с маленьким адресным пространством. С помощью GNU tar блочный фактор архива ограничивается только максимальным размером блока устройства, содержащего архив, или количеством доступной виртуальной памяти.
Если вы используете свой блочный фактор при создании архива, вы должны задать этот же блочный фактор при его модификации. Некоторые архивные устройства требуют от вас также задания блочного фактора при чтении архива, однако обычно это не нужно. Обычно вы можете использовать '--list' без задания блочного фактора - tar сообщает ваш размер блока и затем, как обычно, выдает список членов архива. Чтобы извлечь файлы из архива про нестандартном блочном факторе (в частности, если вы сомневаетесь в его значении), вы обычно должны использовать опцию '--read-full-blocks' ('-B') при задании блочного фактора больше, чем блочный фактор архива (т.е. tar --extract --read-full-blocks-block-size=300'.)
Задает блочный фактор архива. Может использоваться с любой операцией, но обычно не является необходимой с '--list'.
Эта опция используется для задания блочного фактора архива. При чтении или записывании архива tar будет читать и записывать архив в блоках вышеуказанного размера. По умолчанию блочный фактор устанавливается после компиляции tar и обычно равен 20.
Блочный фактор больше 20 не может ситаться очень старыми версиями tar или или некоторыми новыми версиями tar, выполняемыми на старых машинах с маленькой памятью.
На магнитную ленту большие блоки позволяют записывать больше данных. Если архив в файле диска или канале, вы, может быть, захотите использовать меньший блочный фактор, потому что большой вызвал бы большое количество нулевых байт в конце архива.
При записи на картриджи и другие поточные ленты, очень большой блочный фактор (скажем, 126 или больше) сильно повышает эффективность. Однако вы можете задать тот же блочный фактор при чтении или модификации архива.
В GNU tar блочный фактор архива ограничивается только максимальным размером блока устройства, содержащего архив, или количеством доступной виртуальной памяти.
Разбивает на блоки вывод уплотнения лент.
Игнорирует блоки нулей в архиве (имеется в виду EOF). Опция '--ignore-zeros' заставляет tar игнорировать блоки нулей в архиве. Обычно блок нулей указывает на конец архива, но при чтении поврежденного архива или архива, который был создан из нескольких архивов с помощью cat, эта опция позволяет tar читать весь архив. По умолчанию эта опция не работает, поскольку многие версии tar после нулевых блоков записывают всякую ненужную информацию.
Заметьте, что эта опция заставляет tar читать конец архивного файла, что иногда позволяет избежать проблем, когда на одной ленте хранится много файлов.
Производит переразбивку на блоки (для чтения каналов 4.2BSD). Если используется эта опция, tar не паникует, когда при попытке прочитать блок из архива возвращается неполный блок. Вместо этого tar продолжает читать, пока не получит полный блок.
Эта опция включается по умолчанию, когда tar читает архив со стандартного ввода или с отдаленной машины. Это из-за системы BSD Unix. Если эта опция не используется, tar сталкивается с ошибкой, как только он считывает неполный блок с канала.
Эта опция также используется с командами для модификации архива.
При работе с различными лентами или картриджами вы должны заботиться о выборе блокирования, которое является количеством блоков диска, которые вы записываете вместе как единый ленточный блок на ленту без ленточных промежутков. Ленточный промежуток - небольшой участок ленты, не содержащий информации, который используется для замедления остановки ленты и позднейшего восстановления скорости записи или чтения. Когда устройство начинает читать ленточный блок, он должен быть прочтен весь без остановок, а ленточный промежуток может остановить движение ленты без потери информации.
Высокая разбивка на блоки (при которой на ленточный блок кладется больше дисковых блоков) использует ленту более эффективно, потому что при ней меньше ленточных промежутков. Но чтение таких лент может быть более трудным для системы, т.к. потребуется больше памяти, чтобы получить наконец полный блок. В дальнейшем, если есть ошибка чтения на огромном ленточном блоке, не очень приятно будет восстанавливать информацию. Таким образом, разбивка на блоки не должна быть ни очень низкой, ни очень высокой. По умолчанию tar использует разбивку на блоки 20 по историческим причинам, и при чтении или записи диска ничего особенного не случается. При современной ленточной технологии более предпочтительна высокая разбивка на блоки. Sun рекомендует разбивку на блоки 126 для Exabyte и 96 для DAT. Другие производители могут давать для тех же лент другие рекомендации. Это может также зависеть от буферной техники, используемой в современном контроле лент. Некоторые предпочитают минимальную или наоборот максимальную разбивку на блоки, а некоторые используют для этой цели только степени двойки.
Итак, для разбивки на блоки нет строгих правил. Но разбивка на блоки времени чтения может идеально использоваться как разбивка на блоки времени записи. В одном моем знакомом месте сочли за лучшее использовать разбивку на блоки 32, чтобы гарантировать единообразие своих лент.
Большая часть ленточных устройств имеет два элемента в каталоге '/dev', или пару элементов, которые отличаются только меньшим числом для таких устройств. Давайте возьмем '/dev/tape', которое часто указывает на обычное ленточное устройство данной системы. Это можно записать в двух видах: '/dev/nrtape/' или '/dev/ntape'. Простейшее имя - перематывающая версия устройства, тогда как имя, содержащее 'nr' - неперематывающая версия того же устройства.
Перематывающее устройство автоматически перематывает ленту на начало, когда оно открыто или закрыто. Т.к. tar открывает архивный файл перед использованием и закрывает после него, это значит, что просто команда
tar cf /dev/tape каталог
будет перематывать ленту на начало и вначале, и после сохранения
содержимого каталога, таким образом предыдущее содержимое ленты
удаляется, и любая следующая записанная операция уничтожит то, что
только что было записано.
Итак, устройстрво перемотки предназначено для хранения одного, и только одного, файла. Если вы хотите положить более одного архива на одну ленту, вы должны избегать перематывающей версии ленточного устройства. Вы также должны уделять особое внимание положению ленты. Ошибки в положении могут привести к удалению с ленты ценных данных. Многие, наученные горьким опытом, будут использовать впредь только перематывающие устройства и ограничиваться одним файлом на ленте, чтобы избежать такого риска. Будьте полностью уверены, что запись не на то место ленты приведет к уничтожению всей информации, которая раньше на этом месте находилась, и скорее всего до конца ленты, и, главное, эту информацию не восстановить.
Чтобы сохранить каталог-1 как первый архив в начале ленты и убедиться, что лента готова для второго архива, вы должны набрать:
mt -f /dev/nrtape rewind
tar cf /dev/nrtape каталог-1
Ленточные метки - специальные магнитные шаблоны, записанные на
носителе, которые позже распознаются читающими средствами. Эти метки
используются после каждого файла, когда их много на одной ленте.
Пустой файл (т.е. две метки подряд) обозначает логический конец ленты,
после которого нет файлов. Обычно драйверы неперематывающих
устройств будут реагировать на требование закрытия, выданное tar,
прежде всего помещением двух меток в конец вашего архива и
возвращением одного из них назад. Итак, если вы извлекли ленту из
ленточного устройства, она кончилась. Но если вы на текущую позицию
записали другой файл, то вторая ленточная метка удалится и между
файлами останется только одна.
Теперь вы можете сохранить каталог каталог-2 как второй архив после первого на той же ленте с помощью:
tar cf /dev/nrtape каталог-2
И т.д. для всех архивов, которые вы хотите записать на ту же ленту.
Другой распространенный случай - когда вы не все архивы записываете в один и тот же день, и между ними вам нужно вынимать и хранить ленту. Главное - вы должны запомнить, сколько файлов уже хранится на вашей ленте. Предположим, у вас уже 16 файлов и вы готовы записать 17-й. Вы должны позаботиться о том, чтобы пройти первые 16 меток перед записыванием каталога-17 с помощью команд:
mt -f /dev/nrtape rewind
mt -f /dev/nrtape fsf 16
tar cf /dev/nrtape каталог-17
Во всех предыдущих примерах мы рассматривали разбивку на блоки
отдельно, но вы должны хорошо уметь делать такие вещи.
Так же, как архивы могут хранить более одного файла системы файлов, ленты могут хранить более одного архивного файла. Чтобы отметить, где архивные файлы (или другие типы файлов, хранящиеся на ленте) начинаются и кончаются, ленточные архивные устройства ставят ленточные метки на носителе архива: по одной между файлами и две после всех файлов.
Если обозначить данные нулями, а метки - крестами, то лента может выглядеть следующим образом:
0000x000000x00000x00x00000xx--------------------------
Ленточные устройства читают и записывают на них при помощи
читающей/пишущей головки - физической части устройства, которая может
воспринимать только одну точку на ленте в определенную единицу
времени. Когда вы используете tar для чтения или записи архивных
данных, устройство начинает чтение или запись с того места, где в
данный момент находится головка, независимо от того, какой это архив
или какая часть архива. Перед записыванием архива вы должны убедиться,
что никакие нужные данные не уничтожатся. Перед чтением архива нужно
удостовериться, что головка находится на начале архива, который вы
хотите прочитать. (restore находит архивы автоматически.)
Если вы хотите добавить новые архивные элементы файлов на ленту, вы должны перемотать ленту на клнец существующих файлов, встать на последнюю метку и записать новый архивный файл. Если вы запишете два архива, лента будет выглядеть следуюшим образом:
0000x000000x00000x00x00000xx000x0000xx----------------
Нужно объяснить различие при помощи размера блока (фиксированного или переменного).
Вы можете использовать утилиту mt для передвижения или перемотки ленты на место после заданного числа архивных файлов на ленте. Это позволяет перейти на начало архива перед его извлечением или чтением или на конец архивов перед записыванием нового.
Синтаксис команды mt:
mt [-f имя_ленты] операция [номер]
где имя_ленты - имя ленточного устройства, номер - число раз, сколько
нужно выполнить эту операцию (по умолчанию - один), операция - одна из
нижеприведенных:
Выдает номер ленточной метки на текущей позиции ленты.
Передвигает ленту на "номер" файлов вперед.
Передвигает ленту на "номер" файлов назад.
Перематывает ленту (не зависит от "номера").
Перематывает ленту и выключает ленточное устройство (не зависит от "номера").
Выдает информацию о состоянии ленты.
Если вы не задали имя_ленты, mt использует переменную TAPE среды; если TAPE не существует, mt использует устройство '/dev/rmt12'.
При успешном завершении операции mt возвращает 0, если команда не распознана - 1, если она ошибочна - 2.
Если вы используете опцию '--extract' c '--label=архивная_метка', tar читает архивную метку (на нее должна быть установлена головка) и печатает ошибку, если архивная метка не соответствует заданной. Если метки совпали, tar извлекает архив.
'tar --list --label' заставляет tar выводить метку.
Часто вам может понадобиться записать большой архив, больше, чем может поместиться на ленте, которую вы используете. В таком случае вы можете использовать много команд tar, но это неудобно, в частности если вы используете опции, такие как '--exclude=шаблон' или дампируете всю систему файлов. Таким образом, tar автоматически предполагает множественные ленты.
Наберите '--multi-volume' на командной строке, и tar будет, достигнув конца ленты, выдавать приглашение для следующей ленты и продолжать работу. Каждая лента будет иметь независимый архив, его можно прочесть отдельно. (за исключением случая, когда файл не весь помещается на ленту, и какая-то его часть находится на другой ленте. В этом случае вы должны извлечь его из первого архива, используя '--multi-volume', а затем при появлении приглашения поместить его во второй архив, т.ч. tar может обновить обе половинки файла).
При запросе новой ленты tar принимает любой из следующих ответов:
требование объяснить возможные ответы
требование немедленного выхода
требование записать следующий том на файл имя_файла
требование выхода в подоболочку
требование начать запись следующего тома.
Если вы хотите, чтобы все было более разработано, задайте опцию '--info-script=имя_сценария'. Файл имя_сценария должен быть программой (или сценарием оболочки), которая должна выполняться вместо обычной процедуры приглашения. Когда программа заканчивается, tar сразу же начинает запись следующего тома. Работа 'n' невозможна, если вы используете '--info-script=имя_сценария'.
Метод, который tar использует для определения конца ленты, несовершенен и не работает в некоторых операционных системах и на некоторых устройствах. Вы можете использовать '--tape-length=1024-размер', если tar сам не может определить конец ленты. Аргумент размера должен быть равен размеру ленты.
Имя тома, используемое tar в приглашении сменить ленту, можно изменить; если вы задаете опцию '--volno-file=файл_под_номером', файл_под_номером - десятичное число. Оно будет использоваться в качестве номера тома первого записанного тома. Когда tar закончит, он перепишет файл с текущим номером тома. (Это не изменяет номера тома, записанного на ленточной метке -
Если вы хотите поместить tar в цикл через серию ленточных устройств, вы можете использовать ответ 'n' на приглашение сменить ленту. Однако это совсем не работает с '--info-script=имя_сценария'. Таким образом, если вы задаете множественные опции tar '--foile=имя_архива', то используются заданные файлы в той же последовательности, что и тома в архиве. Только когда первый файл последовательности нужно использовать опять, tar выдает приглашение сменить ленту (или выполнить сценарий).
При использовании опции '--multi-volume' tar не прекращает работу, если он больше не может читать или записывать данные. Вместо этого он просит вас приготовить другой том. Если архив находится на магнитной ленте, вы должны сменить ленту, если на гибком диске - сменить диск, и т.д.
Каждый том многотомного архива - независимый архив tar. Например, вы можете отдельно составить список архива или извлечь его, только не нужно задавать опцию '--multi-vilume'. Однако, если один файл архива разделен томами, единственный способ успешно его извлечь - используя команду '--extract --multi-volume'.
Чтобы создать архив, который больше, чем может поместиться на одной единице носителя, используйте опцию '--multi-volume' в сочетании с '--create'.
Многотомным архивом можно манипулировать как всеми остальными архивами (с помощью задания опции '--multi-volume'), но он занимает более одной ленты или одного диска.
Когда вы задаете '--multi-volume', tar не сообщает об ошибке, когда доходит до конца тома архива (при чтении) или до конца носителя (при записи). Вместо этого он предлагает вам загрузить новый том. Если архив находится на магнитной ленте, вы должны сменить ленту, когда увидите приглашение, если на гибком диске - сменить диск, и т.д.
Вы можете читать каждый отдельный том многотомного архива, как если бы он сам был архивом. Например, чтобы составить список содержимого тома, используйте опцию '--list' без '--multi-volume'. Чтобы извлечь член архива из тома, используйте '--extract' без '--multi-volume'.
Если член архива расположен между томами (т.е. его элемент начинается на одном томе носителя и заканчивается на другом), вы должны задать '--multi-volume' для того, чтобы успешно его извлечь. В этом случае вы должны загрузить том, когда начинается член архива, и использовать 'tar --extract --multi-volume' - tar выдаст приглашение следующим томам, если они нужны.
'--info-script=имя_сценария' - то же, что и '--multi-volume', за исключением того, что tar не приглашает вас прямо сменить том носителя, когда предыдущий уже полон - вместо этого tar выполняет команды, которые вы храните в имя_сценария. Эта опция может использоваться для передачи сообщений типа 'Someone please come change my tape' при выполнении резервного копирования без оператора. Когда сделан имя_сценария, tar принимает, что носитель был изменен.
Создает многотомный архив при использовании в сочетании с '--create'. Для выполнения любой другой операции с многотомными архивами задайте '--multi-volume' в сочетании с этой операцией.
Создает многотомный архив по сценарию. Используется в сочетании с '--create'.
Когда tar записывает архив на ленту, он создает один ленточный файл. Если много архивов записано на одну ленту один за другим, каждый из них записывается как отдельный ленточный файл. Необходимо установить ленту перед выполнением извлечения. Чтобы это сделать, используйте команду mt. Для получения информации о команде mt и организации лент в последовательность ленточных файлов
Чтобы избежать проблем, вызванных тем, что бумажные метки не переносятся на носитель архива, вы можете включить метку - член архива, содержащий имя архива - или сам архив. Используйте опцию '--label=архивная_метка' в сочетании с '--create', чтобы при создании архива включить в него архивную метку.
Если вы создаете архив, используя и '--label=архивная_метка', и '--multi-volume', каждый том архива будет иметь архивную метку в форме 'архивная_метка Volume n', где n = 1 для первого тома, 2 - для второго, и т.д.
Если вы извлекаете архив при помощи '--label=архивная_метка', tar печатает ошибку, если архивная метка не соответствует заданной, и не извлекает архив. Только в этом случае вы можете включить в архивная_метка обычное выражение.
Чтобы добраться до архивной метки (или чтобы узнать, имеет ли архив ее вообще), используйте 'tar --list --verbose'. tar напечатает метку и информацию о членах архива, как в нижеприведенном примере:
% tar --verbose --list --file=iamanarchive
V----------0/0 0 Mar 7 12:01 1992 iamalabel--Volume Header--
-rw-rw-rw- ringo/user 40 May 21 13:30 1990 iamafilename
Включает архивную_метку в начало архива, после того, как он был создан, при использовании в сочетании с '--create'. Проверяет соответствие архивной метки заданной (при использовании в сочетании с опцией '--extract').
.* дамп
. + что такое дамп
. + разные уровни дампа
. - полный дамп = дамп всего
. - дамп уровня 1, 2 и т.д.
Уровень дампа n дампирует все измененное с уровня n-1
. + как использовать сценарии для дампа
. _ сценарии для выполнения после редактирования задания резервного
копирования (подробности)
. + Задания резервного копирования, что это такое
. - как настроить
. - точный текст сценария [/sp/dump/backup-specs]
. + Проблемы
. - rsh не работает
. - rtape не устанавливается
. - (другие?)
. + опция tar --imcremental
. + ленты
. - защита записи
. - типы носителей
. : размеры и виды, используемые для разных целей
. - файлы и ленточные метки
одна метка между файлами, две в конце
. - распололжение ленты
MT записывает две метки в конец, при записи одна из них стирается
Произвести резервное копирование системы - значит создать архивы, содержащие все файлы системы файлов. Эти архивы можно затем использовать для обновления нескольких или всех из этих файлов (например, если диск ломается или файл случайно стирается). Резервные копии систем файлов еще называются дампами.
Полные дампы можно делать только тогда, когда другие люди или программы не модифицируют файлы системы файлов. Если файлы модифицируются, когда tar производит резервное копирование, их нельзя сохранить в архиве, в этом случае вы бы не смогли их обновить, если бы вам это понадобилось. (Немодифицированные файлы записываютсмя без труда и не разрушают архив.)
Вы можете захотеть использовать опцию '--label=архивная_метка' для того, чтобы дать архиву метку тома, так что вы можете сказать, каков архив, даже если его метка выпала с ленты или случилось что-то в этом роде.
Если вы не уверены, что система, которую вы дампируете, помещается в одном томе, используйте опцию '--multi-volume'. Убедитесь, что у вас на руках достаточно ленты для завершения резервного копирования.
Если вы хотите дампировать каждую систему файлов отдельно, вам нужна опция '--one-file-system' ('-l'), для предохранения tar от пересечения границ системы файлов при сохранении (под)каталогов.
В опции '--incremental' ('-G') нет необходимости, т.к. есть полная копия всего в системе файлов, и полное восстановление из резервной копии может быть произведено только на полностью пустой диск.
Если вы не торопитесь и доверяете программе tar (и вашим лентам), очень удобно использовать опцию '--verify' чтобы убедиться, что ваши файлы действительно дампированы. Это также определит случаи, когда файл был модифицирован при архивации. К сожалению, не все устройства (в том числе и картриджи) можно проверить.
'--listed-incremental=snapshot-файл' всегда требует аргумента имени файла. Если файл не существует, установите нулевой уровень дампа, создающий файл. Если файл существует, используйте этот файл для того, чтобы увидеть, что изменилось.
'--incremental' работает с пошаговым резервным копированием старого формата GNU.
Эта опция должна использоваться только при создании пошаговой резервной копии системы файлов. При использовании опции '--incremental' tar записывает в начале архива элемент для каждого каталога, которым нужно оперировать. Элемент для каталога включает список файлов каталога во время завершения дампирования и флаг для каждого файла, показывающий, нужно ли его помещать в архив. Информация используется при осуществлении полного пошагового обновления.
Заметьте, что эта опция заставляет tar создавать нестандартный архив, который нельзя прочесть не-GNU версиями программы tar.
Если опция '--incremental' используется с '--list', то tar для каждого каталога архива выдает список его файлов на время создания архива. Эта информация подается в формате, в котором нелегко читать, но который зато не является неоднозначным для программы: каждому файлу предшествует 'Y', если этот файл присутствует в архиве, 'N', если файл не включен в архив или 'D', если файл - каталог (и включается в архив). Каждое имя файла заканчивается нулем. За последним файлом следует дополнительный нуль и чистая строка, показывающие конец данных.
Если опция '--incremental' используется с '--extract', то когда находится элемент каталога, все файлы, существующие в каталоге, но не записанные в список архива, удаляются из каталога.
Это удобно, когда вы восстанавливаете поврежденную систему файлов из пошаговой резевной копии: это сохраняет состояние системы файов тем, которое получено после резервного копирования. Если вы не используете '--incremental', система файлов, вероятно, наполнится файлами, которые не должны больше существовать.
'--listed-incremental=snapshot-файл' работает с резервным копированием формата GNU.
'--listed-incremental=snapshot-файл' действует как '--incremental', но при использовании в сочетании с '--create' также заставляет tar использовать файл "файл", содержащий информацию о состоянии системы файлов во время последнего резервного копирования, чтобы определить, какие файлы включить в создаваемый архив. Затем файл модифицируется tar. Если файл "файл" не существует при задании этой опции, tar его создает и включает все соответствующие файлы в архив.
Файл, являющийся независимым архивом, содержит дату своей последней модификации, номер, список устройств и имена каталогов. tar архивирует файлы с более поздней датой модификации или измененным временем, каталоги с неизмененным номером и устройством, но измененным именем. Файл модифицируется после того, как определяются файлы, подлежащие архивированию, но перед тем, как создан новый архив.
Выполнение пошагового дампа похоже на выполнение полного дампа, хотя здесь обычно нужно больше опций.
Вам может понадобиться использовать опцию '-M' для приказа tar хранить только те файлы, которые были модифицированы после указанного date. date - дата и время последнего полного/пошагового резервного копирования.
Стандартная схема - производить ежемесячный (полный) дамп - раз в месяц, еженедельный дамп - раз в неделю.
Ниже приведена копия сценария, ичпользуемого для дампирования систем файлов на машинах Free Software Foundation. Этот сценарий выполняется через cron поздно ночью, , когда люди меньше любят сидеть за машинами. Этот сценарий дампирует несколько систем файлов с нескольких машин (через NFS). Оператор должен убедиться, что все машины завершили работу ко времени, когда происходит дамп. Если машина ничего не выполняет, ее файлы не дампируются и пошаговый дамп следующего дня не сохраняет файлы, которые приходят для дампа.
#!/bin/csh
# Dump thingie
set now = 'date'
set then = ''cat date.nfs.dump'
/u/hack/bin/tar -c -G -v\
-f /dev/rtu20\
-b 126\
-N "$then"\
-V "Dump from $then to $now"\
/alpha-bits/gp\
/gnu/hack\
/hobbes/u\
/spiff/u\
/sugar-bombs/u
echo $now > date.nfs.dump
mt -f /dev/rtu20 rew
Вывод из этого сценария хранится в файле для того, чтобы оператор
позже мог его прочесть.
Этот сценарий использует файл 'date.nfs.dump' для хранения даты/времени последнего дампа.
Т.к. это поточное ленточное устройство, не делается попыток проверять архив. Это также объясняет высокий блочный фактор. Ленточное устройство быть перемотано с помощью команды mt после того, как произведен ламп.
'--incremental' ('-G') используется в сочетании с '--create', 'extract' или '--list' при резервном копировании и обновлении системы файлов. Архив нельзя извлечь, и нельзя составить список его членов с помощью опции '--incremental', если он был создан не с помощью опции. Эта опция должна использоваться только сценарием, а не пользователем, и обычно безотносительно к опции '--listed-incremental=snapshot-файл', которая описывается ниже.
'--incremental' в сочетании с '--create' заставляет tar записывать в начало архива элемент каждого каталога, который будет архивироваться. Элемент для каталога включает список всех файлов каталога во время, когда архив создан, и флаг для каждого файла, показывающий, нужно ли его заносить в архив.
Заметьте, что эта опция заставляет tar создавать нестандартный архив, который нельзя прочесть не-GNU версиями программы tar.
'--incremental' в сочетании с '--extract' заставляет tar читать список содержимого каталога, сохраненный в архиве, удалять файлы системы файлов, которые не существуют в их каталогах, когда архив был создан, и затем извлекать файлы в архив.
Это удобно, когда вы восстанавливаете поврежденную систему файлов из пошаговой резевной копии: это сохраняет сотояние системы файов тем, которое получено после резервного копирования. Если вы не используете '--incremental', система файлов, вероятно, наполнится файлами, которые не должны больше существовать.
При использовании '--incremental' в сочетании с '--list' tar для каждого каталога архива выдает список его файлов на время создания архива. Эта информация подается в формате, в котором нелегко читать, но который зато не является неоднозначным для программы: каждому файлу предшествует 'Y', если этот файл присутствует в архиве, 'N', если файл не включен в архив или 'D', если файл -каталог (и включается в архив). Каждое имя файла заканчивается нулем. За последним файлом следует дополнительный нуль и чистая строка, указывающие на конец данных.
'--listed-incremental=snapshot-файл' действует как '--incremental', но при использовании в сочетании с '--create' также заставляет tar использовать файл "файл", содержащий информацию о состоянии системы файлов во время последнего резервного копирования, чтобы определить, какие файлы включить в создаваемый архив. Затем файл модифицируется tar. Если файл "файл" не существует при задании этой опции, tar его создает и включает все соответствующие файлы в архив.
Файл, являющийся независимым архивом, содержит дату своей последней модификации, номер, список устройств и имена каталогов. tar архивирует файлы с более поздней датой модификации или измененным временем, каталоги с неизмененным номером и устройством, но измененным именем. Файл модифицируется после того, как определяются файлы, подлежащие архивированию, но перед тем, как создан новый архив.
Архив, содержащий все файлы системы файлов, называется полной резервной копией или полным дампом. Вы можете застраховать свои данные, каждый день получая полный дамп. Такая стратегия, однако, требует много места на носителе и времени.
Более эффективно делать полный дамп только иногда. Чтобы зарезервировать файлы между полными дампами, вы можете использовать пошаговый дамп. Дамп уровня 1 архивирует все файлы, изменившиеся после последнего полного дампа.
Обычная стратегия дампа - выполнять полный дамп раз в неделю, а дамп уровня 1 - раз в день. Это значит, что некоторые версии файлов фактически будут заархивированы более чем однажды, но эта стратегия дампа возможна для обновления системы файлов с помощью извлечения только двух архивов - последнего еженедельного (полного) дампа и последнего ежедневного (первого уровня) дампа. Единственная информация, которая теряется - файлы, измененные или созданные после последнего ежедневного резервного копирования (Производить дамп чаще одного раза в день обычно не стоит).
GNU tar работает с помощью сценария, который вы используете для полного дампа и дампа первого уровня. Использование сценариев (программ оболочки) для выполнения резервного копирования и пересохранения - удобная и надежная альтернатива ручному набору списков имен файлов и команд tar.
Перед использованием этих сценариев вам нужно отредактировать файл 'backup-specs', который задает параметры, используемые для сценариев резервного копирования и сценария обновления.
Когда заданы параметры резервного копирования, вы можете выполнить его или обновление путем выполнения соответствующего сценария.
Имя сценария обновления - restore. Имена сценариев резервного копирования первого уровня и полного - level-1 и level-0. Сценарий level-0 также существует под именем weekly, а level-2 - daily - эти дополнительные имена можно изменить в соответствии с вашим планом резервного копирования.
Пожалуйста, заметьте: сценарии резервного копирования и обновления были созданы для использования вместе. Т.к. возможно обновлять файлы вручную из архива, который был создан при использовании сценария резервного копирования, и наоборот, создавать вручную архив, который затем можно извлечь с помощью сценария обновления, легче использовать сценарии.
Файл 'backup-specs' задает параметры резервного копирования для сценариев резервного копирования и обновления, обеспечиваемых tar. Вы должны отредактировать 'backup-specs' для соответствия с конфигурацией вашей системы и планом при использовании этих сценариев.
оболочки... таким образом...'backup-specs' - в синтаксисе сценария оболочки. Какой параметр... посмотреть сценарии резервного копирования... которые нужно найти... сейчас синтаксис... значение указывает на неубедительное...'backup-specs' задает следующие параметры:
Пользовательское имя администратора резервного копирования.
Час, в который производится резервное копирование. Это может быть число от 0 до 23 или строка 'now'.
Устройство tar. Это устройство должно подключаться к машине, на которой выполняются сценарии дампа.
Команда для получения состояния архивного устройства, включая ошибки. На некоторых ленточных устройствах может не быть такой команды, в этом случае просто используйте 'TAPE_STSTUS=false'.
Блочный фактор, который tar использует при записи дампированного архива.
Список систем файлов, подлежащих дампированию. Вы можете включить в этот список имя каталога - включатся подкаталоги этой системы файлов, безотносительно к тому, как они могут выходить на другие сетевые машины. Подкаталоги других систем файлов будут игнорироваться. Имя машины задает, на какой машине выполнять tar которая содержит систему файлов. Однако на этой машине должен быть установлен GNU tar, и она должна иметь доступ к каталогу, содержащему сценарии резервного копирования и их файлы, использующие те же имена, что и на машине, на которой выполняются сценарии (т.е. которые pwd будет печатать, находясь в этом каталоге на этой машине). Если машина содержит систему файлов, не имеющую такой возможности, вы можете задать другую машину, так же, как доступ к системе файлов через NFS.
Список отдельных файлов для дампирования. К ним должен быть доступ с машины, на которой выполняется сценарий резервного копирования.
Нижеприведенное - текст 'backup-specs', как он возникает в FSF:
# site-specific parameters for file systen backup.
ADMINISTRATOR=fridman
BACKUP_HOUR=1
TAPE_FILE=/dev/nrsmt0
TAPE_STSTUS="mts -t $TAPE_FILE
BLOCKING=124
BACKUP_DIRS="
albert: /fs/fsf
apple-gunkies:/gd
albert:/fs/gd2
albert:/fs/gp
geech:/usr/jia
churchy:/usr/roland
albert:/
albert:/usr
apple-gunkies:/
apple-gunkies:/usr
gnu:/hack
gnu:/u
apple-gunkies:/com/mailer/gnu
apple-gunkies:/com/archive/gnu"
BACKUP_FILES="/com/mailer/aliases /com/mailer/league *[a-z]"
'Backup-specs' - в синтаксисе сценария оболочки. При редактировании сценария рассматриваются следующие соглашения:
Взятый в кавычки текст рассматривается как непрерывный, даже если он состоит из более чем одной строки. Таким образом, вы не можете включить текст, превращенный в комментарий, в многострочный, взятый в кавычки. BACKUP_FILES и BACKUP_DIRS - два наиболее предпочтительных параметра для этого.
Текст, взятый в кавычки, обычно не содержит wildcards. Однако в 'backup-specs' параметры BACKUP_FILES и BACKUP_DIRS могут содержать wildcards.
Синтаксис выполнения сценария резервного копирования:
'script-name' [время_выполнения]
где время_выполнения - или заданное системное время, или now. Если вы
не задаете время, подразумевается время, заданное в 'backup-specs'.
Вы должны начать сценарий с установления ленты или диска. Когда вы начали сценарий, он запрашивает у вас, если нужно, новую ленту или диск. Тома носителей не должны соответствовать архивным файлам - многотомный архив может начинаться с середины ленты, которая уже содержит конец другого многотомного архива. Сценарий restore выдает приглашение носителю для тома архива, т.ч., чтобы избежать сообщения об ошибке, вы должны запомнить, на какой дорожке лента или диск содержит тот или иной том архива.
Сценарии резервного копирования записывают два файла в систему файлов. Первый - файл '/etc/tar-backup/', который используется сценариями для хранения и извлечения информации о том, какие файлы дампированы. Этот файл не предназначен для чтения людьми и не должен быть ими удален.
Второй файл - файл протокола, содержащий имена систем файлов и дампированных файлов, время, в которое время было произведено резервное копирование, любые сгенерированные сообщения об ошибках и сколько места осталось в томе носителя после того, как был записан последний том архива. Вы можете проверять этот протокольный файл после каждого резервного копирования. Имя файла - 'log-месяц-день-год-level-1' или 'log-месяц-день-год-full'.
Сценарий также выдает имя каждой системы, дампированной на стандартный вывод.
(Этот раздел был убран - сейчас только основное.)
Чтобы обновить файлы, заархивированные с помощью сценарного резервного копирования, используйте сценарий restore. Синтаксис этого сценария:
(нет синтаксиса)
где ***** - системы файлов для обновления, ***** - регулярное
выражение, которое задает, какие файлы обновлять. Если вы задаете
-all, сценарий обновляет все файлы системы файлов.
Вы должны начать сценарий обновления c источника, содержащего первый том архива. Сценарий выдает приглашения для других томов, если нужно. Если архив на ленте, вам не нужно ее перематывать на начало - если головка расположена после начала архива, сценарий перемотает ленту при необходимости.
Если вы задаете '--all' как аргумент имени файла, сценарий restore извлекает файлы в активную систему файлов.
Предостережение: сценарий удаляет файлы из активной системы файлов, если они не были в системе файлов, когда был создан архив.
В этом разделе описываются текстуальные представления даты, которые принимает GNU. Это строки, которые вы, как пользователь, можете использовать как аргументы к разным программам. Интерфейс С (через функцию getdate) здесь не описывается.
Хотя синтаксис даты здесь может представлять любое время с нуля A.D., компьютерные целые числа недостаточно большие для такого (сравнительно) долгого времени. Наиболее ранняя дата, разрешенная для работы в системе Unix - полночь, 1 января 1970 UCT.
Дата - строка, возможно пустая, содержащая много элементов, разделенных пробелами. Пробел может быть опущен, если не может возникнуть неоднозначность. Пустая строка означает начало этого дня (т.е. полночь). Порядок элементов несущественен. Строка даты может содержать много объектов элементов:
Некоторые числа в большинстве случаев можно записать словами. Это наиболее часто используется для задания элементов дня недели или относительных элементов. Вот список:
first - 1
second - 2
third - 3
fouth - 4
fifth - 5
sixth -6
seven - 7
eighth -8
nine - 9
tenth - 10
eleventh - 11
twelfth - 12
last - -1
Когда месяц записан таким образом, он рассматривается, как будто
записан цифрами, это изменяет разрешенную строку.
В датах полностью игнорируется алфавитный принцип. Комментарии могут быть заключены в круглые скобки, и эти скобки могут вкладываться одни в другие. Слоги, не следующие за цифрами, игнорируются. Начальные нули игнорируются.
Элемент календарной даты задает день года. Она задается по-разному, в зависимости от того, как задается месяц: числами или буквами. Все строки, приведенные ниже, задают календарную дату:
1970-9-17 # ISO 8601
70-9-17 # Век подразумевается по умолчанию
70-09-17 # Начальные нули игнорируются
9/17/72 # Общепринятая запись США
24 Septenber 1972
24 Sept 72 # Сентябрь имеет особое сокращение
24 Sep 72 # Трехбуквенные сокращения разрешены всегда
Sep 24, 1972
24-sep-72
24sep72
Год также можно пропускать. В этом случае используется последний
заданный год или текущий. Например:
9/17
sep 17
Для месяцев, записываемых числами, разрешен формат ISO 8601 'год-месяц-число', где год - любое положительное число, месяц - число от 1 до 12, а день - от 1 до 31. Если год меньше 100, к нему добавляется 1990. Разрешена конструкция 'месяц/число/год', популярная в Соединенных Штатах. И еще 'месяц/число', где пропускается год.
Месяцы, записываемые буквами, можно писать полностью: 'January', 'February', 'March', 'April', 'May', 'June', 'Jnly', 'August', 'September', 'October', 'November' или 'December'. Месяцы, записываемые цифрами, могут сокращаться по первым трем буквам, за которыми следует точка. Также можно писать 'Sept' вместо 'September'.
Когда месяцы записываются буквами, календарная дата может быть задана так:
число месяц год
число месяц
месяц число год
число-месяц-год
Или, пропуская число:
месяц число
Элемент времени дня задает время данного дня. Вот несколько примеров, все из которых представляют одно и то же время:
20:02:0
20:02
8:02pm
20:02-0500 # B EST (Eastern U.S. Standard Time)
Чаще всего время суток задается 'часы/минуты/секунды', где часы -
число от 0 до 23, минуты - число от 0 до 59, а секунды - число от 0 до
59. Иногда секунды пропускаются, в этом случае им присваивается нуль.
Если за временем следует 'am' или 'pm' (или 'a.m.' или 'p.m.), час может быть задан от 1 до 12, а минуты можно пропустить (им присваивается 0). 'am' обозначает первую половину дня, 'pm' -вторую половину дня. В этой записи 12 предшествует 1: полночь - '12am', а полдень - '12pm'.
Время может иногда подвергаться коррекции по часовому поясу, записанной как 'знак_часы_минуты', где знак - + или -, часы - число часов пояса, а минуты - число минут пояса. Когда поправка на пояс дана таким образом, она вызывает интерпретацию времени UTC, отменяя любое предыдущее задание часового пояса или местного часового пояса. Минуты можно умолчать, когда используется коррекция по часовому поясу. Это единственный способ задания коррекции по часовому поясу с помощью частей часа.
В поправке часового пояса могут быть заданы 'am' или 'pm', но не одновременно.
Элемент часового пояса задает международный часовой пояс, определяемый небольшим числом букв. Любой включенный период игнорируется. Для обозначения часового пояса используется одна буква. В элементе часового пояса могут быть представлены только полные часы. Для получения информации о лучшем контроле за коррекцией часового пояса см. предыдущий раздел.
Вот список часовых поясов, не сохраняющих дневной свет.
'GMT' для Гринвича, 'UT' или 'UTC' для универсального (координационного), 'WET' для Западной Европы и 'Z' для войск.
'WAT' для Западной Африки и 'A' для войск.
'AT' для Азор и 'B' для войск.
'C' для войск
'AST' для Атлантического Стандарта и 'D' для войск.
'E' для войск и 'EST' для Восточного Стандарта.
'CST' для Центрального Стандарта и 'F' для войск.
'G' для войск и 'MST' для Горного Стандарта.
'H' для войск и 'PST' для Тихоокеанского Стандарта.
'I' для войск и 'YST' для Юконовского Стандарта.
'AHST' для Стандарта Аляска-Гаваи, 'CAT' для Центральной Аляски, 'HST' для Гавайского Стандарта и 'K' для войск.
'L'' для войск и 'NT' для Нома.
'IDLW' для Международной Западной Линии и 'M' для войск.
'CET' для Центральной Европы, 'FWT для Французской Зимы, 'MET' для Средней Европы, 'MEWT' для Среднеевропейской Зимы, 'N' для войск и 'SWT' для Шведской Зимы.
'EET' для Восточной Европы, зоны 1 СССР и 'O' для войск.
'BT' для Багдада, зоны 2 СССР и 'P' для войск.
'Q' для войск и 'ZP4' для зоны 3 СССР.
'R' для войск и 'ZP5' для зоны 4 СССР.
'S' для войск и 'ZP6' для зоны 5 СССР.
'T' для войск и 'WAST' для Западно-Австралийского Стандарта.
'CCT' для Китайского Берега, зоны 7 СССР и 'U' для войск.
'JST' для Японского Стандарта, зоны 8 СССР и 'V' для войск.
'EAST' для Восточно-Австралийского Стандарта, 'GST' для Гвамского стандарта, зоны 9 СССР и 'W' для войск.
'X' для войск.
'IDLE' для Международной Восточной Линии, 'NZST' для Новозеландского Стандарта, 'NZT' для Новой Зеландии и 'Y' для войск.
Вот основные пояса DST:
'BST' для Британского Лета.
'ADT' для Атлантического Дневного света.
'EDT' для Восточного Дневного света.
'CDT' для Центрального Дневного света.
'MDT' для Горного Дневного света.
'PDT' для Тихоокеанского Дневного света.
'YDT' для Юконского Дневного света.
'HDT' для Гавайского Дневного света.
'MEST' для Среднеевропейского Лета, 'MESC' для Среднеевропейского Лета, 'SST' для Шведского Лета и 'FST' для Французского Лета.
'WADT' для Западно-Австралийского Дневного света.
'EADT' для Восточно-Австралийского Дневного света.
'NZDT' для Новозеландского Дневного света.
Упоминание дня недели производится перед числом.
Дни недели можно записывать полностью: 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' и 'Saturday'. Можно их сокращать по первым трем буквам. Также разрешаются особые сокращения: 'Tues' для 'Tuesday', 'Wednes' для 'Wednesday' и 'Thur' или 'Thurs' для 'Thursday'.
Число может предшествовать элементу дня недели. Лучше использовать выражение типа 'third monday'. В этом контексте 'last день_недели' или 'next день_недели' тоже принимаются, происходит сдвиг на день назад или вперед от дня_недели.
Запятая, следующая за днем недели, игнорируется.
Элементы отношения сдвигают дату вперед или назад. Эффект элементов отношения накапливается. Вот несколько примеров:
1 year
1 year ago
3 years
2 days
Единица перемещения во времени задается строкой 'day' или 'month'.
Это неопределенные единицы, т.к. имеют неравную продолжительность.
Более точные единицы - 'firtnight' - 14 дней, 'week' - 7 дней, 'day' -
24 часа, 'hour' - 60 минут, 'minute' или 'min' - 60 секунд, 'second'
или 'sec' - 1 секунда. Суффикс 's' в этих единицах принимается и
игнорируется.
Единице времени может предшествовать коэффициент, данный как заданное число. Числа без знака рассматриваются как положительные. Если нет множителя, подразумевается 1. Строка, за которой идет 'ago', эквивалентна указанной единице времени без 1.
Строка 'tomorrow' значит текущий день + 1, 'yestesday' эквивалентно 'day ago'.
Cтроки 'now' или 'today' - относительные элементы, обозначающие временной сдвиг ноль, т.е. текущее время. Они могут использоваться для уточнения других элементов, например '12:00 today'. Строка 'this' также имеет значение нулевого сдвига времени, но употребляется в строках даты типа 'this thursday'.
Когда относительный элемент заставляет результирующую дату пересекать границу между DST и non-DST (или наоборот), час регулируется согласно местному времени.
Интерпретация обыкновенного десятичного числа зависит от контекста строки даты.
Если десятичное число находится в форме ггггммчч, и нет других элементов календарной даты перед ним, то гггг воспринимается как год, мм - как номер месяца, а число -число месяца.
Если десятичное число в форме ччмм, и перед ним на строке даты нет других элементов времени дня, то чч - час, а мм - минута часа. мм можно опустить.
Если и календарная дата, и время дня возникают слева от числа на строке даты, но нет относительного элемента, то число замещает год.
getdate первоначально был разработан Стивеном М. Белловином ( smb@research.att.com) в Чапел Хилл Университета Северной Калифорнии. Позднее он был поддержан многими в пользовательской сети и полностью доработан Ричем Зальцем ( rsalz@bbn.cjm) и Джимом Беретсом ( jberets@bbn.com) в августе 1990г. Различные проверки системы GNU были сделаны Дэвидом Маккензи, Джимом Мейерингом и др.
Эта глава была сначала написана Франсуа Пинардом ( pinard@iro.unmotreal.ca) на основе кода источника 'getdate.y' и затем отредактирована К.Берри ( kb@cs.umb.edu).
Архивный файл tar содержит серию записей. Каждая запись содержит RECORDSIZE байт. Хотя этот формат имеет место при пользовании магнитной лентой, часто используются и другие носители.
Каждый заархивированный файл представлен заглавием, описывающим файл, за которым может следовать какое-то число записей, дающих содержание файла. В конце архивного файла может быть запись, состоящая из двоичных нулей, и маркер конца файла. Разумная система должна записывать нули в конец, но такая запись не предполагается при чтении архива.
Записи могут быть разбиты на блоки для физических операций I/O. Каждый блок из n записей (где n задана с помощью опции '--block-size=512-размер') записывается посредством операции 'write ()'. На магнитных лентах результат этого - отдельная запись на ленте. При записывании архива последний блок записей должен быть записан в полном размере, и его запись должна состоять из одних нулей. При чтении архива разумная система должна иметь дело с архивами, последний блок которых короче остальных или который содержит ненужную информацию после нулей.
Заголовок определен в C (см. ниже). В GNU tar это часть файла 'src/tar.h':
/* Standard Archive Format - Standard TAR - USTAR. */
/* Header block on tape.
Здесь мы используем традиционные названия DP. "block" - большая
часть материала I/O. "record" - кусок информации, с которой мы имеем
дело. Обычно много "record" помещается в "block". */
#define RECORDSIZE 512
#define NAMSIZ 100
#define TUNMLEN 32
#define TGNMLEN 32
#define SPARSE_EXT_HDR 21
#define SPARSE_IN_HDR 4
struct sparse
{
char offset[12];
char numbytes[12];
};
union record
{
char charptr[RECORDSIZE]
struct header
{
char arch_name[NAMSIZ];
char mode[8];
char uid[8];
char gid[8];
char size[12];
char mtime[12];
char chksum[8];
char linkflag;
char arch_linkname[NAMSIZ];
char magic[8];
char uname[TUNMLEN];
char gname[TGNMLEN];
char devmajor[8];
char devminor[8];
/* Следующие поля были добавлены в GNU и не являются стандартными. */
char atime[12];
char ctime[12];
char offset[12];
char longnames[4];
/* Некоторые компиляторы сами вставляют содержимое. Но проще всегда
его вставлять! */
char pad;
struct sparse sp[SPARSE_INHDR];
char isextended;
char realsize[12]; /* истинный размер разреженного файла */
#if 0
char ending_blanks[12]; /* число нулей в конце файла, если
любое */
#endif
}
header;
struct extended-header
{
struct sparse sp[21];
char isextended;
}
ext_hdr;
};
/* Поле контрольной суммы заполняется, когда сосчитана контрольная
сумма. */
#define CHKBLANKS " " /* 8 пропусков, не нулей */
/* Поле magic заполняется этим значением, если допустимы uname и
gname, отмечающие архив, как в стандарте POSIX (сам GNU не согласован
с POSIX). */
#define TMAGIC "ustar " /* 7 символов и ноль */
/* Поле magic заполняется этим, если это элемент дампа формата GNU.
Но я полагаю, что это теперь неверно. */
#define GNUMAGIC "GNUtar " /* 7 символов и ноль */
/* Указательный флаг определяет тип файла. */
#define LF_OLDNORMAL '\0' /* нормальный дисковый файл, Unix-
совместимый */
#define LF_NORMAL '0' /* нормальный дисковый файл */
#define LF_LINK '1' /* указатель на предыдущий
дампированный файл */
#define LF_SYNLINK '2' /* символьный указатель */
#define LF_CHR '3' /* символьный специальный файл */
#define LF_BLK '4' /* блочный специальный файл */
#define LF_DIR '5' /* каталог */
#define LF_FIFO '6' /* специальный файл FIFO */
#define LF_CONFIG '7' /* непрерывный файл */
/* Дальнейшие типы указателей определены позже */
/* Заметьте, что стандарты допускают только прописные буквы от А до Z
для расширения, определяющего пользователя. Это значит, что определять
что-нибудь с помощью, например, '8' - плохая идея. */
/* Это элемент каталога, содержащий имена файлов, которые были в
каталоге в то время, когда был сделан дамп. */
#define LF_DUMPDIR 'D'
/* Идентифицирует NEXT файл на ленте, как имеющий длинное имя
указателя. */
#define LF_LONGLINK 'K'
/* Идентифицирует NEXT файл на ленте, как имеющий длинное имя. */
#define LF_LONGNAME 'L'
/* Это продолжение файла, который начался в другом томе. */
#define LF_MULTIVOL 'M'
/* Для хранения имен файлов, которые занимают более 100 символов. */
#define LF_NAMES 'N'
/* Это для разреженных файлов. */
#define LF_SPARSE 'S'
/* Этот файл - заголовок ленты/тома. Игнорирует его при извлечении. */
#define LF_VOLHDR 'V'
#if 0
/* Следующие два блока #define'ов не используются в GNU tar. */
/* В поле режима используются двоичные разряды - значения в
восьмиричных числах. */
#define TSUID 04000 /* задайте UID при выполнении */
#define TSGID 12000 /* задайте GID при выполнении */
#define TSVTX 01000 /* сохраните текст (бит). */
/* Возможности файлов */
#define TUREAD 00400 /* читать создателю */
#define TUWRITE 00200 /* записывать создателю */
#define TUEXEC 00100 /* выполнять/искать создателю */
#define TGREAD 00040 /* читать группе */
#define TGWRITE 00020 /* записывать группе */
#define TGEXEC 00010 /* выполнять/искать группе */
#define TOREAD 00004 /* читать другим */
#define TOWRITE 00002 /* записывать другим */
#define TOEXEC 00001 /* выполнять/искать другим */
#endif
/* Конец описания Стандартного Формата Архива. */
Все символы в заглавных записях представлены 8-битными символами в
локальном варианте ASCII. Все поля структуры прилегают друг к другу,
т.е. не нужно заполнять промежутки. Все символы носителя архива
хранятся смежно.
Байты, представляющие содержание файлов (после заглавной записи каждого файла) никак не транслируются и не ограничивают представленные символы определенным символьным множеством. В формате tar текстовые файлы не отличаются от двоичных файлов, и трансляция содержимого файлов не производится.
name, linkname, magic, uname and gname - заканчивающиеся нулем символьные строки. Все остальные поля в ASCII - заполняемые нулями восьмиричные числа. Каждое числовое поле ширины w содержит w-2 цифр, пробел и ноль, за исключением size и mtime, которые не содержат нуля.
Поле field - имя файла, в котором имя кaталога предшествует имени файла, и они разделены '/'.
Поле field обеспечивает 9 бит, задающих разрешения файлам, и три бит для задания режимов Set UID, Set GID и Save Text. Значения для этих бит определены выше. Когда требуются специальные разрешения для создания файла с данным режимом, и у пользователя, обновляющего файлы в архиве, нет такого разрешения, биты режима, задающие эти специальные разрешения, игнорируются. Режимы, которые не поддерживаются операционной системой, обновляющие файлы из архива, игнорируются. Неподдерживаемые режимы должны быть определены при создании или модификации архива; разрешение группы можно скопировать с других разрешений.
Поля uid и gid - численные идентификаторы пользователя и группы создателя файла соответственно. Если операционная система не предполагает таких идентификаторов, эти поля должны игнорироваться.
Поле size - размер файла в байтах; указываемые файлы архивируются с помощью поля, заданного как ноль.
Поле mtime - модификационное время файла во время, когда он был заархивирован. Это представление ASCII восьмиричного значения последнего времени, когда он был модифицирован, представляемое в целом числе секунд с 1 января 1970г. 00:00 Координационного Универсального Времени.
Поле chksum - представление ASCII восьмиричного числа простой суммы всех байт заглавной записи. Каждый 8-битный байт в заглавии прибавляется к числу без знака, инициализированному на ноль, точность которого должна быть не меньше семнадцати бит. При вычислении контрольной суммы поле chksum рассматривается, как состоящее из одних пропусков.
Поле typeflag задает тип заархивированного файла. Если реализация не рассматривает или разрешает указанный тип, файл извлекается, как если бы он был регулярным файлом. Если же он рассматривается и не разрешается, tar выдает предостережение на стандартный вывод.
Поля atime и ctime используются в проведении пошаговых резервных копирований, они сохраняют соответственно время доступа файлов и последнее измененное время.
offset используется для опции '--multi-volume' ('-M') при создании многотомного архива. offset - число байтов файла, которые нам нужны для того, чтобы продолжить файл на следующую ленту.
Следующие поля были добавлены для работы с разреженными файлами. Файл разрежен, если он содержит блоки, концы которых представлены нулями, т.е. неиспользуемыми данными. Проверить, разрежен ли файл - значит, посмотреть число блоков, занимаемых файлом и сравнить его с числом символов файла: если блоков, выделяемых под файл, меньше, чем должно выделяться под файл такого размера, то файл разреженный. Этот метод tar использует для определения разреженного файла, и если такой файл найден, он рассматривается отдельно от неразреженных файлов.
Разреженные файлы - часто файлы dbm или других типов базы данных, которые имеют данные на некоторых местах и пустоту в большей части файла. Такие файлы возникают, когда к ним применяется 'ls -l', они могут содержать очень мало важных данных. Таким образом нежелательно, чтобы tar производил резервное копирование этих файлов, когда много места занято пустыми блоками, что может привести к истощению места на диске гораздо раньше, чем надо бы. Т.ч. нужно рассматривать вопрос таким образом, чтобы пустые блоки не записывались на ленту. Вместо этого на ленту записывается описание разреженного файла: сколько дыр, насколько они велики, сколько данных находится в конце дыры. Таким образом файлы потенциально занимают намного меньше места на ленте, и когда они впоследствии извлекаются, это происходит таким же образом, как описано выше. Следующее - описание полей, используемых для работы с разреженными файлами:
sp - массив struct sparse. Каждый struct sparse содержит две 12-символьных строки, которые представлены смещением в файл и числом байтов, подлежащих записи в это смещение. Смещение абсолютное и не относится к смещению предыдущего элемента массива.
Заглавие может содержать четыре struct sparse одновременно; если нужно больше, они не сохраняются в заглавии.
Флаг isextended задается, когда нужно иметь дело с файлом. Это значит, что этот флаг может быть установлен только при работе с разреженным файлом, и установлен только если описание файла не помещается на место, предназначенное для разреженных структур в заглавии. Другими словами, нужен extended_header.
Структура extended_header используется для разреженных файлов, которым нужно больше разреженных структур, чем может поместиться в заглавии. Заглавие может содержать четыре таких структуры; если нужно больше, устанавливается флаг isextended и следующая запись - extended_header.
Каждая структура extended_header содержит массив из 21 разреженной структуры при наличии флага isextended у заглавия. Для описания разреженного файла может потребоваться неопределенное число таких extended_header.
Эти флаги представляют регулярный файл. Для совместимости со старыми версиями tar значение typeflag LF_OLDNORMAL должно рассматриваться как регулярный файл. Новые архивы должны создаваться при помощи IF_NORMAL. Также, для обратной согласованности, tar рассматривает регулярные файлы, чьи имена заканчиваются на '/', как каталоги.
Этот флаг представляет файл, указывающий на другой файл любого типа, заархивированный перед ним. Такие файлы идентифицируются в Unix с помощью файлов, имеющих то же устройство и номер. Указываемое имя задано на поле linkname с последним нулем.
Это представляет символьный указатель на другой файл. Указываемое имя задано на поле linkname с последним нулем.
Представляют символьные специальные файлы и блочные специальные файлы соответственно. В этом случае поля devmajor и devminor содержат номера большего и меньшего устройств. Операционная система отображает описания устройства в собственное локальное описание или может игнорировать элемент.
Этот флаг задает каталог или подкаталог. Имя каталога на поле name должно заканчиваться '/'. В системах, где заполнение диска выполняется на основе каталога, поле size содержит максимальное число байт (которые можно привести к ближайшей единице дискового блока), которое может содержать каталог. Нулевое поле size не указывает такого ограничения. Системы, не предполагающие такого ограничения, игнорируют поле size.
Задает специальный файл FIFO. Заметьте, что архивируется только существование файла FIFO, а не содержимое.
Задает непрерывный файл, который отличается от обыкновенного тем, что в операционной системе, которая его поддерживает, нет пропусков. Операционные системы, не позволяющие непрерывного размещения, рассматривают этот файл как обыкновенный.
Зарезервированы для реализаций клиентов. Некоторые из них используются в модификационном формате GNU (см.ниже).
Поле magic показывает, что этот архив был выведен в форматe P1003. Если это поле содержит TMAGIC, поля uname и gname будут содержать представление ASCII создателя и группы файла соответственно. Идентификаторы пользователя и группы используются скорее, чем поля uid и gid.
Формат GNU использует дополнительные типы файлов для описания новых типов файлов архива. Они перечислены ниже.
Представляет каталог и список файлов, созданный опцией '--incremental'. Поле size дает общий размер ассоциированного списка файлов. Каждому имени файла предшествует или 'Y' (этот файл должен быть в архиве) или 'N' (файл - каталог, или не хранится в архиве). Каждое имя файла заканчивается нулем. Существует дополнительный ноль после последнего имени файла.
Представляет файл, продолжающийся из другого тома многотомного архива, созданного с помощью опции '--multi-volume'. Начальный тип файла здесь не дается. Поле size дает максимальный размер этого куска файла (предполагается, что том не кончается до тех пор, пока файл не записан). Поле offset дает смещение от начала файла до того места, где начинается эта часть файла. Таким образом, size + offset - то же самое, что начальный размер файла.
Этот флаг показывает, что мы имеем дело с разреженным файлом. Нужно отметить, что архивирование разреженного файла требует специальных операций для нахождения дырок в файле, отмечающих положения этих дырок и выявляющих число байт данных, найденных после дырки.
Этот тип файла используется для того, чтобы отмечать заглавие тома, которое было дано с помощью опции '--label=архивная_метка'. Поле size - нулевое. Только первый файл каждого тома архива должен иметь этот тип.
Здесь приведен перечень различий между tar и cpio. Точность этой информации еще не проверялась. Написанию этого раздела, в основном через обзор 1991 года, способствовали следующие люди:
tar работает с символьными указателями в той форме, что в BSD; cpio же не имеет дела с символьными указателями в форме System V, предшествовавшей SVR4, и некоторые продавцы добавляли в свои системы символьные указатели, в то же время не давая cpio о них никакой информации. Другие делают это, но не тем способом, каким я это делал в Sun и который был принят AT&T (и который, я думаю, присутствует в том, что Беркли взял из AT&T и вложил в поздний BSD - мне кажется, туда попали мои изменения).
(SYR4 не так хорош с tar; в основном его cpio может работать с вводом формата tar и записывать его на вывод, и , вероятно, работает с символьными указателями. Они могут ничего не пытаться сделать для того, чтобы усилить tar.)
cpio работает со специальными файлами, а традиционный tar - нет.
tar произошел из V7, System III, System V и BSD; cpio - из System III, System V и позднего BSD (4.3 и позже)
Способ tar обработки множественных указателей на файл может обрабатывать системы файлов, предполагающие 32-битные номера (так же, как система файлов BSD); метод сpio требует от вас игры в некоторые игры (в его "двоичный" формат, i-числа и только 16 бит, и его "мобильный формат ASCII", 18 бит; он должен играть в игры с полем "идентификатора системы файлов" заглавия для того, чтобы убедиться, что идентификатор системы файлов / i-число - пара разных файлов - всегда разные).
При способе tar обработки множественных указателей на файл на ленту помещается только одна копия указателя, но имя, относящееся к этой копии - единственное, которое вы можете использовать для извлечения этого файла; cpios тоже кладет только одну копию каждого указателя, но вы можете извлечь его, используя любое из имен.
> Какой тип контрольной суммы используется, и как ее сосчитать.
О формате tar и cpio см. руководства. tar использует контрольную сумму, которая является суммой всех байт заглавия файла; cpio не использует контрольных сумм.
> Знает ли кто-нибудь, зачем нужно было делать cpio, когда уже был tar? Сообщите мне, пожалуйста.
cpio впервые появился в PWB/UNIX 1.0; UNIX тогда не имел ни одной общедоступной версии tar. Я не знаю, была ли в AT&T какая-нибудь версия tar или, может быть, люди в AT&T, создавшие cpio, вообще не знали о нем.
Если при обновлении на ленте есть повреждения, tar останавливается в этом месте, а cpio его перескакивает и пытается обновить остаток файлов.
Основное различие - в синтаксисе команд и формате заглавия.
tar более ориентирован на ленты, и во всем, что разбито на блоки, начинает работу с границы блока.
> Есть ли какие-нибудь различия в способности обновлять поврежденные архивы (если их вообще можно восстановить)?
Теоретически это должно быть легче под tar, т.к. разбиение на блоки позволяет находить заглавие с помощью некоторых вариаций 'dd skip=nn'. Однако в современном cpio и вариациях есть опция поиска заглавия следующего файла после ошибки с возможностью ресинхронизации. Но программное обеспечение драйверов многих лент не позволяет продолжать работу после ошибки носителя, что является единственной причиной использования синхронизации, если файлы не меняли размеров, когда вы записывали архив.
> Знает ли кто-нибудь, зачем нужно было делать cpio, когда уже был tar? Сообщите мне, пожалуйста.
Наверно, потому, что он более эффективен с точки зрения носителей (не разбивая все на блоки и используя только место, необходимое для заглавия, в то время как tar всегда использует для каждого файла минимум 512 байт) и может архивировать специальные файлы.
Может, вы захотите ознакомиться с доступными альтернативами. Это afio, GNU tar и pax, каждый из которых имеет свои расширения с определенной обратной связью.
Разреженные файлы были определены как разреженные с помощью tar (и их можно легко выявить, а GNU cpio их вообще не читает).