1️⃣ **Распаковка tar** Для распаковки архива в формате **.tar** в текущую директорию выполните команду: `tar xvf archive.tar 2️⃣ **Распаковка tar.bz2, tar.bzip2, tbz2, tb2, tbz** `tar xvjf archive.tar.bz2 3️⃣ **Распаковка tar.xz, txz** `tar xvJf archive.tar.xz 4️⃣ **Распаковка tar.gz, tgz** `tar xvzf archive.tar.gz 5️⃣ **Распаковка tar.lzma** `tar --lzma -xvf archive.tar.lzma 🤔 **Пояснение опций** x — распаковать архив. v — Verbose-режим (вывод на экран дополнительной информации во время распаковки). f — выполнить распаковку архива из файла. j — вызвать bzip2 для распаковки архива. z — вызвать gzip J — вызвать xz Чтобы распаковать архив в определенную директорию используется опция -C или --directory, например: `tar xvf archive.tar -C /to/directory =====================================  ![Обновлено](https://www.dmosk.ru/img/public/time.jpg "Дата обновления") Обновлено: 24.07.2024  ![Опубликовано](https://www.dmosk.ru/img/public/time.jpg "Дата публикации") Опубликовано: 18.11.2016 ### Создать Создание выполняется с ключом **c**. Синтаксис следующий: tar -c<опции> <новый архивный файл> <что сжимаем> Пример создания: tar -czvf archive.tar.gz /home/dmosk _* в данном примере будет создан архив **archive.tar.gz** домашней директории пользователя (**/home/dmosk**) ** где **z** — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); **c** — ключ на создание архива; **v** — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); **f** — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами)._ ### Распаковать Распаковка выполняется с ключом **x** с синтаксисом: tar -x<опции> <архивный файл>  Пример распаковки: tar -xvf archive.tar.gz  ## Форматы Утилита tar позволяет работать с архивами различных форматов. Рассмотрим их кратко. ### gz Сжатие: tar -cf archive.tar.gz /files Распаковка .gz файла: tar -xf 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, значит нужно его установить: apt-get install bzip2 Если видим ошибку **tar: Unrecognized archive format**, воспользуемся следующей командой: bzip2 -d archive.tar.bz2 ### gzip tar -xvzf archive.tar.gzip _* ключ z отвечает за работу с gzip._ ### tgz TGZ — tar-архив, сжатый с помощью утилиты gzip. По сути, это тот же tar.gz, и работа с ним ведется такими же командами. Рассмотрим примеры работы с данным форматом. Для создания архива tgz выполняем: tar -czf archive.tgz /files Распаковывается, как gzip: tar -xzf archive.tgz ### xz Это формат сжатия данных с помощью алгоритма LZMA. Для работы с ним устанавливаем: apt install xz-utils _* на Debian / Ubuntu._  yum install xz _* на Rocky Linux / CentOS._ Теперь можно пользоваться. Создать архив: tar -cpJf archive.tar.xz /home/user Распаковка: tar -xpJf archive.tar.xz ## Описание ключей 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 -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** пропустит одну вложенную папку внутри архива._ ### Указать конкретный файл или каталог для распаковки Если у нас большой архив, но извлечь нужно конкретный файл или каталог, то можно указать его через пробел после указания файла с архивом. Синтаксис: tar zxf <путь до архива> <что извлечь> Рассмотрим пример. Напомним, что можно посмотреть содержимое архива с помощью опции t: tar tf /backup/samba.tar.gz Теперь можно распаковать архив: tar -zxf /backup/samba.tar.gz mail _* предположим, что внутри архива **samba.tar.gz** есть что-то и каталог **mail**. Извлечем мы только последний._ ### Исключение файлов по маске Если необходимо пропустить некоторые файлы, вводим команду с ключом --exclude: tar --exclude='sess_*' -czvf archive.tar.gz /wwwsite _* в данном примере мы создадим архив **archive.tar.gz**, в котором не будет файлов, начинающихся на **sess_**._ Также можно исключить несколько файлов или папок, добавляя несколько опций exclude: tar --exclude='/data/recycle' --exclude='*.tmp' -zcf /backup/samba/2021-08-29.tar.gz /data/ _* в данном примере мы исключим папку **recycle** и файлы, которые заканчиваются на **.tmp**_ ### Работа с архивами, разбитыми на части Разбить архив на части может понадобиться по разным причинам — нехватка места на носителе, необходимость отправки файлов по почте и так далее. Чтобы создать архив, разбитый на части, вводим команду: tar -zcvf - /root | split -b 100M - root_home.tar.gz _* данная команда создаст архив каталога **/root** и разобьет его на части по **100 Мб**._ > Если у нас уже есть архив, который нужно разбить, команда будет такой: > > split -b 100M root_home.tar.gz root_home.tar.gz > > _* в данном примере архив **root_home.tar.gz** будет разбит на части, состояние из файлов по 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 > Если мы хотим только собрать разбитый архив, вводим: > > cat root_home.tar.gz* > root_home.tar.gz ### Создание tar из отдельных файлов с последующим его архивированием Мы можем собрать файл tar, добавляя по очереди в него файлы, после чего создать сжатый архив. Предположим, у нас 3 файла: file1, file2, file3. Сначала создадим tar-файл с первым файлом внутри: tar -cf ./my_archive.tar ./file1 Следующими двумя командами мы добавим в архив файлы file2 и file3: tar -rf ./my_archive.tar ./file2 tar -rf ./my_archive.tar ./file3 Сожмем содержимое tar-файла: gzip < ./my_archive.tar > ./my_archive.tar.gz Файл tar можно удалить: rm -f my_archive.tar ### Рекурсивная распаковка Предположим, что у нас есть архив, в котором есть еще архив. И еще и еще много раз. Чтобы не заниматься ручной распаковкой, можно использовать команду с while: while [ -f *.tar.gz ]; do filename="$(ls -1 *.tar.gz | head -n 1)"; tar -xvf $filename && rm $filename; done; Обратите внимание, что данная команда удалит исходный файл архива, а также будет искать архив по маске, поэтому в каталог, где выполняем команду не стоит копировать другие архивы. ## 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/dmosk _* создает архив каталога **/home/dmosk** в файл **archive.zip**._ Распаковка ZIP: unzip archive.zip