Вперед Назад Содержание

3. ВЫЗОВ 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').

Различие между именами файлов и именами членов архива особенно важно, когда используется глоббирование оболочки, и иногда является источником недоразумений у новичков. Глоббирование - операция, с помощью котороц определенные символы, например '*' или '?' перемещаются и расширяются во все существующие файлы, соответствующие данному шаблону. Проблема в том, что оболочки могут глоббировать только при использовании существующих файлов системы файлов. Только tar может глоббировать на членах архива, т.ч. при необходимости вы можете убедиться, что вышеупомянутые символы достигают tar без предварительной интерпретации их оболочкой. Для этого обычно достаточно использовать '\' перед '*' или '?' или заключать аргумент в кавычки.

Хотя имена часто задаются на командной строке, они также могут быть считаны из текстового файла системы файлов при использовании '--files-from=файлы_с_именами' ('-T файлы_с_именами').

Каждый из нижеприведенных подразделов группирует несколько опций общей функциональности.

Вы можете использовать tar для хранения файлов в архиве, для извлечения их из архива и производить другие типы манипуляций с архивами. Начальный аргумент tar, называемый операцией, задает действие, которое нужно выполнить. Другие аргументы tar - или опции, которые влияют на способ выполнения операции, или имена файлов, которые задают файлы, с которыми tar будет работать.

GNU возвращает только некоторые выходные состояния. Если вы используете опцию '--compare' ('-d'), то ноль значит, что все прошло нормально, за исключением, может быть, незначительной мелочи. Не ноль значит, что что-то было неверно. Обычно не ноль - почти всегда 2, за исключением некоторых операций, где он может быть 128.

3.2 Стили написания опций

Мнемонический стиль

Каждая опция имеет хотя бы одно мнемоническое имя, начинающееся с двух тире подряд, например '--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

Cмешанные стили опций

В одной команде 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'. Последний пример содержит только буквы опций старого стиля и не содержит значение аргумента.

3.3 Все доступные опции *

Опции изменяют способ выполнения tar операций.

'--absolute-names'

'--after-date=дата'

Ограничивает оперирование с файлами заданной датой.

'--block-size=номер'

Задает блочный фактор архива.

'--compress'

Задает уплотненый архив.

'--confirmation'

Запрашивает подтверждение для каждого файла.

'--derefence'

Рассматривает символьный указатель как альтернативное имя для файла к точкам указателя.

'--directory=каталог'

Изменяет рабочий каталог.

'--exclude=шаблон'

Исключает файлы, соответствующие выпажению, записанному в шаблоне.

'--exclude-from=файл'

Исключает файлы, соответствующие какому-нибудь из выражений, записанных в фале 'file'.

'--file=имя_архива'

Называет архив.

'--files-from='file'

Читает аргументы имени файла из файла системы файлов.

'--ignore-umask'

Устанавливает режимы извлечения файлов к их записям в архиве.

'--ignore-zeros'

Игнорирует введение данных конца архива.

'--tape-length=n (-L)'

этой длины и выдает приглашение новой ленте, автоматически включает multi-volume.

'--info-script=файл_программы'

Создает многотомный архив с помощью сценария.

'--interactive'

Запрашивает подтверждение перед выполнением любой операции с файлом или членом архива.

'--keep-old-files'

Предотвращает перезаписывание во время извлечения.

'--label=метка_архива'

Включает метку архива в созданный архив.

'--modification-time'

Устанавливает время модификации извлеченных файлов.

'--multi-volume'

Задает многотомный архив.

'--newer=дата'

Ограничивает операции изменения файлов указанной датой.

'--newer-mtime=дата'

Ограничивает операцию модификации файлов указанной датой. Exclusion

'--old'

Создает архив старого формата.

'--old-archive'

Создает архив старого формата.

'--one-file-system'

Предохраняет tar от пересечения границы системы файлов при архивировании.

'--portability'

Создает архив старого формата.

'--preserve-order'

Помогает составлять большие списки имен файлов на машинах с малым количеством памяти.

'--preserve-permission'

Устанавливает режимы извлечения файлов к их записям в архиве.

'--read-full-blocks'

Читает архив с размером блока меньше заданного или содержащий неполные блоки.

'--record-number'

Выдает номер записи при генерации сообщения.

'--same-order'

Помогает составлять большие списки имен файлов на машинах с малым количеством памяти.

'--sparse'

Устанавливает режимы извлечения файлов к файлам, записанным в архиве.

'--starting-file= имя_файла'

Начинает чтение в середине архива.

'--to-stdout'

Записывает файлы на стандартный вывод.

'--uncompress'

Задает уплотненный архив.

"-V метка_архива' Включает метку архива в созданный архив.

'--verbose'

Выводит имена файлов или членов архива, которыми нужно оперировать.

'--verify'

Делает проверку на несоответствия в архиве сразу после того, как он был записан.

'-B'

Читает архив с размером блока меньше заданного или содержащий неполные блоки.

'-K имя_файла'

Начинает чтение в середине архива.

'-M'

Задает многотомный архив.

'-N дата'

Ограничивает операции изменения файлов указанной датой.

'-O'

Записывает файлы на стандартный вывод.

"-R' Выдает номер записи при генерации сообщения.

'-S'

Разреженно архивирует разреженные файлы.

'-T файл'

Читает аргументы имени файла из файла системы файлов.

'-W'

Делает проверку на несоответствия в архиве сразу после того, как он был записан.

'-Z'

Задает уплотненный архив.

'-b число'

Задает блочный фактор архива.

'-f имя_архива'

Имя архива.

'-h'

Рассматривает символьный указатель как альтернативное имя для файла к точкам указателя.

'-i'

Игнорирует введение данных конца архива.

'-k'

Предотвращает перезаписывание во время извлечения.

'-l'

Предохраняет tar от пересечения границы системы файлов при архивировании.

'-m'

Устанавливает время модификации извлеченных файлов.

'-o'

Создает архив старого формата.

'-p'

Устанавливает режимы извлечения файлов к файлам, записанным в архиве.

'-s'

Помогает составлять большие списки имен файлов на машинах с малым количеством памяти.

'-v'

Выводит имена файлов или членов архива, с которыми нужно оперировать.

'-w'

'-z'

Задает уплотненный архив.

'-z -z'

Создает целый блочный уплотненный архив. двух букв.

'-C 'directory''

Изменяет рабочий каталог.

'-F программный_файл'

Создает многотомный архив с помощью сценария.

'-X 'file''

Выключает файлы, соответствующие какому-нибудь из регулярных выражений, записанных в фале 'file'.

Выбор устройства и переключение *

-f [имя_машины:]файл

--file=[имя_машины:]файл

Используйте архивный файл или устройство на имени названной машине.

--force-local

Архивный файл локален, даже если он содержит двоеточие.

--rsh-command=команда

Используйте отдаленную команду вместо rsh.

-[0-7][imh]

Задает устройство и плотность.

-M

--multi-volume

Создает многотомный архив (или дает список его содержимого).

-L число

--tape-length=число

Меняет ленту после задания число*1024 байта.

-F файл

--info-script=файл

--new-volume-script=файл

Выполняет 'file' в конце каждой ленты. Предполагает '--multi-volume' ('-M').

Разбивка устройства на блоки *

-b блок

--block-size=блок

Устанавливает размер блока=блок*1024 байта.

--block-compress

Блокирует сброс на ленту.

-i

--ignore-zeros

Игнорирует блоки нулей в архиве (имеется в виду EOF).

-B

--read-full-blocks

Переблокирует по мере чтения (для чтения каналов 4.2BSD).

Cтарая классификация опций *

Опции можно сгруппировать в три категории:

Общие опции

Опции, которые всегда имеют значение.

Опции создания

Опции для создания или модификации архива.

Опции выведения

Опции для составления списеа или извлечения файлов.

Опции, которые всегда имеют значение:

'-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'

Вперед Назад Содержание