Название tar архива образовано от сочетания Tape ARchive, так как было разработано для записи последовательных данных на ленточные устройства. Также иногда встречается название tarball.
По умолчанию tar
архивирует файлы только без сжатия, но с использованием некоторых частей. Мы можем использовать различные методы сжатия, чтобы на выходе получить архив меньшего размера. Утилита tar
обычно включается в большинство дистрибутивов Linux по умолчанию, а сам формат поддерживается другими операционными системами, включая Windows и macOS, с помощью различных инструментов и утилит.
В этой статье мы рассмотрим некоторые общие примеры использования команды tar
и поддерживаемые флаги.
1. Создание tar архива
Для создания обычного архива без сжатия достаточно ввести команду ниже:
$ tar cvf <tar-file-name> <files-to-archive>
Здесь флаги c обозначает создание, v
обозначает подробный вывод и f
обозначает имя файла архива tar
. По соглашению укажите имя файла tar
с расширением .tar
. Архивируемые файлы могут быть определены с помощью подстановочных знаков или же можно указать один файл или несколько файлов/путей.
В качестве примера можно привести три файла в каталоге:
Создать архив, содержащий все три файла, можно следующим образом:
Также можно указать только конкретные файлы для архивирования, например:
2. Создание сжатого архива (GZ)
tar
позволяет не только архивировать файлы, но и сжимать их для экономии места. Одним из популярных форматов сжатия является gunzip
, обычно представленный расширением .gz
после .tar
или как tgz
. Мы можем использовать флаг z
, чтобы указать, что файлы должны быть сжаты с помощью gunzip
. Вот пример:
Можно заметить, что размер архивных файлов существенно отличается, хотя оба содержат одни и те же три файла. Это связано с использованием сжатия с использованием флага z
.
3. Создание сжатого архива (BZ)
tar
поддерживает несколько других форматов сжатия. Одним из них является bz2
или bzip2
, который представлен расширением tar.bz2
или иногда как tbz2
. Это может дать вам меньший размер архива, но, в свою очередь, потребляет больше ЦП, так что процесс сжатия/декомпрессии может быть медленнее, чем gz
архив. Для создания bz
архива используется флаг j
:
4. Распаковка всех файлов
Архив tar
(сжатый или несжатый) можно извлечь с помощью опции x
. Ниже приведены примеры, поясняющие его использование:
Эта команда также работает для сжатого архива формата gz
:
И даже для архива со сжатием bz2
:
5. Просмотр содержания архива
Чтобы перечислить содержимое архива tar
, можно использовать флаг t
, как показано ниже:
6. Распаковка конкретных файлов
Из архива tar
, tar.gz
или tar.bz2
можно извлечь как все файлы, так и один конкретный файл, указав имя файла:
Аналогично, можно указать несколько имен файлов, разделенных пробелом, чтобы извлечь их вместе за один переход.
7. Распаковка с помощью маски
Чтобы извлечь один или несколько файлов с помощью шаблона PATTERN
, используйте флаг --wildcards
:
8. Добавление файлов в архив
В существующий несжатый архив можно добавлять новые файлы используя флаг r
или --append
с новыми именами файлов или шаблоном подстановочных символов (помните, что это работает только с несжатыми TAR-файлами, а не со сжатыми форматами tar.gz
или tar.bz2
):
Можно увидеть, что содержимое списка archive.tar
показывает два только что добавленных файла.
9. Удаление файлов из архива
Удаление определенных файлов из архива tar
возможно с помощью флага --delete
, как показано ниже (сравните список tar
до и после удаления файлов):
Опять же это работает только для несжатых архивов и завершится неудачей для сжатых форматов архива.
10. Создание архива с проверкой
При создании несжатых архивных файлов можно проверить содержимое архива, используя флаг W
как показано ниже:
Этот флаг нельзя использовать с флагами сжатия, хотя можно сжать созданный файл tar
позже с помощью gzip
или других инструментов.
11. Распаковка архива в папку
Если вы хотите извлечь содержимое тарбола в определенную папку вместо текущего каталога, используйте флаг -C
с указанием пути к каталогу, как показано ниже:
12. Использование флага –diff
Можно использовать флаг --diff
или d
для поиска любых изменений между файлами в архиве tar
и файлами в файловой системе. Вот пример, который запускает diff
один раз, когда файл внутри архива и снаружи был один и тот же. Если запустить команду снова после обновления файла, то можно увидеть разницу в выходных данных.
13. Исключение файлов
Исключение определенных файлов может быть обязательным при создании архивов tar
. Этого можно достичь с помощью флага --exclude
.
Как можно заметить из приведенных выше выходных данных, можно задать флаг --exclude
несколько раз, чтобы указать несколько имен файлов или шаблонов связывая их логическим AND
. Следует отметить, что из шести файлов в директории в приведенном выше примере только два файла удовлетворяли условию, которое должно быть включено в archive.tar.gz
.
14. Просмотр размера содержимого архива
Размер содержимого сжатого архива tar
можно получить с помощью следующей команды:
Аналогично для архива bz2
:
15. Архивация с сохранением разрешений
По умолчанию команда tar
сохраняет разрешение архивированных файлов и каталогов, хотя можно явно указать его с помощью флага -p
или --preserve-permissions
, как показано ниже.
Заключение
tar
— полезная утилита в системах Unix/Linux в течение долгого времени и в первую очередь использовалась в задачах архивирования и резервного копирования. С течением времени утилита развивалась и приобретала многие опции. Он может использоваться для простых и сложных задач, если вы знаете, какие функции он предлагает. В этой статье описаны некоторые основные операции, которые можно выполнить с помощью команды tar
, и показано, как она может помочь в выполнении повседневных задач системного администрирования.
Для получения дополнительных сведений обратитесь воспользуйтесь встроенным руководством Linux с помощью команда man tar
или используйте команду tar --help
или tar --usage
.
The tar command, which is very common in Unix and Linux systems for archiving and compressing files (also known as zipping), is also available in Windows 11 and Windows 10. It mainly helps you pack many files and folders into one file, called a tarball. In this guide, we’ll show you how to use the tar command in Windows to make ZIP archives.
Also see: How to Open or Extract .Gz, Tar.gz or .Tar File in Windows 11/10
Check if you have tar installed in Windows 11
Before we start making ZIP files with the tar command, make sure you have all the needed tools on your Windows 11 or Windows 10 PC. Starting with Windows 10’s Fall Creators Update and also in Windows 11, the tar
command is built-in and you can use it from Command Prompt or PowerShell. Below is how you can check if tar is on your computer and install it if it’s not.
- Open Command Prompt or PowerShell.
- Type
tar --version
and press Enter. - If you see a version number, tar is already on your computer. If you get an error or the command doesn’t work, you need to install it.
- If tar is not on your computer, the simplest way to install it is by turning on the Windows Subsystem for Linux (WSL).
- Go to the Windows search bar, type “Turn Windows features on or off”, and click on it.
- In the Windows Features window, tick the box for “Windows Subsystem for Linux” and click OK.
- Restart your computer when asked.
- After restarting, you can install the Linux version you like from the Microsoft Store, like Ubuntu.
- Once you have WSL with your chosen Linux version installed, you can use tar by starting the Linux app from the Start menu.
- You can also use tar directly in Windows Command Prompt or PowerShell.
With tar ready to use on your Windows machine, you can now start making ZIP archive files. In the next part, we’ll go through the basic commands and how to use them.
Suggested read: How to Zip Files and Folders in Windows 11/10 Without Any Software
Create ZIP archives with tar command
Now that you have tar ready on your Windows computer, let’s see how to use it to make ZIP archive files. It’s quite simple and uses basic command line steps.
- Start Command Prompt or PowerShell, whichever you like more.
- Move to the folder where your files are by using the
cd
command. For instance,cd C:\Users\Username\Desktop\
. - The basic way to make a ZIP file with
tar
is like this:tar -a -c -f archive_name.zip file_or_directory_to_compress
- Here,
-a
picks the ZIP format automatically,-c
means create, and-f
names the archive. - To make a ZIP archive of a folder called MyFolder, the command would be:
tar -a -c -f myarchive.zip MyFolder
- This command makes a ZIP file named myarchive.zip with MyFolder inside.
- You can also pack several files or folders in one go:
tar -a -c -f myarchive.zip file1.txt file2.txt MyFolder
- This makes a ZIP file with file1.txt, file2.txt, and the MyFolder folder inside.
- To check if your files are correctly packed, you can list what’s in the ZIP file:
tar -tf myarchive.zip
- This shows the files in myarchive.zip.
Pro tip: How to Split a File Into Multiple Files in Windows 11
In the next part, we’ll share some extra tips to make your ZIP archiving with tar even better.
Some tips for more efficient ZIP archiving with tar command
The basic tar command for making ZIP files is simple, but there are more options and tricks that can help you archive better and fit your needs.
- Usually,
tar
makes the ZIP file right where you are. To make the archive in a different place, add the path to the archive name. For example:tar -a -c -f C:\Archives\myarchive.zip MyFolder
- Sometimes, you might not want to include certain files or folders in the archive. Use the
--exclude
option for this:tar -a -c -f myarchive.zip --exclude="file1.txt" MyFolder
- You can use wildcards (*) to pack files that match a certain pattern. For example, to pack all
.txt
files:tar -a -c -f textfiles.zip *.txt
- If you want to see the files being packed, add the
-v
(verbose) option:tar -a -cvf myarchive.zip MyFolder
- This will show each file as it’s added to the archive.
- After making an archive, it’s good to check if it’s all okay. Do this by:
tar -tvf myarchive.zip
- This not only shows the contents but also checks if the files are fine.
- While
-a
picks ZIP compression by itself, you can choose other compression methods like gzip or bzip2 with-z
or-j
:tar -czf myarchive.tar.gz MyFolder tar -cjf myarchive.tar.bz2 MyFolder
- Note that these commands make
.tar.gz
or.tar.bz2
files, not ZIP. - For batch archiving multiple directories into separate archives, you can use a simple script or loop in the command line. For example, in PowerShell:
foreach ($folder in Get-ChildItem -Directory) { tar -a -c -f "$($folder.Name).zip" "$folder" }
Useful guide: Move All Files from Subfolders to Main Folder (Windows)
Create tar.gz and tar archives with tar command in Windows 11
Besides making ZIP files, the tar command in Windows can also make .tar.gz (tarball compressed with gzip) and .tar (uncompressed tarball) archives. These types are very common in Unix and Linux systems and are useful for many things, like backing up and sharing software.
Create a tar.gz archive
- To make a .tar.gz archive, use the
-z
option for gzip compression. The basic command looks like this:tar -czf archive_name.tar.gz file_or_directory_to_compress
- Here,
-c
means create,-z
applies gzip compression, and-f
names the archive file. - To compress a folder called MyFolder into a .tar.gz archive, the command is:
tar -czf myfolder.tar.gz MyFolder
Create a tar archive
- Making an uncompressed tar archive is simple. Just leave out the compression option (
-z
for gzip or-j
for bzip2). The command goes like this:tar -cf archive_name.tar file_or_directory_to_compress
- To pack MyFolder into a .tar file, use:
tar -cf myfolder.tar MyFolder
Some other options
- Just like with ZIP archiving, you can use the
-v
(verbose) option to see the files being added to the archive. - The
--exclude
option works the same way as with ZIP files, letting you leave out specific files or folders. - Use
tar -tf archive_name.tar.gz
ortar -tf archive_name.tar
to list what’s in your .tar.gz or .tar archive.
Использование tar в Linux и FreeBSD для работы с архивами
Обновлено:
Опубликовано:
Тематические термины: Linux, FreeBSD.
Утилита командной строки tar используется для работы с архивами в операционных системах на базе UNIX. С ее помощью можно архивировать данные и оптимизировать использование дискового пространства. Мы рассмотрим ее синтаксис, опции и примеры использования.
Создание и распаковка
Форматы
gz bz2 gzip tgz xz tbz
Ключи (опции)
Примеры
Папка назначение
Без вложенной папки
Конкретный файл или каталог для распаковки
Исключение файлов по маске
Работа с многотомными архивами
Создаем tar и сжимаем его
Рекурсивные распаковки
ZIP
Windows
Рассмотрим общий синтаксис для создания и распаковки архивов.
Создать
Создание выполняется с ключом 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, значит нужно его установить:
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.
yum install xz
* на Rocky Linux / CentOS.
Теперь можно пользоваться.
Создать архив:
tar -cpJf archive.tar.xz /home/user
Распаковка:
tar -xpJf archive.tar.xz
tbz
Это tar-архив, сжатый с помощью Bzip. Работа с ним напоминает работу с bz2.
Создать архив:
tar -cjf archive.tbz /home/user
Распаковка:
tar -xjf archive.tbz
Команды для действия
Ключ | Описание |
---|---|
-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
Windows
В системе на базе Windows встроенными средствами можно распаковать только ZIP-архивы. Для работы с разными архивами рекомендуется поставить архиватор, например 7-Zip.
-
Что такое Tar
-
Как установить, создать архив Tar и распаковать его в Windows
-
Как запаковать архив tar.gz и tar.bz2 в Ubuntu, Debian, CentOS
-
Как распаковать архив tar.gz и tar.bz2 Ubuntu, Debian, CentOS
-
Просмотр архивов tar в Linux
-
Иные возможности tar
Tar — это популярный файловый архиватор в Unix/Linux системах. Tar
зачастую используется вместе с архиваторами GZip
или BZip2
, так как они отлично взаимодополняют друг друга: Tar
не может сжимать файлы, только собирать их в одни архив, а GZip
и BZip2
не могут сжимать несколько файлов одновременно, поэтому если вам нужно запаковать несколько файлов и директорий, сначала они собираются в один несжатый архив с помощью Tar
, который сохранит их некоторые атрибуты, например такие, как права доступа, а затем этот архив сжимается с помощью GZip
или BZip2
. Весь процесс запускается одной консольной командой, про которые далее.
Как установить, создать архив Tar и распаковать его в Windows
Чтобы использовать Tar в Windows, нужно воспользоваться одним из следующих вариантов:
- Установить Far Manager.
Инструкция по созданию и распаковке архива.tar
с помощью Far Manager:-
Теперь просто выделяете ПКМ (правой кнопкой мыши) или кнопкой клавиатуры Insert нужные вам файлы и папки и жмёте
Shift + F1
, затем выбираете нужный формат (в нашем случае, TAR) и создаёте архив:Создание архива в Far Manager
При желании, в поле Добавить к архиву можно изменить название архива, а в поле Ключи можно ввести пароль от него.
-
Чтобы распаковать архив Tar, просто выделяете ПКМ или Insert нужный архив и жмёте
Shift + F2
Как распаковать Tar в Far Manager
В поле Распаковать в вводится путь, куда распаковать архив. Если нужно распаковать в текущую папку, нужно оставить поле
Распаковать архив
пустым. Если архив запаролен, пароль вводится в поле Пароль.
-
Теперь просто выделяете ПКМ (правой кнопкой мыши) или кнопкой клавиатуры Insert нужные вам файлы и папки и жмёте
- Также, можно обойтись без Far Manager, установив 7-Zip
Скачать 7-zip архиватор
Всё управление — создать архив и распаковать его — через ПКМ и Проводник Windows
Как запаковать архив tar.gz и tar.bz2 в Ubuntu, Debian, CentOS
tar cfvz archive.tar.gz *.php
где tar
— команда, cfvz
— ключи, archive.tar.gz
— имя будущего архива, *.php
— список файлов, которые нужно заархивировать.
Список можно заменить директорией, которую нужно запаковать целиком, для этого указываем путь до неё, абсолютный или относительный
tar cfvz archive.tar.gz /forpack
Теперь подробнее про ключи
-с
— команда, которая означает «создать архив»-f
— команда на упаковку файлов и директорий в один файл архива-v
— включает визуальное отображение процесса архивации-z
— использовать для сжатияGZip
Также, можно использовать для сжатия BZip2
. Для этого нужно использовать ключ -j
вместо -z
.
В этом случае, команда для запаковки tar.bz2
будет выглядеть так
tar cfvj archive.tar.bz2 /forpack
Вместо GZip
и BZip2
можно пользоваться иными архиваторами, для этого просто нужно подобрать соответствующий ключ.
Чтобы исключить определённый каталог или файл из архива, можно воспользоваться ключом --exclude
.
Сначала переходим в нужный каталог, затем используем следующую команду:
tar cfvz wp-content.tgz wp-content --exclude=wp-content/updraft --exclude=wp-content/uploads --exclude=wp-content/cache
Тут мы запаковываем каталог /wp-content/
на WordPress, исключая раздел Updraft wp-content/updraft
, раздел Загрузки wp-content/uploads
и Кеш wp-content/cache
.
Важный момент — чтобы исключить ошибки, не указывайте слеш
/
в конце пути исключаемого каталога.
Как распаковать архив tar.gz и tar.bz2 Ubuntu, Debian, CentOS
Чтобы распаковать архив tar.gz
или tar.bz2
, в команде нужно заменить -с
на ключ -x
, а также указать путь до архива, абсолютный или относительный
Команда для распаковки архива в текущую директорию выглядит так
tar xfvz archive.tar.gz
С помощью ключа -С
можно указать путь, куда нужно распаковать архив
tar xfvj archive.tar.bz2 -C /var/www
Просмотр архивов tar в Linux
Для просмотра содержимого архивов можно использовать ключ -t
tar -tf archive.tar.bz2
Будет выведен список файлов и директорий в архиве. При добавлении ключа -v
также будет выведена подробная служебная информация о правах доступа, размерах файлов и прочем.
Иные возможности tar
Tar
имеет много дополнительных возможностей, к примеру, добавление файлов в существующий архив, исключение некоторых файлов и директорий при запаковке архива и так далее. Подробнее вы можете узнать о них при помощи команды
tar --help
Загрузка…
Введение
Из этого модуля вы узнаете о еще одном принципиальном отличии Linux и Windows, только теперь в части работы с архивами. Тема несложная, но крайне прикладная. Приступим!
Архивация Linux vs Windows
Архивирование и сжатие файлов — это крайне любопытная тема, по которой сразу виден большой контраст между мирами Windows и Linux.
В системе Windows, как вы знаете, большую популярность приобрели Zip-архивы, поэтому Microsoft даже реализовала их поддержку на уровне системы под названием «сжатых папок». Данный формат включает одновременно и архивирование, и сжатие, в связи с чем эти слова в мире Windows произносят вместе и скороговоркой «архивированиеисжатиефайлов»…, как будто в баню дровишки принес и высыпал.
В то же время в системе Linux граница между этими технологиями проведена настолько четко, что они реализованы в разных форматах и для работы с ними требуются разные приложения! Поэтому давайте уточним эти понятия:
-
Архивирование — это процесс объединения нескольких файлов в один пакет, называемый архивом, для его дальнейшего хранения в безопасном месте и последующего восстановления с сохранением всей необходимой метаинформации об исходных файлах: дате создания и последнего изменения, владельцах, правах доступа и т.д.
Отметим два существенных преимущества архивов. Во-первых, один большой архивный файл копируется быстрее, чем много маленьких, т.к. в этом случае данные движутся одним сплошным потоком, как доверху груженый товарняк. При копировании по сети снижаются накладные расходы на установление сессий, а при копировании на магнитные носители мы экономим на записи метаинформации. Во-вторых, сохранение метаинформации о файлах внутри архива позволяет не потерять ее при копировании архива на носитель с любым другим типом файловой системы.
Для архивирования используют утилиты
tar
,dd
,cpio
. Обратное действие по извлечению исходных файлов из архива называют распаковкой, разархивированием или восстановлением данных из архива.Архивирование само по себе не включает сжатие данных, но используется вместе с ним.
-
Сжатие файлов или компрессия — алгоритмическое преобразование данных, выполняемое с целью уменьшения их объема для более эффективного использования устройств хранения и передачи данных.
Для сжатия файлов в Linux используют утилиты
gzip
,bzip2
,xz
и др. Обратное действие по извлечению исходных данных из сжатых файлов называют декомпрессией, восстановлением данных из сжатого файла.
Вот и получается, что когда нам нужно из Windows отправить несколько документов одним файлом, то это вопрос создания простого zip-архивчика. А стоит нам подключиться к веб-серверу по SSH, как отправка нескольких журналов в техподдержку превращается в двухэтапный процесс, сопряженный с фундаментальными идеями архивирования и сжатия информации.
Однако это не означает, что в Linux работа с архивами доступна только для продвинутых администраторов и не может быть столь же простой, как в Windows. Давайте начнем с возможностей графического интерфейса и уже после перейдем к обзору утилит.
Работа с архивами из графического интерфейса Fly
Архивы довольно часто используются в повседневной работе, поэтому всем пользователям нужно обладать хотя бы базовыми навыками по работе с ними. Файловый менеджер операционной системы Astra Linux позволяет делать это столь же просто, как мы к этому привыкли в Windows.
Для создания архива достаточно выделить в окне нужные объекты, кликнуть правой кнопкой мыши и в контекстном меню выбрать команду , см. рис. 59.
рис. 59 Меню Упаковать: Упаковать в архив
Вам будет доступен большой перечень алгоритмов сжатия: 7-zip, jar, bzip, gzip и др., см. рис. 60.
рис. 60 Выбор способа сжатия
Приложение позволяет дополнительно установить степень сжатия и защитить архив паролем. Некоторые алгоритмы позволяют создавать многотомные архивы, когда архив состоит из нескольких частей фиксированного размера, что позволяет разместить его на нескольких носителях, размер которых не вмещает весь архив целиком.
Для просмотра и извлечения информации из архива вы можете легко «зайти в него», как в обычную папку, но этот способ не отличается высокой производительностью, поэтому подходит только в тех случаях, когда вам нужно извлечь всего пару файлов или просто ознакомиться с содержанием архива. Если же вы попробуете таким способом распаковать архив Apache Directory Studio, то вам потребуются минуты, на протяжении которых приложение будет пугать вас своей оценкой в несколько часов.
Поэтому для быстрого извлечения всех файлов из архива вам нужно кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню действие . В этом случае задача будет решена даже быстрее, чем вы успеете прочитать скороговорку «архиватор архивировал самораспаковывающийся архив, да так и не заархивировал».
Примечание
О самораспаковывающихся архивах.
Некоторые архиваторы позволяют создавать так называемые самораспаковывающиеся архивы (от англ. self-extracting archive, SFX), которые представляют собой исполняемые файлы, способные извлекать заложенную в них информацию без дополнительных приложений. В Windows такие архивы стали довольно популярны, а в Linux их саботируют, в том числе и по соображениям безопасности.
Однако в техническом плане для создания SFX-архивов в Linux есть все необходимые инструменты, и, чтобы поместить папку myfolder
в исполняемый файл myarchive.7z.sfx
, достаточно выполнить команду 7za a -sfx7zCon.sfx myarchive.7z.sfx myfolder
. Но мы бы не рекомендовали отправлять такой файл Linux-администратору и объяснять, что с ним нужно сделать, если вы не хотите услышать, куда вам нужно пойти.
В завершение стоит отметить, что функции архивации в файловом менеджере Fly реализованы с помощью приложения Ark, поэтому пакет этого архиватора должен быть установлен в системе, иначе соответствующие пункты контекстного меню окажутся недоступны. Если же вы захотите работать с приложением Ark напрямую, то запустите его через .
Работа с архивами из командной строки
Архивирование и распаковка утилитой tar
В давние времена резервные копии хранились исключительно на магнитных лентах, поэтому для повышения скорости чтения, записи и поиска информации на этих типах носителей в конце 70-х годов была разработана первая версия программы tar
, название которой стало сокращением от слов tape archiver (с англ. ленточный архиватор).
Архивы tar, или как их еще называют тарболы (от англ. tar ball, где ball переводится как «сворачивать в клубок»), позволяют хранить всю необходимую метаинформацию о дате создания файлов, дате последнего изменения, владельцах, правах доступа и т.д., а программа tar
умеет их правильно восстанавливать с учетом жестких и мягких ссылок. Именно поэтому администраторы Linux называют tar очень мощным инструментом для работы с архивами, а Windows-админы недоумевают, что в этом инструменте такого мощного, если сам по себе tar-формат даже сжатия данных не предполагает.
Примечание
В Linux кроме утилиты tar довольно часто используют еще dd
и cpio
. Утилита cpio
(от англ. copy input/output — копировать входной/выходной поток) является предшественницей tar, но до сих пор еще часто используется несмотря на то, что tar покрывает все ее функциональные возможности. Утилита dd позволяет копировать блочное устройство в файл и обратно (от англ. disk dump — снимок диска).
Синтаксис утилиты tar следующий:
tar опции файл_архива [список_файлов_для_архивации] [-C каталог_для_распаковки]
Основные параметры и опции:
-
Параметр
файл_архива
– задает имя файла архива. Параметр является обязательным и должен следовать сразу же после ключа-f
(--file
).
Примечание
Мы уже знаем, что расширения файлов не играют в Linux большого значения, но скрипты автоматического дополнения команд по нажатию клавиши Tab (из соображений повышения производительности) не анализируют сигнатуру файлов и опираются только на расширения файлов.
Поэтому, если вы хотите, чтобы при использовании tar у вас работало автодополнение имен файлов, не забывайте добавлять к именам тарболов суффикс .tar. А если (вернее, когда) вы станете счастливым обладателем архива, по имени которого ни джобса не понять, чем он был создан, воспользуйтесь утилитой file <имя_архива>
.
-
Ключ
-f
(--file
) – позволяет задать имя архива, в который нужно упаковать указанные файлы или из которого их нужно извлечь. Опция является обязательной.
Примечание
Короткий ключ -f
должен быть последним в группе опций, так как все последующие за ним символы будут восприняты как имя файла. Мы уже наблюдали такое поведение POSIX-ключей на примере команды ps -aux
, которая работает правильно, но является некорректной, так как буква «x» после ключа -u
в этом случае трактуется как имя пользователя.
-
Ключ
-c
(--create
) – создать новый архив и поместить в него указанные файлы. -
Ключ
-x
(--extract
,--get
) – извлечь файлы из архива. По умолчанию файлы извлекаются в ту же папку, где находится архив. -
Ключ
-t
(--list
) – показать содержимое архива.
Примечание
Утилита tar
с ключом -t
позволяет просматривать содержимое как обычных, так и сжатых тарболов, поэтому вы без проблем сможете посмотреть содержимое архива с помощью команды tar -tf myarchive.tar.gz
.
-
Ключ
-v
(--verbose
) – показывает подробную информацию о процессе работы. -
Параметр
список_файлов_для_архивации
– имена файлов и папок, которые должны быть помещены в архив. Параметр нужно задать, если используется опция-c
(--create
). Элементы списка отделяются друг от друга символом пробела.
При извлечении файлов из архива часто указывают каталог:
-
Ключ
-C
(--directory
) – позволяет задать каталог, в который нужно поместить извлекаемые из архива файлы. -
Параметр
каталог_для_распаковки
– путь к каталогу, в который нужно поместить извлекаемые из архива файлы.Параметр нужно задать, если используется опция
-C
(--directory
).
Дополнительные опции, которые расширят ваши возможности по работе с архивами:
-
Ключ
-r
(--append
) – добавить файлы в конец архива. -
Ключ
-A
(--catenate
,--concatenate
) – добавить архив в конец другого архива. -
Ключ
--acls
– сохранить/восстановить списки управления доступом. -
Ключ
--xattrs
– сохранить/восстановить расширенные атрибуты файлов. -
Ключ
--exclude
– исключить файлы по шаблону, в котором допустимо использовать символы подстановки в стиле glob. -
Ключ
--strip-components
– извлечь файлы из вложенных папок архива, отбрасывая начало пути.Например, если у вас есть архив, созданный командой
tar -cf varfiles.tar /var
, то при извлечении файлаvar/log/auth.log
в текущем каталоге будет создана папка var, в ней папка log, и только там вы найдете нужный вам файл.Если же вам нужна только игла без всех этих уток и зайцев, то можно отбросить два первых уровня и создать файл
auth.log
прямо в текущей директории командой:tar -xf varbak.tar --strip=2 var/log/auth.log
-
Ключ
--wildcards
– использовать символы подстановки для выбора определенных файлов, удовлетворяющих критерию. -
Ключ
-u
(--update
) – обновить архив более новыми файлами с тем же именем. -
Ключ
-h
(--dereference
) – следовать за символическими ссылками, т.е. архивировать файлы, на которые указывают символические ссылки. По умолчанию в архив добавляются именно ссылки, а не сами файлы.
Рассмотрим использование этих ключей на практических примерах.
Пример 1. Заархивируем файлы каталога в tar-архив.
Сначала нам нужно создать несколько тестовых файлов и каталогов, а чтобы посмотреть созданную нами структуру, мы воспользуемся утилитой tree
. Если у вас её еще нет, поставьте ее командой sudo apt-get install tree
.
localadmin@astra:~$ cd ~ localadmin@astra:~$ mkdir test_tar localadmin@astra:~$ cd test_tar/ localadmin@astra:~/test_tar$ mkdir dir{1..3} localadmin@astra:~/test_tar$ cat ~/.profile | tee dir{1..3}/file{1..2} ... localadmin@astra:~/test_tar$ tree . ├── dir1 │ ├── file1 │ └── file2 ├── dir2 │ ├── file1 │ └── file2 └── dir3 ├── file1 └── file2
Заархивируем директорию dir1
, используя ключ -c
(--create
). Для того чтобы увидеть список файлов, включенных в архив, воспользуемся ключом -v
(--verbose
). Обязательным параметром утилиты tar
является ключ -f
(--file
), который задает имя файла архива. Дополнительным параметром идет список файлов для архивации. В нашем случае мы указали один каталог dir1
.
localadmin@astra:~/test_tar$ tar -cvf archive.tar dir1 dir1/ dir1/file1 dir1/file2 localadmin@astra:~/test_tar$ ls -l итого 24 -rw-r--r-- 1 localadmin localadmin 10240 авг 2 16:18 archive.tar drwxr-xr-x 2 localadmin localadmin 4096 авг 2 16:16 dir1 drwxr-xr-x 2 localadmin localadmin 4096 авг 2 16:16 dir2 drwxr-xr-x 2 localadmin localadmin 4096 авг 2 16:16 dir3 localadmin@astra:~/test_tar$ tar -tf archive.tar dir1/ dir1/file1 dir1/file2
Пример 2. Добавим каталог dir2
к тарболу archive.tar
:
localadmin@astra:~/test_tar$ tar -rvf archive.tar dir2 dir2/ dir2/file1 dir2/file2 localadmin@astra:~/test_tar$ tar -tf archive.tar dir1/ dir1/file1 dir1/file2 dir2/ dir2/file1 dir2/file2
Пример 3. Распакуем содержимое тарбола archive.tar
в новый каталог extracted
:
localadmin@astra:~/test_tar$ mkdir extracted3 localadmin@astra:~/test_tar$ cd extracted3/ localadmin@astra:~/test_tar/extracted3$ tar -xvf ../archive.tar dir1/ dir1/file2 dir1/file1 dir2/ dir2/file2 dir2/file1 localadmin@astra:~/test_tar/extracted3$ tree . ├── dir1 │ ├── file1 │ └── file2 └── dir2 ├── file1 └── file2 2 directories, 4 files
Пример 4. Распакуем содержимое сжатого архива archive_dir3.tar.gz
в указанный каталог. Для выбора каталога необходимо использовать опцию -C
, которая должна идти после имени архива:
localadmin@astra:~/test_tar/extracted3$ cd .. localadmin@astra:~/test_tar$ mkdir extracted4 localadmin@astra:~/test_tar$ tar -xvf archive.tar -C ./extracted4/ localadmin@astra:~/test_tar$ tree ./extracted4/ ./extracted4/ ├── dir1 │ ├── file1 │ └── file2 └── dir2 ├── file1 └── file2 2 directories, 4 files
Пример 5. Извлечем из архива только папку dir1
:
localadmin@astra:~/test_tar/extracted3$ cd .. localadmin@astra:~/test_tar$ mkdir extracted5 localadmin@astra:~/test_tar$ cd extracted5 localadmin@astra:~/test_tar$ tar -xvf ../archive.tar dir1 localadmin@astra:~/test_tar/extracted5$ tree . └── dir1 ├── file1 └── file2
Пример 6. Извлечем из archive.tar
только file1
, используя опцию --wildcards
:
localadmin@astra:~/test_tar/extracted3$ cd .. localadmin@astra:~/test_tar$ mkdir extracted6 localadmin@astra:~/test_tar$ cd extracted6 localadmin@astra:~/test_tar$ tar -xvf ../archive.tar --wildcards '\*file1' localadmin@astra:~/test_tar/extracted6$ tree . ├── dir1 | └── file1 └── dir2 └── file1 2 directories, 2 files
Сжатие и восстановление данных утилитами gzip, bzip2, xz
Сжатие без потерь основано на устранении избыточности, которая присутствует в исходных данных. Например, можно заменить в тексте длинные слова на короткие числа, и размер файла сразу же уменьшится. Отношение размера исходного файла к размеру сжатого файла называют коэффициентом сжатия.
Примечание
При сжатии данных, которые обладают низкой избыточностью, например, изображений, аудио- и видеоконтента, обычные алгоритмы без потерь, такие как PNG и FLAC, не показывают хороших коэффициентов сжатия.
Однако ученым удалось разработать алгоритмы сжатия с потерями, такие как JPEG, MP3, AVI и др., которые учитывают особенности восприятия этих видов информации человеком и достигают выдающихся результатов без существенного снижения качества контента.
К сожалению, такие подходы не сработают с уже сжатыми данными, которые обладают избыточностью на уровне белого шума. Поэтому сжимать Zip-архив с помощью RAR будет не многим выгоднее, чем майнить криптовалюту Бузовой.
В мире Linux наибольшее распространение получили следующие форматы сжатых файлов:
-
Формат .gz (GNU Zip) использует алгоритм, который лучше всего подходит для сжатия текстовых данных. На текущий момент существует ряд алгоритмов, которые выигрывают и по скорости, и по степени сжатия, но тем не менее формат gz остается самым распространенным форматом для nix-подобных систем. Для работы с этим форматом предназначена утилита gzip.
-
Формат .bz2 использует алгоритм, который медленнее gz, но выдает ощутимо более высокие результаты по сжатию, см. рис. 61. Для работы с этим форматом предназначена утилита bzip2.
-
Формат .xz сжимает данные еще лучше, чем .bz2, но делает это еще медленнее. Для работы с этим форматом применяется утилита xz.
рис. 61 Зависимость степени и скорости сжатия в современных алгоритмах
Утилиты gzip
, bzip2
и xz
реализуют разные алгоритмы сжатия, но их объединяет то, что все они обеспечивают сжатие только одного файла, поэтому для создания сжатых архивов, в которых содержится множество файлов, их нужно использовать совместно с утилитой tar
.
Утилита gzip
Формат gz является самым распространенным, и утилита gzip
по умолчанию включена во все дистрибутивы Linux, так же как поддержка сжатых папок в Windows. Синтаксис утилиты:
gzip <опции> <имя_файла>
Основные параметры и опции:
-
Параметр
«имя_файла»
– задает имя файла, для которого нужно выполнить сжатие или декомпрессию. Параметр является обязательным. -
Без опций
– вызов команды без ключей выполняет сжатие указанного файла. -
Ключ
-d
(--decompress
,--uncompress
) – выполняет декомпрессию файла. Этот ключ использует Bash-скрипт gunzip. -
Ключ
-c
(--stdout
) – указывает, что результаты утилиты требуется перенаправить в стандартный поток вывода. При этом исходный файл не удаляется.С помощью этой опции вы можете сохранить сжатые данные в файл с любым именем или извлечь их с выводом на экран без сохранения на диске, как делает Bash-скрипт zcat. Чтобы узнать подробнее, см. приведенный ниже пример 5.
Дополнительные опции расширят ваши возможности по работе с архивами:
-
Ключ
-#
(--fast
,--best
) – управляет скоростью/коэффициентом сжатия, где-1
(или--fast
) соответствует быстрому сжатию с наихудшим коэффициентом, и-9
(--best
) соответствует медленному сжатию с наилучшим коэффициентом. -
Ключ
-t
– позволяет выполнить проверку целостности сжатого файла. -
Ключ
-l
(строчная L,--list
) – показывает информацию о коэффициенте сжатия архива. -
Ключ
-f
(--force
) – выполняет сжатие или распаковку, даже если такой файл уже существует. Если ключ не задан и команда вызвана в интерактивном режиме, то утилита будет спрашивать, нужно ли перезаписывать существующий файл. -
Ключ
-k
(--keep
) – указывает, что исходный файл удалять не требуется. Данный параметр был добавлен позднее, поэтому его нет вman gzip
, но вы можете найти информацию о нем вgzip --help
. -
Ключ
-r
– интерпретирует имя файла как имя каталога и делает по нему полный обход, выполняя сжатие или декомпрессию всех дочерних файлов.
Рассмотрим использование этих ключей на практических примерах.
Пример 1. Выполним сжатие файла archive.tar
, который мы создали ранее, а затем выведем информацию о сжатом файле. Вы увидите, что исходный файл будет заменен сжатым файлом, в имени которого появится суффикс .gz. По умолчанию используется уровень сжатия 6, что обеспечивает хороший коэффициент сжатия при средней скорости.
localadmin@astra:~/test_tar$ gzip archive.tar localadmin@astra:~/test_tar$ ls archive_dir3.tar.bz archive_dir3.tar.xz dir1 dir3 extracted2 archive_dir3.tar.gz archive.tar.gz dir2 extracted extract localadmin@astra:~/test_tar$ gzip -l archive.tar.gz compressed uncompressed ratio uncompressed_name 624 10240 94.2% archive.tar
Пример 2. Выполним декомпрессию файла. Для этого воспользуемся ключом -d
(--decompress
):
localadmin@astra:~/test_tar$ gzip -d archive.tar localadmin@astra:~/test_tar$ ls archive_dir3.tar.bz archive_dir3.tar.xz dir1 dir3 extracted2 archive_dir3.tar.gz archive.tar dir2 extracted extract
Тот же самый эффект можно получить с помощью Bash-скрипта gunzip
, который под капотом вызывает gzip
с ключом -d
. Еще раз выполним сжатие и декомпрессию файла:
localadmin@astra:~/test_tar$ gzip archive.tar localadmin@astra:~/test_tar$ gunzip archive.tar localadmin@astra:~/test_tar$ ls archive_dir3.tar.bz archive_dir3.tar.xz dir1 dir3 extracted2 archive_dir3.tar.gz archive.tar dir2 extracted extract
Пример 3. Посмотрим разницу между стандартным, минимальным и максимальным уровнем сжатия, используя перенаправление на стандартный вывод с опцией -с
:
localadmin@astra:~/test_tar$ gzip -c archive.tar > archive.tar.gz localadmin@astra:~/test_tar$ gzip -c -1 archive.tar > archive_min.tar.gz localadmin@astra:~/test_tar$ gzip -c -9 archive.tar > archive_max.tar.gz localadmin@astra:~/test_tar$ ls -l итого 48 -rw-r--r-- 1 localadmin localadmin 712 авг 2 16:28 archive_dir3.tar.bz -rw-r--r-- 1 localadmin localadmin 572 авг 2 16:28 archive_dir3.tar.gz -rw-r--r-- 1 localadmin localadmin 604 авг 2 16:28 archive_dir3.tar.xz -rw-r--r-- 1 localadmin localadmin 610 авг 3 10:36 archive_max.tar.gz -rw-r--r-- 1 localadmin localadmin 671 авг 3 10:36 archive_min.tar.gz -rw-r--r-- 1 localadmin localadmin 10240 авг 2 16:34 archive.tar -rw-r--r-- 1 localadmin localadmin 624 авг 3 10:32 archive.tar.gz
Пример 4. Проверим в работе опцию рекурсивного сжатия/декомпрессии файлов.
Создадим тестовый каталог и файлы:
localadmin@astra:~/test_compress$ cd ~ localadmin@astra:~$ mkdir -p test_compress/dir_level1/dir_level2 && cd test_compress/ localadmin@astra:~$ echo {00001..99999} > file localadmin@astra:~$ echo level1_file1 > dir_level1/file1 localadmin@astra:~$ echo level1_file2 > dir_level1/file2 localadmin@astra:~$ echo level2_file1 > dir_level1/dir_level2/file1 localadmin@astra:~$ echo level2_file2 > dir_level1/dir_level2/file2 localadmin@astra:~/test_compress$ tree . ├── dir_level1 │ ├── dir_level2 │ │ ├── file1 │ │ └── file2 │ ├── file1 │ └── file2 └── file
Выполним команду gzip
с ключом -r
и увидим, что у всех дочерних файлов появился суффикс .gz, который указывает на то, что они были сжаты.
localadmin@astra:~/test_compress$ gzip -r dir_level1 localadmin@astra:~/test_compress$ tree . ├── dir_level1 │ ├── dir_level2 │ │ ├── file1.gz │ │ └── file2.gz │ ├── file1.gz │ └── file2.gz └── file
Для декомпрессии дочерних файлов можно воспользоваться утилитой gzip
с ключами -rd
, но проще вызвать Bash-скрипт gunzip с одним ключом -r
, так как скрипт под капотом вызовет утилиту gzip
с ключом -d
и добавит к списку опций ключ -r
:
localadmin@astra:~/test_compress$ gunzip -r dir_level1 localadmin@astra:~/test_compress$ tree . ├── dir_level1 │ ├── dir_level2 │ │ ├── file1 │ │ └── file2 │ ├── file1 │ └── file2 └── file
Пример 5. Выполним архивацию/декомпрессию данных с использованием потоков.
Сначала сожмем файл /var/log/auth.log
с отправкой результатов в стандартный поток вывода, который далее перенаправим в файл auth-2024-05-27.gz
:
localadmin@astra:~/test_compress$ sudo gzip --stdout /var/log/auth.log > auth-2024-05-27.gz localadmin@astra:~/test_compress$ file auth-2024-05-27.gz auth-2024-05-27.gz: gzip compressed data, last modified: Mon May 27 13:58:12 2024, from Unix, original size 20249
Теперь выполним декомпрессию с отправкой результатов в стандартный поток вывода. В нашем случае мы выводим поток на экран, но его можно перенаправить на вход какой-нибудь утилиты, например, less
или grep. Таким образом, параметры --stdout
и --decompress
работают как cat
, только применительно к сжатым файлам.
localadmin@astra:~/test_compress$ gzip --stdout --decompress auth-2024-05-27.gz ... May 27 12:50:11 astra sudo[1520]: pam_unix(sudo:session): session opened for user root by localadmin(uid=0) May 27 12:50:13 astra sudo[1520]: pam_unix(sudo:session): session closed for user root ...
Собственно, по этой причине и был создан вспомогательный Bash-скрипт zcat
, который под капотом вызывает gzip
с ключами -cd
:
localadmin@astra:~/test_compress$ zcat auth-2024-05-27.gz ... May 27 12:50:11 astra sudo[1520]: pam_unix(sudo:session): session opened for user root by localadmin(uid=0) May 27 12:50:13 astra sudo[1520]: pam_unix(sudo:session): session closed for user root ...
Утилиты bzip2 и xz
В Linux стараются не изобретать велосипеды, которых и без того хватает, поэтому все архиваторы, разработанные после утилиты gzip
, заимствуют ее набор ключей, да и она сама старается не отставать и перенимает полезные новинки у «коллег». В соответствии с той же логикой разработчики альтернативных алгоритмов предлагают аналоги команд gunzip
и zcat
— для популярных типов архивов они называются bunzip2
, bzcat
, unxz
и xzcat
соответственно.
Учитывая вышесказанное, для изменения алгоритма сжатия в большинстве случаев достаточно поменять только название команды, и
результат останется прежним. Если же что-то пойдет не по плану, то открывайте мануал и проверяйте синтаксис.
Пример 1. В качестве практики предлагаем выполнить сравнение технических характеристик алгоритмов сжатия. Начнем с подготовки файлов для демонстрации.
localadmin@astra:~/test_compress$ cp file file_bz localadmin@astra:~/test_compress$ cp file file_gz localadmin@astra:~/test_compress$ cp file file_xz localadmin@astra:~/test_compress$ ls -l итого 2364 drwxr-xr-x 3 localadmin localadmin 4096 авг 3 11:09 dir_level1 -rw-r--r-- 1 localadmin localadmin 140 авг 3 11:13 dir_level1_recourcive.gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 11:26 file -rw-r--r-- 1 localadmin localadmin 599994 авг 3 11:34 file_bz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 11:35 file_gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 11:35 file_xz
Выполним сжатие файлов file_bz
, file_gz
и file_xz
соответствующими утилитами, оценим время выполнения (используя утилиту time
) и размер сжатых файлов ls -l
. Как видите, утилита gzip
оказалась быстрее xz
примерно в 5 раз, но уровень сжатия утилиты xz
в 30 раз выше.
localadmin@astra:~/test_compress$ time gzip file_gz real 0m0,115s user 0m0,094s sys 0m0,016s localadmin@astra:~/test_compress$ time bzip2 file_bz real 0m0,127s user 0m0,114s sys 0m0,009s localadmin@astra:~/test_compress$ time xz file_xz real 0m0,600s user 0m0,567s sys 0m0,017s localadmin@astra:~/test_compress$ ls -l итого 896 drwxr-xr-x 3 localadmin localadmin 4096 авг 3 11:09 dir_level1 -rw-r--r-- 1 localadmin localadmin 36 авг 3 11:16 dir_levelevel1_file -rw-r--r-- 1 localadmin localadmin 140 авг 3 11:13 dir_level1_recourcive.gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 11:26 file -rw-r--r-- 1 localadmin localadmin 80831 авг 3 11:34 file_bz.bz2 -rw-r--r-- 1 localadmin localadmin 212174 авг 3 11:35 file_gz.gz -rw-r--r-- 1 localadmin localadmin 6824 авг 3 11:35 file_xz.xz
Архивирование и сжатие в стиле Windows утилитами zip и 7z
Мы уже знаем, что в Linux архивирование и сжатие файлов – это две разные процедуры, а в Windows популярность приобрели форматы, которые действуют по принципу «all inclusive».
С момента реализации «сжатых папок» в 2000 году фактическим стандартом для Windows стал формат Zip, но сообщество продолжало активно пользоваться в том числе форматами RAR и 7z, которые предлагали более продвинутые алгоритмы сжатия, что очень ценилось во времена дискеток на 1.5 МБ. Но все эти форматы объединяет одно — они поддерживают одновременно и архивирование, и сжатие, не прибегая к помощи сторонних инструментов.
При портировании Zip и 7z на Linux разработчики не стали менять логику работы утилит, поэтому они так и остались «двое из ларца» и не могут использоваться для сжатия тарболов. Вернее, положить tar-файл внутрь zip-архива можно без проблем, но для того чтобы заглянуть внутрь этого тарбола, вам потребуется сначала выполнить полную декомпрессию zip-архива.
И в завершение осталось только добавить, что подходы, закрепившиеся в Windows, действительно оказались намного удобнее, поэтому даже в утилиту tar встроили возможность создания сжатых архивов в одно действие:
-
Ключ
-z
(--gzip
) – задействовать утилитуgzip
для сжатия/декомпрессии данных. -
Ключ
-j
(--bzip2
) – задействовать утилитуbzip2
для сжатия/декомпрессии данных. -
Ключ
-J
(--xz
) – задействовать утилитуxz
для сжатия/декомпрессии данных.
Примечание
Кстати, интересные факты…
-
Название Zip не является аббревиатурой. Это просто английское слово, которое переводится как «двигаться с высокой скоростью». Разработчики хотели подчеркнуть, что их продукт был намного быстрее аналогов того времени.
-
Название 7z является сокращением от 7-Zip, а еще ранее это приложение называлось 777, где 7 по заявлению автора – это просто цифра, которая была добавлена для того, чтобы приложение находилось выше других в сортированных списках. Но любители НЛО говорят, что это все неспроста, и цифра 7 подозрительно совпадает с телефонным кодом России, ведь создателем этого формата является российский программист Игорь Павлов.
-
Название RAR является аббревиатурой и образовано от Roshal ARchiver. Создателем этого формата является еще один российский программист Евгений Рошал.
Мы не станем расписывать параметры вызова этих утилит, так как для zip в большинстве случаев будет достаточно команд zip/unzip
, а для 7z — ключей a (append) и d (decompress) соответственно. Поэтому рассмотрим только несколько наиболее частых и полезных примеров.
Пример 1. Выполним архивирование и сжатие группы файлов с помощью утилиты zip:
localadmin@astra:~/test_compress$ zip file_archive.zip file_{gz,bz,xz} adding: file_gz (deflated 65%) adding: file_bz (deflated 65%) adding: file_xz (deflated 65%) localadmin@astra:~/test_compress$ ls -l итого 2988 drwxr-xr-x 3 localadmin localadmin 4096 авг 3 2023 dir_level1 -rw-r--r-- 1 localadmin localadmin 140 авг 3 2023 dir_level1_recourcive.gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file -rw-r--r-- 1 localadmin localadmin 636892 авг 3 2023 file_archive.zip -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file_bz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file_gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file_xz
Пример 2. Выполним восстановление файлов из архива. Для этого воспользуемся утилитой unzip
:
localadmin@astra:~/test_compress$ unzip file_archive.zip Archive: file_archive.zip replace file_gz? [y]es, [n]o, [A]ll, [N]one, [r]ename: A inflating: file_gz inflating: file_bz inflating: file_xz localadmin@astra:~/test_compress$ ls -l итого 2984 drwxr-xr-x 3 localadmin localadmin 4096 авг 3 2023 dir_level1 -rw-r--r-- 1 localadmin localadmin 140 авг 3 2023 dir_level1_recourcive.gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file -rw-r--r-- 1 localadmin localadmin 636892 авг 3 2023 file_archive.zip -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file_bz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file_gz -rw-r--r-- 1 localadmin localadmin 599994 авг 3 2023 file_xz
Пример 3. Посмотрим содержимое архива с помощью ключа -l
(строчная L, от слова list):
localadmin@astra:~/test_compress$ unzip -l file_archive.zip Archive: file_archive.zip Length Date Time Name --------- ---------- ----- ---- 599994 2023-08-03 11:35 file_gz 599994 2023-08-03 11:34 file_bz 599994 2023-08-03 11:35 file_xz --------- ------- 1799982 3 files
Пример 4. Выполним декомпрессию данных в стандартный поток вывода, т.е. на экран, с помощью ключа -p
(pipe) команды unzip
:
localadmin@astra:~$ sudo zip auth-2024-05-27.zip /var/log/auth.log adding: var/log/auth.log (deflated 16%) localadmin@astra:~$ unzip -p auth-2024-05-27.zip ... May 27 12:50:11 astra sudo[1520]: pam_unix(sudo:session): session opened for user root by localadmin(uid=0) May 27 12:50:13 astra sudo[1520]: pam_unix(sudo:session): session closed for user root ...
Пример 5. Выполним архивирование и сжатие с помощью утилиты tar
в одно действие. Для этого воспользуемся ключом -z
:
localadmin@astra:~$ sudo tar -czvf varfiles.tar.gz /var ... /var/tmp/systemd-private-8cf669c8df1b48ba930a14a57441c918-upower.service-WFWd8H/ /var/tmp/systemd-private-8cf669c8df1b48ba930a14a57441c918-upower.service-WFWd8H/tmp/ /var/local/ /var/run /var/mail/ localadmin@astra:~$
И тут же проведем обратную процедуру:
localadmin@astra:~$ tar -xzvf varfiles.tar.gz ... /var/tmp/systemd-private-8cf669c8df1b48ba930a14a57441c918-upower.service-WFWd8H/ /var/tmp/systemd-private-8cf669c8df1b48ba930a14a57441c918-upower.service-WFWd8H/tmp/ /var/local/ /var/run /var/mail/ localadmin@astra:~$ ls -l | grep var drwxr-xr-x 12 localadmin localadmin 4096 мая 16 2023 var -rw-r--r-- 1 root root 66761786 июн 4 06:44 varfiles.tar.gz
Практика и тестирование
- Практическая работа: Модуль 14. Архивирование и сжатие информации
- Тест: Модуль 14. Архивирование и сжатие информации
Заключение
В этом модуле мы разобрались, как работать с архивированием и сжатием данных в Linux и почему для Windows-администраторов эти понятия являются синонимами. Граница между мирами, конечно, сильно истончается, поэтому мы уже видим, как zip и 7z портируют в Linux, а традиционно никсовые форматы наравне с rar и 7z включаются в нативную поддержку сжатых папок Windows (в том числе .tar, .tar.gz, .tar.bz2 и .tar.xz). Однако понимание концептуальных различий между форматами поможет вам уверенно
использовать эти технологии в своей работе.
В следующем модуле мы познакомимся с крайне непростой темой – управлением программным обеспечением в Linux. Тут-то нам и пригодятся знания текущего модуля, потому как deb-пакеты, используемые для установки программ в производных от Debian системах, представляют собой не что иное, как специализированные архивы.
Дополнительные источники информации
-
Формат tar (wikipedia)
-
Формат Gzip (wikipedia)
-
Список архивов и архиваторов (wikipedia)
-
Comparison of file archivers (wikipedia)