Создание и распаковка tar архивов в Linux
Tar — архивы один из наиболее распространённых способов хранения данных в Linux системах. Но tar не сжимает данные в архиве. Tar всего лишь упаковывает файлы. Для сжатия tar умеет работать с утилитами bzip2 или gzip.
Правильнее называть «tarball» (тарболл, «tar» мяч). По сути tar формат — это объединение нескольких файлов в один. Попробуйте объединить несколько текстовых файлов в один tarball и открыть его текстовым редактором. Вы увидите что это лишь большой текстовый файл, в котором перечислено содержимое входящих в него файлов с указанием их путей текстом.
Создать архив из папки
Предположим, что необходимо создать tar архив из папки и использовать при этом сжатие. Чтобы создать архив tar с gzip сжатием, нужно выполнить команду:
tar -zcf /root/files.tar.gz /home/folder/
При выполнении этой команды из содержимого папки /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:
tar -zcf /root/files.tar.gz /home/ --exclude=
Символы звёздочек в exclude означают либой набор символов. То есть выполнять эту команду без звёздочек в начале путей, то необходимо прописывать полный путь к папке, которую надо исключить.
В конце значений explude тоже стоят звёздочки, чтобы удалялись не сами папки, а их содержимое (все дочерние файлы и папки).
При выполнении такой команды в архив не попадут файлы из папок:
/home/cache/ /home/folder/cache/ /home/folder/subfolder/cache/
Обратите внимание на то, что внутри фигурных скобок explude нет пробелов . Если поставить пробел до/после запятой или до/после фигурной скобки, то исключение не сработает.'*>
Разархивировать
Чтобы распаковать содержимое tar архива в ту же папку, в которой он находится, перейдите в папку с ним и введите:
tar -xf files.tar.gz
Ключ x указывает на распаковку архива. Ключ f обязателен, как и при создании архива.
Если требуется распаковать архив в определённую папку, то путь к ней можно указать после ключа C:
tar -xf files.tar.gz -C /home/folder/
Как запаковать tar архив только с содержимым папки с подпапками и файлами, без полного пути?
В данном примере я запаковываю все содержимое /var/www/html/site , но когда я выгружаю архив на другой компьютер, то при открытии архива я вижу следующие: папка var , затем папка www , потом html , затем уже основная папка site
Как создать архив только с папкой site ? Чтобы в архиве не было путей из папок
- Вопрос задан более года назад
- 1545 просмотров
1 комментарий
Простой 1 комментарий
Создание и распаковка архивов в Linux
В случае с Linux VPS на базе OpenVZ и KVM для работы с архивами достаточно базовых компонентов системы, а именно Tar, Gzip и Bzip2, которые при создании сжатого архива работают как единое целое, т.к. сам по себе архиватор Tar не предусматривает возможность сжатия данных. Для этой цели как раз и используется Gzip или Bzip2. Архивы, созданные с применением Gzip, обычно имеют расширение .tar.gz, а при использовании Bzip2 – .tar.bz2.
Создание tar-архива без сжатия
Для создания такого архива используется команда:
tar -cf filename.tar file1 file2 fileN
Параметр –cf отвечает за создание архива filename.tar, в который войдут указанные файлы. Вместо файлов могут быть указаны и директории.
Создание архива с использованием сжатия
Поскольку для сжатия доступны как минимум два метода, для использования каждого из них используется отдельный набор параметров.
Пример сжатия Gzip:
tar -cvzf filename.tar.gz dir_name
В данном случае мы попытались запаковать папку dir_name в архив filename.tar.gz. Из указанных параметров -z указывает на использование метода Gzip, а -v выводит результаты процесса создания архива с указанием упакованных файлов или папок.
Пример сжатия Bzip2:
tar -cvjf filename.tar.bz2 dir_name
Данная команда аналогична предыдущей и имеет отличие в параметре –j, т.к. именно он отвечает за использование метода сжатия Bzip2.
Распаковка архива
Для того, чтобы распаковать архив, используется команда:
tar -xvf filename.tar.bz2
В данном случае архив filename.tar.bz2 будет распакован в ту папку, в которой вы находились в момент запуска команды. Для того, чтобы распаковать архив в какую-либо другую директорию, можно использовать команду:
tar -xvf filename.tar.bz2 -C /path/to/folder
В этом случае архив распакуется в указанной директории.
Просмотр содержимого архива без распаковки
Для этих целей используется следующая команда:
tar -tf filename.tar.gz
В результате выполнения команды выведется список файлов и папок, хранящихся в архиве. Если в перечень параметров добавить -v, то получится расширенный вывод информации о содержимом с указанием размера файлов, прав доступа, именами владельцев и их групп, и т.п.
Просмотреть полный список возможностей архиватора tar можно при помощи команд:
tar --help #вызов справки по командам и параметрам man tar #вызов расширенной документации
Создание и распаковка ZIP-архивов
Создание zip-архива выполняется командой:
zip archive.zip filename
Вместо archive.zip указываем имя создаваемого архива. Вместо filename указываем имя файла, который нужно архивировать. Для архивации целой папки необходимо использовать параметр –r, который инициирует рекурсивное архивирование. Без этого параметра будет заархивирована только папка без вложенных в неё файлов. Пример команды:
zip –r archive.zip dirname
Распаковка архива производится командой unzip:
unzip archivename.zip
Если необходимо распаковать в конкретную папку, то для этого используется параметр –d. Например:
unzip –d dirname archivename.zip
Вместо dirname указывается папка, в которую нужно извлечь данные из архива.
Просмотреть полный список возможностей архиватора zip и unzip можно при помощи команд:
zip --help или unzip --help #вызов справки по командам и параметрам man zip или man unzip #вызов расширенной документации
Распаковка RAR-архивов
Для извлечения содержимого архива используется команда unrar:
unrar filename.rar
Посмотреть список файлов в архиве без его распаковки можно командой:
unrar –t filename.rar
Примечание: Стоит отметить, что Unrar может отсутствовать по умолчанию в некоторых Linux-дистрибутивах. Установить данное ПО можно следующими командами:
CentOS/Fedora:
yum install unrar
Debian/Ubuntu:
apt-get install unrar-free
Просмотреть полный список возможностей архиватора unrar можно при помощи команд:
rar --help #вызов справки по командам и параметрам man unrar #вызов расширенной документации
Пример создания резервной копии данных на VPS
Допустим, на VPS необходимо сделать резервную копию файлов сайта, которые располагаются в директории /var/www/html/mysite. Чтобы создать сжатый архив данных, расположенных в указанной директории, необходимо выполнить следующую команду:
tar -cvzf mysite.tar.gz /var/www/html/mysite
В результате содержимое директории /var/www/html/mysite будет запаковано в архив mysite.tar.gz.
Если вы хотите перенести подобный архив с одного VPS на другой, но не знаете, как это сделать, то об этом вы можете узнать в статье Способы переноса файлов между серверами.
Использование tar в Linux и FreeBSD для работы с архивами

Обновлено: 14.04.2023 Опубликовано: 18.11.2016
Утилита командной строки tar используется для работы с архивами в операционных системах на базе UNIX. С ее помощью можно архивировать данные и оптимизировать использование дискового пространства.
Создание и распаковка архивов
Рассмотрим общий синтаксис для создания и распаковки архивов.
Создать
Создание выполняется с ключом c. Синтаксис следующий:
tar -czvf archive.tar.gz /home/dmosk
* в данном примере будет создан архив archive.tar.gz домашней директории пользователя (/home/dmosk)
** где z — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); c — ключ на создание архива; v — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); f — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами).
Распаковать
Распаковка выполняется с ключом 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, значит нужно его установить:
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
TGZ — tar-архив, сжатый с помощью утилиты gzip. По сути, это тот же tar.gz, и работа с ним ведется такими же командами. Рассмотрим примеры работы с данным форматом.
Для создания архива tgz выполняем:
tar -czf archive.tgz /files
Распаковывается, как gzip:
tar -xzf archive.tgz
xz
Это формат сжатия данных с помощью алгоритма LZMA. Для работы с ним устанавливаем:
apt install xz-utils
* на Debian / Ubuntu.
* на 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 пропустит одну вложенную папку внутри архива.
Указать конкретный файл или каталог для распаковки
Если у нас большой архив, но извлечь нужно конкретный файл или каталог, то можно указать его через пробел после указания файла с архивом. Синтаксис:
Рассмотрим пример. Напомним, что можно посмотреть содержимое архива с помощью опции 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 Мб.
В итоге мы получим, примерно, такую картину:
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 из отдельных файлов с последующим его архивированием
Мы можем собрать файл 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-файла:
Файл tar можно удалить:
rm -f my_archive.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 -r archive.zip /home/dmosk
* создает архив каталога /home/dmosk в файл archive.zip.
Windows
В системе на базе Windows встроенными средствами можно распаковать только ZIP-архивы. Для работы с разными архивами рекомендуется поставить архиватор, например 7-Zip.