tar -работа и манипуляция ленточными архивами

НАЗВАНИЕ

tar -работа и манипуляция ленточными архивами

СИНТАКИС

tar [bundled-flags <args>] [<file> | <pattern> …]

tar {-c} [options] [files | directories]

tar {-r | -u} -f archive-file [options] [files | directories]

tar {-t | -x} [options] [patterns]

ОПИСАНИЕ

tar создает и манипулирует потоковыми архивными файлами. Первая форма комманд содержит опцию «bundled». Такое использование делается в целях совместимости по историческим соображениям. За подробной информацией обращайтесь к разделу COMPATIBILITY. Остальные формы команд показывают предпочтительное использвание. Первая опция tar это индикатор состояния из следующего списка:

-c

Создает новый архив содержащий указанные файлы.

-r

Похож на -c, только новые строки добавляются к архиву. Учтите, что опция работает только с некомпрессироваными архивами содержащихся в регулярных файлах.

Требует опции -f.

-t

Выводит содержимое архива на стандартный вывод.

-u

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

-x

Распаковывает на диск из архива. Если файл с тем же именем содержится более одного раза в архиве, каждая копия будет распакована, причем более поздняя копия заместит собой более ранние.

В -c, -r, или -u режимах, каждай указанный файл или директория добавляется к архиву в порядке указания в командной строке. По умолчанию, содержимое каждой директории так же архивируется.

В режиме распаковки или списка, вся командная строка читается и парсируется прежде,чем архив будет открыт. Имена путей или шаблонов в командной строке показывают,какие файлы в архиве должны быть обработаны. Стиль шаблонов схож со стилем шаблонов shell’а как описано в документе на tcsh(1).

ОПЦИИ

Если не указано иначе, опции применяются во всех режимах.

@archive

(только c и r режим) Указаный архив открывается и записи в нем будут применены к текущему архиву.

Простой пример,

tar -c -f — newfile @original.tar

записывает новый архив на стандартный вывод содержащий файл newfile и все записи из original.tar. Для контраста,

tar -c -f — newfile original.tar

создает новый архив только с двумя записями. Подобно,tar -czf — —format pax @- читает архив из стандартного ввода (чей формат определяется автоматически) и конвертирует его в компрессированый архив gzip pax формата на стандартный вывод. Таким образом tar может быть использован для конвертирования архивов из одного формата в другой.

-b blocksize

Указывает размер блока, в 512 байтовых записях, для ленточного накопителя. Как правило, данный аргумент необходим только тогда, когда происходит чтение или записть на ленточный накопитель, и обычно не нужен даже тогда когда размер блока по умолчанию 20 записей(10240 байт) что очень распространено.

-C directory

В режиме c и r, данная опция меняет директорию прежде чем добавит следующие файлы. В режиме x директория меняется после открытия архива, но прежде распаковки содержимого из архива.

—check-links (-W check-links)(

только c и r режимы). Выводит предупреждающее сообщение до тех пор, пока все ссылки на каждый файл не будут заархивированы.

—exclude pattern

(-W exclude=pattern)

Не обрабатывать файлы или директории, которые совпадают с указанным шаблоном. Учтите, что исключения имеют приоритет над шаблонами или именами файлов, указанных в командной строке.

—format format

(-W format=format)

(только режим c) Использует указанный формат для создания архива. Поддерживает все типы форматов включая «cpio», «pax», «shar», и «ustar». Другие форматы могут так же поддерживаться; смотрите libarchive-formats(5) для получения детальной информации о неподдерживаемых, в настоящее время, форматах.

-f file

Читать архив или записать архив в указанный файл. Именем файла может являтся — для стандартного вывода или ввода. Если опция не определена, по умолчанию будет использован ленточный накопитель. (Во FreeBSD, ленточный накопитель по умолчанию это /dev/sa0)

—fast-read

(-W fast-read)(только режимы x и t) Распаковывает или показывает только первое содержимое архива, которое совпадает с шаблоном или именем файла. Выходит сразу после того как совпал каждый указанный шаблон или имя файла. По умолчанию архив всегда

читается до конца, с этого момента могут попадаться множественные записи с одинаковыми именами и, по соглашению, поздние записи перезапишут более ранние. Эта опция предоставляет оптимизацию произовдительности.

-H

(только режим c и r) Следует по символическим ссылкам в командной строке;

цель на которую указывает ссылка будет зархивирована, а не сама ссылка.

-h

(только режим c и r) Синоним для -L

-I

Синоним для -T.

—include pattern

(-W include=pattern)

Обрабатывать только файлы или директории которые совпадают с указанным шаблоном. Учтите, что все исключения указанные в опции —exclude, имеют преймущество над включениями. Если включения не указаны, все строки обрабатываются по умолчанию. Опция —include особенно полезна, при фильтрации архивов.

Например, команда

tar -c -f new.tar —include=’*foo*’ @old.tgz

создает новый архив new.tar, содержащий только строки из old.tgz содержащий строку `foo’.

-j

(только режим c) Сжимает получившийся архив при помощи bzip2(1). В режиме извлечения или списка, эта опция игнорируется. Учтите следующее, в отличии от

других tar утилит, эта распознает компрессию bzip2 автоматически, когда читает архивы.

-k

(только режим x) Не перезаписывать существующие файлы. В частности, если файл появляется чаще чем один раз в архиве, поздние копии будут перезаписаны более ранними копиями.

-L

(только режим c и r) Следовать всем символическим ссылкам. Обычно, сами

ссылки архивируются. С этой опцией, вместо этого, будет зархивирована цель ссылки.

-l

Если указана опция окружения POSIXLY_CORRECT, это синоним для опции —check-links. Иначе, будет выведена ошибка. Пользователи, которые желают совместимости с GNU tar должны использовать вместо этого опцию —one-file-system.

-m

(только режим x) Не извлекать время модификации. По умолчанию, время модификации установлено во время, когда сохранялся архив.

-n

(только режим c,r и u) Не архивировать содержимое директорий рекурсивно.

—newer date

(-W newer=date) (только режим c,r и u) Только включая файлы и директории более новые чем указанная дата. Эта опция сравнивает записи ctimes.

—newer-mtime date

(-W newer-mtime=date)

(только режим c,r и u) Так же как —newer, за исключением того что опция

сравнивает записи mtime вместо записей ctime.

—newer-than file

(-W newer-than=file)

(только режим c,r и u) Только включает файлы и директории более новые, чем указанный файл. Сравниваются записи ctimes.

—newer-mtime-than file

(-W newer-mtime-than=file)

(только режим c,r и u) Так же как и —newer-than, за исключением того что сравниваются записи mtime вместо ctimes.

—nodump

(-W nodump)

(только режим c и r) Учитывает флаг файла nodump, пропуская этот файл.

—null

(-W null)

(использовать с -I, -T, или -X) Имена файлов или шаблоны разделяются null символами, а не символом новой строки. Это часто используется для чтения вывода имен файлов опцией -print0 для find.

-O

(только режимы x и t) В режиме распаковки (-x), файлы будут записаны на

стандартный вывод вместо записи на диск. В режиме списка (-t) список файлов будет

записан на stderr, вместо обычного стандартного вывода.

-o

(только режим x) Использовать пользователя и группу пользователей запускающих программу, вместо тех которые указаны в архиве. Это не существенно, до тех пор пока опция -p не определена, и программа не запущена пользователем root. В этом случае, режимы файлов из архива будут восстановлены, но ACL или информация о владельце восстановлена не будет.

—one-file-system

(-W one-file-system)

(только режим c,r и u) Не пересекать точки монтирования.

-P

Соблюдать имена пути. По умолчанию абсолютное имя пути (то которое начинается с символа /) имеет впереди слеш, который удаляется при создании архива или при распаковке. Так же tar откажется распаковывать записи в архиве, чьи имена пути содержат .. или чьи целевые директории будут изменены символической ссылкой. Эта опция отменяет данное поведение.

-p

(только режим x) Соблюдать файловые разрешения. Попытки восстановить полные разрешения, включая владельца, режимы файлов, флаги файлов и ACL, если они доступны для каждой записи извлекаемой из архива. По умолчанию, только что созданные файлы, принадлежат пользователю запустившему tar, режимы файла восстанавливаются для только что созданых регулярных файлов, и все другие типы записей получают разрешения по умолчанию. Если tar запущен пользователем root, по умолчанию будет восстановлен владелец, если опция -o не определена.

—strip-components count

(-W strip-components=count)

(только режимы x и t) Удаляет указанные номера из элементов пути. Имена пути с меньшим количеством элементов будут пропущены. Учтите, что имена пути редактируются после проверки включений/исключений шаблонов, но до проверок безопасности.

-T filename

В режиме x или t, tar будет читать список имен которые должны быть распакованы из filename. В режиме c, tar будет читать имена которые заарихиврованы из filename. Специальное имя «-C» в строке вызовет изменение директории указанной следующей строкой. Имена заканчиваются символом новой строки, если не указана опция —null. Опция —null так же выключит спецальную обработку строк содержащих «-C».

-U

(только режим x) Разлинковать файлы перед их созданием. Без этой опции, tar перезапишет существующие файлы без сохранения существующий жестких ссылок. С этой опцией существующие жесткие ссылки будут сломаны, так же как и любые символические ссылки могут изменить местонахождение распаковываемых файлов.

-v

Подробный вывод. В режимах создания и распаковки, tar покажет каждое имя файла который читается или записывается в архив. В режиме списка, tar произведет вывод соответствующий команде ls(1). Дополнительные опции -v предоставят дополнительный вывод.

-W longopt=value

Длиная опция (предваряемая —) напрямую поддерживается только в системах которые имеют  функцию getopt_long(3). Опция -W может использоваться для доступа к длиным операциям в системах, которые не поддерживают эту функцию.

-w

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

-X filename

Читает список исключаемых шаблонов, из указанного файла. смотрите опцию —exclude для более детальной информации об обработке исключений.

-y

(только режим c) Сжимает получившийся архив с помощью bzip2(1). Режиме распаковки или списка, эта опция игнорируется. учтите следующее, в отличие от других реализаций tar, эта утилита распознает компрессию bzip2 автоматически, когда читает архив.

-z

(только режим c) Сжимает получившийся архив с помощью gzip2(1). Режиме распаковки или списка, эта опция игнорируется. учтите следующее, в отличие от других реализаций tar, эта утилита распознает компрессию gzip2 автоматически, когда читает архив.

ОКРУЖЕНИЕ

Следующие переменные изменят запуск tar:

LANG Используемая локаль. Смотрите environ(7) для более детальной информации.

POSIXLY_CORRECT

Если эта переменная окружения определена, опция -l интерпретируется в соответствии с ISO/IEC 9945-1:1996 («POSIX.1»).

TAPE

ленточный накопитель по умолчанию. опция -f отменяет эту переменную.

TZ

Временая зона используемая при отображении дат. Смотрите environ(7) для

дополнительной информации.

ФАЙЛЫ

/dev/sa0 ленточный накопитель по умолчанию. если не отменено окружение TAPE опцией

-f.

СТАТУС ВЫХОДА

утилита tar завершается с 0 при успешном выходе, и >0 если возникли ошибки.

ПРИМЕРЫ

Следующий пример создает новый архив, назваемый file.tar.gz, который содержит

2 файла source.c и source.h:

tar -czf file.tar.gz source.c source.h

Для просмотра подробной таблицы содержимого этого архива:

tar -tvf file.tar.gz

Для извлечения всех записей из архива на ленточный накопитель установленный по умолчанию:

tar -x

Для перемещения файловых иерархий, вызовите tar так

tar -cf — -C srcdir . | tar -xpf — -C destdir

либо более традиционно

cd srcdir ; tar -cf — . | (cd destdir ; tar -xpf -)

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

tar -c -f new.tar foo1 [color=brown]@old.tgz[/color] -C/tmp foo2

создаст новый архив new.tar. tar прочитает файл foo1 из текущей директории и добавит его к выходному архиву. затем он прочтет каждую запись из файла old.tgz и добавит эти записи в выходной архив. Наконец, он сменит директорию /tmp и добавит foo2 к выходному архиву.

опции —newer и —newer-mtime поддерживают разнообразные спецификации времени и даты, включая «12 Mar 2005 7:14:29pm», «2005-03-12 19:14», «5 minutes ago», and «19:14 PST May 1».

СОВМЕСТИМОСТЬ

Формат связанных аргументов поддерживается для совместимости с историческими реализациями. Он содержит инициируемое слово (без символа — в начале) в котором каждый символ указывает на опцию. Аргументы следуют как раздельные слова. Порядок документов должен совпадать с порядком следования символов в связаном слове. Например,

tar tbf 32 file.tar

определяет флаги t, b, and f. Флаги b и f — оба требуют аргументов, поэтому должны быть 2 дополнительных аргумента в командной строке. Аргумент 32[color] аргумент

флага [color=brown]b, и file.tar аргумент флага f. Опции режима c, r, t, u, и x, и опции

b, f, l, m, o, v, и w выполняют с SUSv2.

Для максимальной переносимости, скрипты которые вызывают tar должны использовать связные аргументы описаные выше, должны ограничить себя режимами c, t, и x и опциями b, f, m, v, и w.

В системах, которые поддерживают getopt_long(), дополнительные длиные опции

могут увеличить совместимость с другими реализациями tar.

БЕЗОПАСНОСТЬ

Определенные проблемы безопасности рапространены во многих архиваторах, включая tar. Частично, тщательно обработанные архивы могут попросить извлеч файлы в место отличное от целевой директории. Потенциально это может быть использовано для того что бы невольно заставить пользователя перезаписать файлы, которые он не хотел перезаписывать. Если архив извлекается суперпользователем, любой файл в системе может быть потенциально перезаписан. Это может случиться по трем причинам.

Хотя tar и имеет механизмы для защиты друг друга, здравомыслящие пользователи

должны знать о реализациях:

1.Записи в архивах имеют абсолютные имена пути. По умолчанию, tar удаляет

начальные / символы из имен файлов прежде чем восстановит их, для предотвращения

этой проблемы.

2. Записи в архивах могут иметь имена пути которые содержат .. . По умолчанию, tar

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

3. Записи в архивах могут могут использовать символические ссылки для восстановления файлов в других директориях. Архив может восстановить символическую ссылку в другую директорию, затем использовать эту ссылку для восстановления файла в эту директорию. Для защиты от этого, tar проверяет каждый распакованый путь на символические ссылки. Если последний элемент пути является символической ссылкой, он будет удален и замещен записью в архиве. Если указана опция -U, любая промежуточная символическая ссылка будет так же удалена. Если опции -U или -P не указаны, tar откажется распаковывать строку. Для защиты себя, вы должны опасаться любых архивов, которые поступают из недостоверных источников. Вы должны проверять содержимое архива

tar -tf filename

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

быть увереным что tar не перезапишет существующие файлы или опцию -U для удаления всех существующих файлов. Обычно вы не должны распаковывать архивы пока используете привелегии суперпользователя. Учтите, что опция -P отключает проверки безопасности tar’а и позволяет распаковать архивы с сохранением абсолютных имен пути, .. компонентами, или символическими ссылками на другие директории.

Смотрите так же

bzip2(1), cpio(1), gzip(1), mt(1), pax(1), shar(1), libarchive(3),

libarchive-formats(5), tar(5)

Стандарты

На данный момент нет стандарта POSIX для команды tar он появился в ISO/IEC 9945-1:1996 («POSIX.1») но был выброшен из IEEE Std 1003.1-2001 («POSIX.1»). Опции используемые данной реализацией были разработаны с учетом множества реализаций tar, так же как и с учетом старой спецификации POSIX и текущей спецификации  POSIX.

Ustar и pax файловые форматы обмена были определены IEEE Std

1003.1-2001 («POSIX.1») для команды pax.

История

команда tar появилась в Седьмой Редакции Unix. Были некоторые другие реализации, многие из них расширяли формат файла. Реализация John Gilmore’а pdtar находящаяся в общем владении, в некотором роде повлияла и сформировала основы GNU tar. GNU tar был включен как часть стандартной системы tar в FreeBSD начиная с FreeBSD 1.0.Это полная новая реализация основанная на библиотеке libarchive(3).

Ошибки

POSIX и GNU жестко расходятся в том, какое значение несет опция -l. Из-за потенциальной угрозы, когда кто-то ожидает одного поведения а получает другое, опция -l преднамеренно отсутствует в данной реализации.

Опция -C dir может отличатся от исторической реализации.

Весь вывод архива написан в блоках корректного размера, даже если вывод был сжат. Дополняет ли последний блок полный размер блока, зависит от формата выходного устройства. Для tar и cpio, последний выходной блок добавляется к полному размеру блока, если вывод был произведен на стандартный вывод или в символьное или блочное устройство, такое как ленточный накопитель. Если вывод был записан в файл, последний блок не добавляется. Многие утилиты сжатия, включая gzip(1) и bzip2(1) жалуются об отсутствии нулевого добавления в момент декомпрессии архива созданного tar’ом,

но они распакуют его правильно. Сжатие и декомпрессия реализовано внутри, поэтому много существенных отличий между сжатым выводом созданным

tar -czf — file

и созданым

tar -cf — file | gzip

По умолчанию нужно читать и записывать архивы на стандартный ввод/вывод, но традиция (и POSIX) утверждают другое.

Режимы r и u требуют что бы архив был несжатым и находился в файле на диске. Другие архивы могут быть модифицированы используя режим c, с расширением @archive-file.

Для архивации файла называемого @foo или -foo вы должны указать их как ./@foo или ./-foo, соответственно.

В режиме создания первые ./ всегда удаляются. Первый / удаляется, пока не будет

указана опция -P.

Нужна более лучшая поддержка для выбора файлов при создании и распаковки.

Нет поддержки многотомных архивов или архивирования редких файлов.

Конвертирование между различными архивными форматами (таких как tar или cpio) используя опцию  @- может вызвать потерю информации (последствие несовместимых путей благодаря которым различные форматы архивов хранят информацию о жестких ссылках.

Есть альтернативные длиные опции, для многих коротких опций которые преднамеренно не задокументированы.