Использование tar в UNIX-системах

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: Linux, FreeBSD.

Утилита командной строки tar используется для работы с архивами в операционных системах на базе UNIX. С ее помощью можно архивировать данные и оптимизировать использование дискового пространства.

Создание и распаковка архивов

Создать

Создание выполняется с ключом c. Синтаксис следующий:

tar -c<опции> <новый архивный файл> <что сжимаем>

Пример создания:

tar -czvf archive.tar.gz /home/admins24

* в данном примере будет создан архив archive.tar.gz домашней директории пользователя (/home/admins24)
** где z — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); c — ключ на создание архива; v — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); f — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами).

Распаковать

Распаковка выполняется с ключом x с синтаксисом:

tar -x<опции> <архивный файл> 

Пример распаковки:

tar -xvf archive.tar.gz 

Примеры

gz

Распаковка .gz файла:

tar -xvf archive.tar.gz 

* при возникновении ошибки This does not look like a tar archive, можно воспользоваться командой gzip -d archive.tar.gz.

bz2

tar -xvjf archive.tar.bz2

* ключ j отвечает за работу с bz2.

Если система ругается на bzip2, значит нужно его установить:

yum install bzip2

apt-get install bzip2

pkg install bzip2

* соответственно, для CentOS (RPM based), Ubuntu (deb based), FreeBSD (BSD based).

Если видим ошибку tar: Unrecognized archive format, воспользуемся следующей командой:

bzip2 -d archive.tar.bz2

gzip

tar -xvzf archive.tar.gzip

* ключ z отвечает за работу с gzip.

tgz

Распаковывается, как gzip:

tar -xvzf archive.tgz

Распаковать в определенную папку

tar -C /home/user -xvf archive.tar.gz

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

Распаковка без вложенной папки

Такой способ можно использовать для распаковки в заранее подготовленный каталог. Будет некий эффект переименовывания каталога или аналог «Распаковать здесь»:

tar -C /home/admin/mytar -xvf admin.tar.gz —strip-components 1

* каталог /home/admin/mytar заранее должен быть создан; —strip-components 1 пропустит одну вложенную папку внутри архива.

Исключение файлов по маске

Если необходимо пропустить некоторые файлы, вводим команду с ключом —exclude:

tar -czvf archive.tar.gz /wwwsite —exclude=’sess_*’

* в данном примере мы создадим архив archive.tar.gz, в котором не будет файлов, начинающихся на sess_.

Работа с архивами, разбитыми на части

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

Чтобы создать архив, разбитый на части, вводим команду:

tar -zcvf — /root | split -b 100M — root_home.tar.gz

* данная команда создаст архив каталога /root и разобьет его на части по 100 Мб.

В итоге мы получим, примерно, такую картину:

root_home.tar.gzaa  root_home.tar.gzac  root_home.tar.gzae
root_home.tar.gzag  root_home.tar.gzai  root_home.tar.gzab
root_home.tar.gzad  root_home.tar.gzaf  root_home.tar.gzah

Чтобы собрать архив и восстановить его, вводим команду:

cat root_home.tar.gz* | tar -zxv

Описание ключей tar

Команды для действия

КлючОписание
-AДобавление файлов в архив.
-cСоздание нового архивного файла.
-dПоказать отличающиеся данные между каталогом-исходником и содержимым архива.
—deleteУдалить файлы внутри архива.
-rДобавить файлы в конец архива.
-tПоказать содержимое архива.
-uДобавить файлы, которых нет в архиве.
-xИзвлечь файлы из архива.

* нельзя использовать несколько вышеперечисленных ключей в одной команде.

Дополнительные опции

КлючОписание
—atime-preserveОставить прежнюю метку времени доступа для файла.
-b NЗадать размер блока N x 512.
-CСмена каталога. По умолчанию, используется тот, в котором мы находимся.
—checkpointПоказать имена папок при чтении архивного файла.
-GИспользование старого формата инкрементального резервирования при отображении или извлечения.
-gИспользование нового формата инкрементального резервирования при отображении или извлечения.
-hНе дублировать символьные ссылки. Только файлы, на которые указывают эти симлинки.
-iИгнорировать блоки нулей.
-jИспользование bzip2.
—ignore-failed-readИгнорировать не читаемые файлы.
-kПри распаковке, существующие файлы не заменяются соответствующими файлами из архива.
-L NСмена магнитной ленты после N*1024 байт.
-mПри извлечении игнорировать время модификации объекта.
-MМноготомные архивы.
-N DATEСохранять только более новые файлы относительно DATE
-OНаправление извлекаемого на стандартный вывод.
-pИзвлечение защищенной информации.
-PНе отбрасывает начальный слэш (/) из имен.
-sСортировка файлов при извлечении.
—preserveАналогично -ps
—remove-filesУдалить исходные файлы после добавления в архив.
—same-ownerСохранить владельца при извлечении.
—totalsВывод байт при создании архива.
-vПротоколирование действий — отображение списка объектов, над которыми происходит действие.
-V NAMEСоздание архива на томе с меткой NAME.
—versionПоказать версию tar.
-wТребовать подтверждения для каждого действия.
-WПроверка архива после записи.
—exclude FILEИсключить файл FILE.
-X FILEИсключить файлы FILE.
-ZФильтрует архив с помощью compress.
-zИспользование gzip.

* актуальный список опций можно получить командой man tar.

ZIP

Tar не работает с zip-архивами. В системах UNIX для этого используем утилиты zip и unzip. Для начала, ставим нужные пакеты:

yum install zip unzip

apt-get install zip unzip

pkg install zip unzip

* соответственно, для RPM based, deb based, BSD based.

Создание ZIP:

zip -r archive.zip /home/admins24

* создает архив каталога /home/admins24 в файл archive.zip.

Распаковка ZIP:

unzip archive.zip

Windows

В системе на базе Windows встроенными средствами можно распаковать только ZIP-архивы. Для работы с разными архивами рекомендуется поставить архиватор, например 7-Zip.