Переход к предыдущей публикации Оптимизация блога Ищем “битые” ссылки Переход к следущей публикации

Русский перевод man tar

Понедельник, 21 января, 2008 13:47:04 EET

Исправления от 16 марта, 2009 07:29:52

man tar Есть в FreeBSD такой очень удобный и хороший архиватор - tar. Удобный, простой и быстрый. Пожалуй, самый знаменитый *nix архиватор. Понадобилось мне тут, в целях бекапа, запаковать каталог со вложенными файлами, и подпапками. Но по пути следования архиватора было пара подкаталогов, которые архивировать не следовало. Начал вспоминать опции команды tar, которые позволили бы исключить из процесса архивации определенные файлы. Сел читать мануал ($ man tar). Затянулось чтение… А потом я вспомнил, что у Лиссяры на сайте есть уже этот самый ман на русском языке. Посмотрел - точно есть. Решил закинуть этот перевод и себе в блог. Пригодится еще. ;)

* * *

man tar

Автор перевода: Andy.

Источник: www.lissyara.su

Имя

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 и имеет механизмы для защиты друг друга, здравомыслящие пользователи

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

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

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

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

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

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

+o Записи в архивах могут могут использовать символические ссылки для восстановления файлов в других директориях. Архив может восстановить символическую ссылку в другую директорию, затем использовать эту ссылку для восстановления файла в эту директорию. Для защиты от этого, 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) используя опцию  @- может вызвать потерю информации (последствие несовместимых

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

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

Похожие публикации

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)