Утилита командной строки 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 значительно упростит выполнение повседневных задач системного администрирования и программирования.

От root

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *