Утилита командной строки tar
является одним из самых мощных инструментов для работы с архивами в операционных системах семейства Unix. Она позволяет упаковывать файлы и каталоги в единый архив, обеспечивая эффективное управление дисковым пространством и упрощение передачи данных. В данной статье мы подробно рассмотрим синтаксис команды tar
, основные опции и приведём примеры её использования.
Основные функции: создание и распаковка архивов
Работа с архивами включает две базовые операции: создание архива и его последующую распаковку. Эти процессы выполняются с помощью соответствующих ключей и дополнительных опций, которые определяют параметры сжатия, уровень вывода информации и другие аспекты работы с архивами.
Общий синтаксис для создания и распаковки архивов
Основное различие между созданием и распаковкой заключается в использовании разных ключей:
- Создание архива: Используется ключ
-c
(create). - Распаковка архива: Применяется ключ
-x
(extract).
Форматы архивов
Tar
поддерживает различные форматы сжатия, что позволяет выбирать оптимальный способ уменьшения размера архива в зависимости от потребностей. Рассмотрим самые распространённые форматы:
- gz: Сжатие с использованием алгоритма
gzip
. - bz2: Сжатие через алгоритм
bzip2
. - xz: Современный метод сжатия с использованием алгоритма
LZMA
. - tgz: Комбинация формата
tar
и сжатияgzip
. Фактически это то же самое, что и расширение.tar.gz
.
Создание архива
Процесс создания архива начинается с выбора ключа -c
, который сообщает утилите tar
о том, что необходимо создать новый архив. Общая структура команды выглядит следующим образом:
tar -c<опции> <название_нового_архива> <путь_к_сжимаемым_данным>
Пример создания архива:
tar -czvf archive.tar.gz /home/dmosk
Здесь:
-c
— указывает на создание нового архива.-z
— задействует алгоритм сжатияgzip
.-v
— включает режим подробного вывода (verbose), что полезно для отслеживания хода выполнения задачи.-f
— обязательный параметр, определяющий имя создаваемого архива.
Таким образом, эта команда создаёт архив archive.tar.gz
, включающий все файлы и подкаталоги из домашней директории пользователя /home/dmosk
, используя сжатие gzip
.
Распаковка архива
Распаковка архива осуществляется с помощью ключа -x
. Синтаксис команды следующий:
tar -x<опции> <название_архива>
Пример распаковки архива:
tar -xvf archive.tar.gz
В этом примере:
-x
— указывает на распаковку архива.-v
— активирует подробный вывод.-f
— определяет имя распаковываемого архива.
Архив archive.tar.gz
будет распакован в текущую рабочую директорию.
Подробное рассмотрение поддерживаемых форматов сжатия
Каждый формат сжатия имеет свои особенности и требует специфических настроек при работе с tar
. Рассмотрим основные форматы более детально.
Gzip (.gz)
Самый популярный и часто используемый формат сжатия. Для создания архива с использованием gzip
применяется следующая команда:
tar -czf archive.tar.gz /files
Для распаковки:
tar -xzf archive.tar.gz
Если возникает ошибка вида This does not look like a tar archive, можно попробовать использовать команду:
gzip -d archive.tar.gz
Bzip2 (.bz2)
Алгоритм bzip2
обеспечивает более сильное сжатие по сравнению с gzip
, хотя процесс занимает больше времени. Для создания архива с использованием bzip2
используется ключ -j
:
tar -cjf archive.tar.bz2 /files
Для распаковки:
tar -xjf archive.tar.bz2
Если система выдаёт ошибку о том, что не найден модуль bzip2
, необходимо установить соответствующий пакет:
- Для CentOS/RHEL:
yum install bzip2
- Для Ubuntu/Debian:
apt-get install bzip2
- Для FreeBSD:
pkg install bzip2
Если появляется ошибка Unrecognized archive format, можно воспользоваться следующей командой:
bzip2 -d archive.tar.bz2
Xz (.xz)
Формат xz
использует алгоритм LZMA
, обеспечивающий высокую степень сжатия, но требующий значительных ресурсов процессора. Перед работой с этим форматом необходимо убедиться, что установлены соответствующие пакеты:
- Для Debian/Ubuntu:
apt install xz-utils
- Для CentOS/Rocky Linux:
yum install xz
После установки можно создавать и распаковывать архивы с использованием ключа -J
:
# Создание архива
tar -cJf archive.tar.xz /files
# Распаковка
tar -xJf archive.tar.xz
Tgz (.tgz)
Формат tgz
представляет собой сочетание tar
и сжатия gzip
. Его можно рассматривать как синоним расширения .tar.gz
. Команда для создания архива tgz
аналогична созданию архива с расширением .tar.gz
:
tar -czf archive.tgz /files
Распаковка происходит точно так же, как и для архива .tar.gz
:
tar -xzf archive.tgz
Дополнительные ключи и опции
Помимо базовых операций создания и распаковки архивов, tar
предлагает широкий спектр других возможностей, таких как добавление новых файлов к существующему архиву, удаление файлов из архива, сравнение содержимого архива с исходными файлами и многое другое. Рассмотрим основные ключи и их описания:
Ключ | Описание |
---|---|
-A |
Добавляет файлы в существующий архив. |
-c |
Создаёт новый архив. |
-d |
Показывает различия между содержимым архива и исходными файлами. |
--delete |
Удаляет указанные файлы из архива. |
-r |
Добавляет новые файлы в конец архива. |
-t |
Отображает список файлов в архиве без распаковки. |
-u |
Обновляет архив, добавляя файлы, отсутствующие в нём. |
-x |
Извлекает файлы из архива. |
Важно помнить, что нельзя комбинировать несколько вышеупомянутых ключей в одной команде. Каждый ключ выполняет свою отдельную функцию.
Примеры использования утилиты tar
Рассмотрим несколько практических сценариев работы с утилитой tar
, которые помогут лучше понять её функционал и расширить круг возможных применений.
Распаковка в указанную папку
Иногда требуется распаковать архив не в текущую директорию, а в другой каталог. Для этого используется ключ -C
:
tar -C /home/user -xvf archive.tar.gz
Здесь ключ -C
указывает, что файлы должны быть извлечены в папку /home/user
.
Распаковка без вложенной папки
Бывают ситуации, когда нужно распаковать архив таким образом, чтобы его содержимое оказалось непосредственно в целевой директории, минуя корневую папку архива. Для этого используется опция --strip-components
:
tar -C /home/admin/mytar -xvf admin.tar.gz --strip-components 1
В этом примере --strip-components 1
пропускает первую вложенную папку внутри архива, что эквивалентно команде «Распаковать здесь».
Указание конкретного файла или каталога для распаковки
Когда нужно извлечь только определённый файл или каталог из большого архива, можно указать его сразу после имени архива:
tar zxf <путь_до_архива> <что_извлечь>
Например, если нам нужен только каталог mail
из архива samba.tar.gz
, можно сделать следующее:
tar tf /backup/samba.tar.gz # Просмотр содержимого архива
tar -zxf /backup/samba.tar.gz mail
Исключение файлов по маске
Часто бывает необходимо исключить определённые файлы или группы файлов при создании архива. Для этого используется опция --exclude
:
tar --exclude='sess_*' -czvf archive.tar.gz /wwwsite
В данном примере будут исключены все файлы, имена которых начинаются с sess_
.
Можно исключить несколько групп файлов одновременно:
tar --exclude='/data/recycle' --exclude='*.tmp' -zcf /backup/samba/2021-08-29.tar.gz /data/
Здесь исключаются файлы, заканчивающиеся на .tmp
, и вся папка /data/recycle
.
Работа с многотомными архивами
Иногда возникает потребность разбить архив на несколько частей, например, для переноса на носители ограниченного объёма или отправки по электронной почте. Для этого используются команды split
и cat
.
Создание многотомного архива:
tar -zcvf - /root | split -b 100M - root_home.tar.gz
Эта команда создаст архив каталога /root
и разобьёт его на части размером 100 Мб каждая.
Сборка архива обратно:
cat root_home.tar.gz* | tar -zxv
Создание архива из нескольких файлов с последующей компрессией
Иногда нужно сначала собрать несколько файлов в архив, а затем сжать его. Для этого можно использовать последовательность команд:
tar -cf ./my_archive.tar ./file1 # Создаём tar-файл с первым файлом
tar -rf ./my_archive.tar ./file2 # Добавляем второй файл
tar -rf ./my_archive.tar ./file3 # Добавляем третий файл
gzip < ./my_archive.tar > ./my_archive.tar.gz # Сжимаем tar-файл
rm -f my_archive.tar # Удаляем несжатый tar-файл
Рекурсивная распаковка
Если у вас есть архив, содержащий другие архивы, и вам нужно распаковать всё содержимое автоматически, можно использовать цикл while
:
while [ -f *.tar.gz ]; do
filename="$(ls -1 *.tar.gz | head -n 1)"
tar -xvf "$filename" && rm "$filename"
done
Эта команда будет находить и распаковывать все архивы с расширением .tar.gz
в текущем каталоге, удаляя их по мере обработки.
Заключение
Утилита tar
— незаменимый инструмент для работы с архивами в Unix-подобных операционных системах. Она предоставляет богатый набор функций для создания, модификации и распаковки архивов, позволяя пользователям эффективно управлять своим дисковым пространством и организовывать хранение данных. Освоение основных опций и методов работы с tar
значительно упростит выполнение повседневных задач системного администрирования и программирования.