Создание и распаковка tar архивов в Linux
Создание и распаковка архивов¶
Рассмотрим общий синтаксис для создания и распаковки архивов.
Создать¶
Создание выполняется с ключом c. Синтаксис следующий:
Пример создания:
- в данном примере будет создан архив archive.tar.gz домашней директории пользователя (/home/dmosk) ** где
- z — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол);
- c — ключ на создание архива;
- v — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить);
- f — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами).
Распаковать¶
Распаковка выполняется с ключом x с синтаксисом:
Пример распаковки:
Форматы¶
Утилита tar
позволяет работать с архивами различных форматов. Рассмотрим их кратко.
gz¶
Сжатие:¶
Распаковка .gz файла:
- при возникновении ошибки This does not look like a tar archive, можно воспользоваться командой gzip -d archive.tar.gz.
bz2¶
- ключ j отвечает за работу с bz2.
Если система ругается на bzip2, значит нужно его установить:
- соответственно, для CentOS (RPM based), Ubuntu (deb based), FreeBSD (BSD based).
Если видим ошибку tar: Unrecognized archive format, воспользуемся следующей командой:
gzip¶
- ключ z отвечает за работу с gzip.
tgz¶
TGZ — tar-архив, сжатый с помощью утилиты gzip. По сути, это тот же tar.gz, и работа с ним ведется такими же командами.
Рассмотрим примеры работы с данным форматом.
Для создания архива tgz выполняем:
Распаковывается, как gzip:
xz¶
Это формат сжатия данных с помощью алгоритма LZMA. Для работы с ним устанавливаем:
- на Debian / Ubuntu.
- на Rocky Linux / CentOS.
Теперь можно пользоваться.
Создать архив:¶
Распаковка:¶
Описание ключей 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
.
Примеры¶
Просмотр содержимого архивов .tar, .tar.gz и .tar.bz2¶
Для просмотра содержимого архива (в нашем случае его имя - archive) , выполните команду:
если он содержит большое количество файлов, то вполне разумно употребить команду less
, которая позволит выполнить постраничный вывод информации на экран:
Вы также можете использовать утилиту grep вместо less - это позволит вам отыскать тот или иной файл в архиве. Допустим:
Создать архив из папки¶
Предположим, что необходимо создать tar архив из папки и использовать при этом сжатие. Чтобы создать архив tar
с gzip
сжатием, нужно выполнить команду:
/home/folder/
будет создан архив по адресу /root/files.tar.gz
. Если указать относительный путь, то файл создастся в той папке, где открыт терминал. В конце команды передаётся директория, которую надо архивировать. В примере стоит абсолютный путь к этой папке. В таком случае в архиве tar будет находится все родительские папки т.е. при открытии архива там будет папка
/home/
и внутри неё папка/folder/
. Но если абсолютный путь заменить относительным, то будет только/folder/
. В названии файла"files.tar.gz"
можно указать любое расширение. Но для сжатых тарболлов лучше писать именно так. То есть сначала указывать то что это "tar", а потом писать"gz"
.
Разберём пример по частям. Команда tar в примере выше имеет три ключа:
- z - архивирует с gzip компрессией. Если нужно использовать bzip2, надо заменить ключ "z" на "j".
- c - без этого ключа архив не создастся.
- f - вывод информация в файл. Без этого ключа tar будет выдавать результат на stdout при упаковке и пытаться читать архив с stdin при распаковке.
Исключить папки и файлы при создании архива¶
Иногда нужно исключить некоторые подпапки при создании архива. К примеру, если надо создать архив из папки /home/, но в него не должны попасть содержания папок /cache/ и /trash/. Тогда необходимо использовать ключ exclude:
Символы звёздочек
в exclude
означают либой набор символов. То есть выполнять эту команду без звёздочек в начале путей, то необходимо прописывать полный путь к папке, которую надо исключить.
В конце значений explude
тоже стоят звёздочки
, чтобы удалялись не сами папки, а их содержимое (все дочерние файлы и папки).
При выполнении такой команды в архив не попадут файлы из папок:
Обратите внимание на то, что внутри фигурных скобок explude
нет пробелов
{'/cache/','/trash/'}. Если поставить пробел до/после запятой или до/после фигурной скобки,то исключение не сработает
.
Разархивировать¶
Чтобы распаковать содержимое tar архива в ту же папку, в которой он находится, перейдите в папку с ним и введите:
Ключ x
указывает на распаковку архива. Ключ f
обязателен, как и при создании архива.
Если требуется распаковать архив в определённую папку, то путь к ней можно указать после ключа C
:
Распаковать в определенную папку¶
- ключ -C используется для указания папки, куда необходимо распаковать файлы из архива.
Распаковка без вложенной папки¶
Такой способ можно использовать для распаковки в заранее подготовленный каталог. Будет некий эффект переименовывания каталога или аналог «Распаковать здесь»:
- каталог
/home/admin/mytar
заранее должен быть создан;--strip-components 1
пропустит одну вложенную папку внутри архива.
Указать конкретный файл или каталог для распаковки Если у нас большой архив, но извлечь нужно конкретный файл или каталог, то можно указать его через пробел после указания файла с архивом. Синтаксис:
Рассмотрим пример. Напомним, что можно посмотреть содержимое архива с помощью опции t:
Теперь можно распаковать архив:
- предположим, что внутри архива samba.tar.gz есть что-то и каталог mail. Извлечем мы только последний.
Исключение файлов по маске¶
Если необходимо пропустить некоторые файлы, вводим команду с ключом --exclude:
- в данном примере мы создадим архив archive.tar.gz, в котором не будет файлов, начинающихся на sess_.
Также можно исключить несколько файлов или папок, добавляя несколько опций exclude
:
- в данном примере мы исключим папку recycle и файлы, которые заканчиваются на .tmp
Работа с архивами, разбитыми на части¶
Разбить архив на части может понадобиться по разным причинам — нехватка места на носителе, необходимость отправки файлов по почте и так далее.
Чтобы создать архив, разбитый на части, вводим команду:
- данная команда создаст архив каталога /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
Чтобы собрать архив и восстановить его, вводим команду:
Создание tar из отдельных файлов с последующим его архивированием Мы можем собрать файл tar, добавляя по очереди в него файлы, после чего создать сжатый архив. Предположим, у нас 3 файла: file1, file2, file3.
Сначала создадим tar-файл с первым файлом внутри:
Следующими двумя командами мы добавим в архив файлы file2 и file3:
Сожмем содержимое tar-файла:
Файл tar можно удалить:
ZIP¶
Tar не работает с zip-архивами. В системах UNIX для этого используем утилиты zip и unzip. Для начала, ставим нужные пакеты:
- соответственно, для RPM based, deb based, BSD based.
Создание ZIP:¶
- создает архив каталога /home/dmosk в файл archive.zip.