Вызов GNU TAR
3.1 Общий обзор tarОбычный способ вызова tar:
tar опция...[имя]...
Фактически вы можете набирать аргументы в любом порядке, но в данном
руководстве для облегчения понимания примеров опции всегда
предшествуют другим аргументам. Далее опции, начинающие основной
операционный режим (основную команду tar), обычно стоят первыми.
В tar cуществует много опций и три разных стиля их написания:
мнемонический, краткий и старый. Эти стили обсуждаются ниже. Некоторые
опции можно использовать со многими командами, в то время как другие
имеют смысл только с несколькими основными командами. Одна опция
должна определять основную команду, все остальные обязательны.
Помните, что опции tar очень чувствительны. Например, 'List' или
'list' не эквивалентны '--list' - фактически они даже не существуют.
Опции '-T' и '-t-' - разные опции: первая требует аргумента для
задания имени файла, обеспечивая список имен, а вторая не требует
аргумента и другой вариант ее написания - '--list'.
Каждое имя интерпретируется как имя члена архива, когда основная
команда - '--compare', '--delete', '--exrtact', '--list' или
'--update'. Для всех остальных основных команд имена интерпретируются
как имена файлов (включая каталоги) в системе файлов. tar
интерпретирует имена файлов, как относящиеся к рабочему каталогу.
tar делает все имена файлов относительными (с помощью передвижения
'/' при архивировании или пересохранении файлов), если вы не задали
что-то другое (используя опцию '--absolute-names').
- 50 -
FIXME: xref File Name
Interpretation
для получения более подробной информации о '--absolute-names' ('-P').
FIXME: имя еще одного узла, который, вероятно, неверен.
Различие между именами файлов и именами членов архива особенно
важно, когда используется глоббирование оболочки, и иногда является
источником недоразумений у новичков. Глоббирование - операция, с
помощью котороц определенные символы, например '*' или '?'
перемещаются и расширяются во все существующие файлы, соответствующие
данному шаблону. Проблема в том, что оболочки могут глоббировать
только при использовании существующих файлов системы файлов. Только
tar может глоббировать на членах архива, т.ч. при необходимости вы
можете убедиться, что вышеупомянутые символы достигают tar без
предварительной интерпретации их оболочкой. Для этого обычно
достаточно использовать '\' перед '*' или '?' или заключать аргумент в
кавычки.
Хотя имена часто задаются на командной строке, они также могут быть
считаны из текстового файла системы файлов при использовании
'--files-from=файлы_с_именами' ('-T файлы_с_именами').
Каждый из нижеприведенных подразделов группирует несколько опций
общей функциональности.
Вы можете использовать tar для хранения файлов в архиве, для
извлечения их из архива и производить другие типы манипуляций с
архивами. Начальный аргумент tar, называемый операцией,
задает действие, которое нужно выполнить. Другие аргументы tar - или
опции, которые влияют на способ выполнения операции, или имена файлов,
которые задают файлы, с которыми tar будет работать.
GNU возвращает только некоторые выходные состояния. Если вы
используете опцию '--compare' ('-d'), то ноль значит, что все прошло
нормально, за исключением, может быть, незначительной мелочи. Не ноль
- 51 -
значит, что что-то было неверно. Обычно не ноль - почти всегда 2, за
исключением некоторых операций, где он может быть 128.
3.2 Стили написания опций
3.2.1 Мнемонический стиль
Каждая опция имеет хотя бы одно мнемоническое имя, начинающееся с
двух тире подряд, например '--list'. Мнемонические имена опций более
понятны, чем краткие или старые, их предпочитают те, кто любит во всем
ясность. Иногда бывает, что одна мнемоническая опция имеет много
разных имен-синонимов. К тому же, имена мнемонических опцих иногда
могут быть даны с необычными сокращениями. Например, '--cre' может
быть использована вместо '--create', т.к. нет другой мнемонической
опции, начинающейся с '--cre'.
Некоторые опции требуют аргументов. Например, '--file=имя_архива',
сообщающая имя архива tar. Аргумент мнемонической опции обычно дается
сразу после самой опции и записывается такими же символами. Например,
опция '--file=имя_архива' дается файлом 'archive.tar' как аргументом
при использовании записи '--file=archive.tar'.
Мнемонические опции предназначены для простоты запоминания, в
отличие от кратких опций, о которых будет рассказано ниже. Например,
запись:
tar --create --verbose --block-size=20 --file=/dev/rmtO
дает хорошее представление о том, что делают команды, даже тем, кто
мало знаком с tar.
3.2.2 Краткий стиль
Большинство опций, хотя не все, также имеют краткое имя, состоящее
из одинарного тире и еще одного символа, например '-t' - краткое имя
мнемонической опции '--list', они имеют одно и то же значение.
- 52 -
Функциональности этих опций абсолютно идентичны.
Краткие имена опций быстрее набираются на клавиатуре, чем
мнемонические. В данном руководстве мы часто после мнемонической опции
в скобках даем ее краткую форму (если она существует).
Краткие опции, требующие аргументов, обычно записываются перед ними
и отделены от них пробелом. Иногда можно писать аргумент сразу после
краткого имени опции, не оставляя пробела. Например, можно писать '-f
аrchive.tar' или '-farchive.tar вместо '--file=archive.tar'. Когда
опция дана отдельно, ее аргумент пишется после нее, как обычно в
программах Unix. Например:
tar -c -v -b 20 -f /dev/rmtO
Краткие опции можно смешивать, но, в противоположность старым
опциям, это необязательно. Когда несколько опций идут подряд, для них
всех можно использовать одно общее тире. Только последняя из опций
может иметь аргумент. (Но мне кажется, что очень глупо нагромождать
несколько опций, последняя из которых имеет аргумент. Я даже думаю,
что опции GNU getopts достаточно, чтобы это сделать).
Если вы вставляете краткие опции в команду, убедитесь, что вы
вставили туда и их аргументы.
3.2.3 Старый стиль опций *
Старые опции - одиночные буквы без тире, которые появляются только в
положении, следующем за ключевым словом tar команды после пробела.
Буква старой опции соответствует букве краткой опции. Например, старая
опция 't' - то же, что краткая опция '-t' и мнемоническая '--list'.
Все время своего существования программы tar, GNU и non-GNU,
используют старые опции. GNU tar использует их не только по
историческим причинам, но и потому, что ими пользуются многие люди.
Все старые опции записываются как отдельный аргумент без пробелов,
- 53 -
в виде слияния всех букв, задающих эти опции. Этот набор букв должен
появляться на командной строке первым, после имени программы tar:
старые опции не могут быть ни в каком другом месте. Затем, если опция
требует аргументов, они тоже появляются на командной строке. Аргументы
опции возникают так же, как буквы, к которым они относятся. Синтаксис
команды tar при использовании старых опций:
tar буква...[аргумент]... [опция]...[имя]...
Этот синтаксис используется, потому что он позволяет вам набирать
одиночные буквы для операций и опций как отдельные аргументы tar без
предшествующих '-'или пробелов между буквами. 'tar cv'или 'tar -cv'
эквивалентны 'tar -c -v'.
Для совместимости с Unix tar первый аргумент может содержать
опционную букву (или группы опционных букв): например, 'tar cv' задает
опцию '-v' к команде '-c'. Когда опции, для которых нужны аргументы,
даются вместе с командой, все связанные аргументы следуют в том же
порядке, что и опции. Вышеприведенный пример можно записать в старом
стиле следующим образом:
tar cvbf 20 /dev/rmtO
Здесь '20' - аргумент '-b', а '/dev/rmtO' - аргумент '-f'.
С другой стороны, синтаксис старого стиля создает некоторые
сложности для понимания, какой аргумент к какой опции относится, это
часто создает путаницу. Например,в команде 'tar cvbf 20 /dev/rmtO'
'20' - аргумент для '-b', '/dev/rmtO' - аргумент для '-f', а '-v' не
имеет аргументов. Даже при использовании кратких опций 'tar -c -v -b
20 -f /dev/rmtO' все более понятно, т.к. аргументы стоят
непосредственно после опций, которым они соответствуют.
Если вы хотите изменить порядок букв в аргументе старой опции,
проверьте, чтобы вы так же изменили порядок аргументов, им
соответствующих.
Этот старый способ написания опций tar может удивить даже опытных
- 54 -
пользователей. Например, две команды
tar cfz archive.tar.gz file
tar -cfz archive.tar.gz file
- совершенно разные. Первый пример использует 'archive.tar.gz' как
значение для опции 'f', а потом содержит опцию 'z'. Во втором же
примере 'z' используется как значение для опции 'z'. (Мне кажется
достаточно неудобным, что getopts воспринимает оставшееся 'z' как
значение для 'f'. Я считаю, что из соображений ясности нельзя
допускать сбегания опционных букв, если какие-нибудь из них требуют
аргументов. Но это нужно для согласованности с традиционными
системами). Второй пример можно исправить многими способами. Приведу
несколько из них:
tar -cfz archive.tar.gz file
tar -cf archive.tar.gz -z file
tar cf archive.tar.gz -z file
3.2.4 Cмешанные стили опций
В одной команде tar можно перемешать все три стиля, соблюдая правила
каждого из них.
В GNU tar до 1.11.6, испольовавшем опции старого стиля, исключалась
возможность использования опций, не имеющих кратких форм. Многие
пользователи выражали возмущение по поводу дешифратора опций tar, и я
его изменил. Однако tar должен быть согласованным с другими tar.
Краткие опции должны обеспечивать полную согласованность. Так что,
если вы найдете какие-то несоответствия в дешифровке опций, сообщите,
пожалуйста, мне.
Опции старого стиля можно смешивать с современными опциями в одном и
том же вызове программы tar. Однако, опции старого стиля должны быть
представлены только одним аргументом, а современные могут даваться
только после всех аргументов опций старого стиля. Если это правило не
выполняется, современная опция может быть неправильно интерпретирована
- 55 -
как значение аргумента одной из опций старого стиля.
Например, все следующие команды совершенно эквивалентны и
иллюстрируют множество комбинаций стилей опций.
tar --create --file=archive.tar
tar --create --f archive.tar
tar --create --farchive.tar
tar --file=archive.tar --create
tar --file=archive.tar --c
tar -c --file=archive.tar
tar -c -f archive.tar
tar -c -farchive.tar
tar -cf archive.tar
tar -cfarchive.tar
tar -f archive.tar --create
tar -f archive.tar -c
tar -farchive.tar --create
tar -farchive.tar -c
tar c --file=archive.tar
tar c -f archive.tar
tar c -farchive.tar
tar cf archive.tar
tar f archive.tar --create
tar f archive.tar -c
tar fc archive.tar
C другой стороны, приведенные команды не эквивалентны следующему
набору:
tar -f -c archive.tar
tar -fc archive.tar
tar -fcarchive.tar
tar -farchive.tarc
tar cfarchive.tar
Эти последние примеры значат нечто более сложное, чем может
понадобиться пользователю. Первые четыре задают, что архив tar должен
- 56 -
быть назван '-c', 'c', 'carchive.tar' или 'archive.tarc'
соответственно. Первые два примера также задают один неопционный
аргумент, имеющий значение 'archive.tar'. Последний пример содержит
только буквы опций старого стиля и не содержит значение аргумента.
3.3 Все доступные опции *
Опции изменяют способ выполнения tar операций.
'--absolute-names'
'--after-date=дата'
Ограничивает оперирование с файлами заданной датой.
FIXME: xref File Exsclusion
'--block-size=номер'
Задает блочный фактор архива.
FIXME: xref Blocking Factor
'--compress'
Задает уплотненый архив.
FIXME: xref Compressed Archives
'--confirmation'
Запрашивает подтверждение для каждого файла.
FIXME: xref Interactive Operations
FIXME: xref должен быть синоним.
'--derefence'
Рассматривает символьный указатель как альтернативное имя
для файла к точкам указателя.
FIXME: xref Symbolic Links
'--directory=каталог'
Изменяет рабочий каталог.
FIXME: xref Сhanging Working Directory
- 57 -
'--exclude=шаблон'
Исключает файлы, соответствующие выпажению, записанному в
шаблоне.
FIXME: xref File Exclusion
'--exclude-from=файл'
Исключает файлы, соответствующие какому-нибудь из
выражений, записанных в фале 'file'.
FIXME: xref File Exclusion
'--file=имя_архива'
Называет архив.
FIXME: xref Archive Name
'--files-from='file'
Читает аргументы имени файла из файла системы файлов.
FIXME: xref File Name lists
'--ignore-umask'
Устанавливает режимы извлечения файлов к их записям в
архиве.
FIXME: xref Writing Options
'--ignore-zeros'
Игнорирует введение данных конца архива.
FIXME: xref Archive Reading Options
'--tape-length=n (-L)'
FIXME: альтернативный способ создания мультиархива. Идет до
этой длины и выдает приглашение новой ленте, автоматически
включает multi-volume.
'--info-script=файл_программы'
Создает многотомный архив с помощью сценария.
FIXME: xref Multi-Volume Archives
- 58 -
'--interactive'
Запрашивает подтверждение перед выполнением любой операции
с файлом или членом архива.
'--keep-old-files'
Предотвращает перезаписывание во время извлечения.
FIXME: xref File Writing Options
'--label=метка_архива'
Включает метку архива в созданный архив.
FIXME: xref Archive Label
'--modification-time'
Устанавливает время модификации извлеченных файлов.
FIXME: xref File Writing Options
'--multi-volume'
Задает многотомный архив.
FIXME: xref Multi-Volume Archives
'--newer=дата'
Ограничивает операции изменения файлов указанной датой.
FIXME: xref File Exclusion
'--newer-mtime=дата'
Ограничивает операцию модификации файлов указанной датой.
FIXME: xref File
Exclusion
'--old'
Создает архив старого формата.
FIXME: xref Old Style File Information
FIXME: согласны ли мы, что это нужно убрать как синоним?
'--old-archive'
Создает архив старого формата.
FIXME: xref Old Style File Information
- 59 -
'--one-file-system'
Предохраняет tar от пересечения границы системы файлов при
архивировании.
FIXME: xref File Exclusion
'--portability'
Создает архив старого формата.
FIXME: xref Old Style File Information
'--preserve-order'
Помогает составлять большие списки имен файлов на машинах с
малым количеством памяти.
FIXME: xref Archive Reading Options
'--preserve-permission'
Устанавливает режимы извлечения файлов к их записям в
архиве.
FIXME: xref File Writing Options
'--read-full-blocks'
Читает архив с размером блока меньше заданного или
содержащий неполные блоки.
FIXME: xref Archive Reading Options
'--record-number'
Выдает номер записи при генерации сообщения.
FIXME: xref Additional Information
'--same-order'
Помогает составлять большие списки имен файлов на машинах с
малым количеством памяти.
FIXME: xref Archive Reading Options
'--sparse'
Устанавливает режимы извлечения файлов к файлам, записанным
в архиве.
FIXME: xref File Writing Options
- 60 -
'--starting-file= имя_файла'
Начинает чтение в середине архива.
FIXME: xref Scarce Disk Space
'--to-stdout'
Записывает файлы на стандартный вывод.
FIXME: xref File Writing Options
'--uncompress'
Задает уплотненный архив.
FIXME: xref Compressed Archives
"-V метка_архива'
Включает метку архива в созданный архив.
FIXME: xref Archive Label
FIXME: был -volume
'--verbose'
Выводит имена файлов или членов архива, которыми нужно
оперировать.
FIXME: xref Additional Information
'--verify'
Делает проверку на несоответствия в архиве сразу после
того, как он был записан.
FIXME: xref Write Verification
'-B'
Читает архив с размером блока меньше заданного или
содержащий неполные блоки.
FIXME: xref Archive Reading Options
'-K имя_файла'
Начинает чтение в середине архива.
FIXME: xref Scarce Disk Space
'-M'
Задает многотомный архив.
- 61 -
FIXME: xref Multi-Volume Archives
'-N дата'
Ограничивает операции изменения файлов указанной датой.
FIXME: xref File Exclusion
'-O'
Записывает файлы на стандартный вывод.
FIXME: xref File Writing Options
"-R'
Выдает номер записи при генерации сообщения.
FIXME: xref Additional Information
'-S'
Разреженно архивирует разреженные файлы.
FIXME: xref Sparse Files
'-T файл'
Читает аргументы имени файла из файла системы файлов.
FIXME: xref File Name Lists
'-W'
Делает проверку на несоответствия в архиве сразу после
того, как он был записан.
FIXME: xref Write Verification
'-Z'
Задает уплотненный архив.
FIXME: xref Compressed Archives
'-b число'
Задает блочный фактор архива.
FIXME: xref Вlocking Factor
'-f имя_архива'
Имя архива.
- 62 -
FIXME: xref Archive name
'-h'
Рассматривает символьный указатель как альтернативное имя
для файла к точкам указателя.
FIXME: xref Symbolic Links
'-i'
Игнорирует введение данных конца архива.
FIXME: xref Archive Reading Options
'-k'
Предотвращает перезаписывание во время извлечения.
FIXME: xref File Writing Options
'-l'
Предохраняет tar от пересечения границы системы файлов при
архивировании.
FIXME: xref File Exclusion
'-m'
Устанавливает время модификации извлеченных файлов.
FIXME: xref File Writing Options
'-o'
Создает архив старого формата.
FIXME: xref Old Style File Information
'-p'
Устанавливает режимы извлечения файлов к файлам, записанным
в архиве.
FIXME: xref File Writing Options
'-s'
Помогает составлять большие списки имен файлов на машинах с
малым количеством памяти.
FIXME: xref Archive Reading Options
- 63 -
'-v'
Выводит имена файлов или членов архива, с которыми нужно
оперировать.
FIXME: xref Additional Information
'-w'
FIXME: cм. -interactive.
'-z'
Задает уплотненный архив.
FIXME: xref Compressed Archives
'-z -z'
Создает целый блочный уплотненный архив.
FIXME: xref Compressed Archives
FIXME: это единственная опция в краткой форме, состоящая из
двух букв.
'-C 'directory''
Изменяет рабочий каталог.
FIXME: xref Сhanging Working Directory
'-F программный_файл'
Создает многотомный архив с помощью сценария.
FIXME: xref Multi-Volume Archives
'-X 'file''
Выключает файлы, соответствующие какому-нибудь из
регулярных выражений, записанных в фале 'file'.
FIXME: xref File Exclusion
3.3.1 Выбор устройства и переключение *
-f [имя_машины:]файл
--file=[имя_машины:]файл
Используйте архивный файл или устройство на имени названной
машине.
- 64 -
FIXME: xref Device
--force-local
Архивный файл локален, даже если он содержит двоеточие.
FIXME: xref Device
--rsh-command=команда
Используйте отдаленную команду вместо rsh.
FIXME: xref Device
-[0-7][imh]
Задает устройство и плотность.
FIXME: xref Device
-M
--multi-volume
Создает многотомный архив (или дает список его
содержимого).
FIXME: xref Multi
-L число
--tape-length=число
Меняет ленту после задания число*1024 байта.
FIXME: xref Multi
-F файл
--info-script=файл
--new-volume-script=файл
Выполняет 'file' в конце каждой ленты. Предполагает
'--multi-volume' ('-M').
FIXME: xref Multi
3.3. 2 Разбивка устройства на блоки *
-b блок
--block-size=блок
Устанавливает размер блока=блок*1024 байта.
- 65 -
FIXME: xref Blocking
--block-compress
Блокирует сброс на ленту.
FIXME: xref Blocking
-i
--ignore-zeros
Игнорирует блоки нулей в архиве (имеется в виду EOF).
FIXME: xref Blocking
-B
--read-full-blocks
Переблокирует по мере чтения (для чтения каналов 4.2BSD).
FIXME: xref Blocking
3.3.3 Cтарая классификация опций *
Опции можно сгруппировать в три категории:
Общие опции
Опции, которые всегда имеют значение.
Опции создания
Опции для создания или модификации архива.
Опции выведения
Опции для составления списеа или извлечения файлов.
Опции, которые всегда имеют значение:
'-B число', '--block-size число'
'-f имя_файла', '--file имя_файла'
'-C каталог', '--directory каталог'
'-M', '--multi-volume'
'-N дата', '--after-date дата'
'-R', '--record-number' ('-R')
- 66 -
'-T имя_файла', '--files-from имя_файла'
'-v', '--verbose' ('-v')
'-w', '--interactive'
'-X файл', '--exclude файл'
'-z', '-Z', '--compress', '--uncompress'
Ниже приведены опции для создания или модификации архива. Эти опции
используются для контроля за файлами, которые tar заносит в архив, или
для проверки формата записанного архива.
FIXME: ref Format
За исключением указанных, эти опции используются с командами
'--create' ('-c'), '--append' ('-r'), '--update' ('-u'),
'--concatenate' ('-A') и 'delete'. Также заметьте, что опция {No value
for "read-full-block"}
FIXME: (pxref Extraction Options)
также используется с командами '--append' ('r'), '--update' ('-u'),