Как использовать Tar в Linux (Ubuntu, CentOS, Red Hat)

Tar это утилита для архивирования и сжатия файлов в Linux и UNIX-подобных операционных системах. Она позволяет объединять множество файлов и каталогов в один архивный файл .tar, сохраняя при этом права доступа и структуру каталогов.

Tar чрезвычайно полезен для резервного копирования данных, перемещения групп файлов между системами и подготовки дистрибутивов исходного кода. В этом подробном руководстве мы рассмотрим основы использования tar, а также некоторые более сложные функции и примеры.

Обзор Tar

Tar расшифровывается как Tape ARchive. Изначально он использовался для архивирования данных на ленточные накопители для долговременного хранения. Хотя tar по-прежнему может записывать архивы на ленточные накопители, сегодня он чаще используется для работы с обычными файлами и трубами.

Некоторые ключевые факты о tar:

  • Архивы Tar объединяют несколько файлов и каталогов в один файл .tar.
  • Для экономии места архивы можно сжимать с помощью gzip или bzip2.
  • Tar сохраняет разрешения, права собственности, время модификации файлов и т. д.
  • Архивы могут охватывать несколько лент/томов (для резервного копирования на ленточные накопители).
  • Tar стандартизован — архивы, созданные в одной UNIX-системе, могут быть извлечены в любой другой совместимой UNIX-системе.
  • Tar — очень старая утилита, которая существует на всех платформах Linux и UNIX. Она широко используется уже несколько десятилетий, что делает ее очень стабильной и надежной.

Давайте рассмотрим некоторые общие термины tar:

  • Архив — Файл .tar, созданный в результате пакетирования файлов с помощью tar. Этот файл содержит заархивированное содержимое. Архивы могут быть сжаты с помощью gzip/bzip2, что обозначается расширениями файлов .tar.gz или .tar.bz2.
  • Пакет — Синоним слова «архив».
  • Tarball — Тарбол — это еще один способ обозначить архивный файл .tar.gz или .tar.bz2.
  • Извлечь — Процесс распаковки архива и записи извлеченных файлов на диск.
  • Сжатие — Tar поддерживает опциональное сжатие с помощью gzip или bzip2 для экономии места. Сжатые архивы имеют расширения .tar.gz или .tar.bz2.
  • Добавить — Добавление файлов в существующий архив. Не влияет на существующее содержимое.
  • Конкатенация — Объединение двух архивов из конца в конец.

Теперь, когда мы разобрались с терминологией и основами tar, давайте перейдем к примерам использования.

Создание архивов

Чтобы создать новый tar-архив, воспользуйтесь командой tar -cvf команду. Это выглядит следующим образом:

  • -c — Создает новый архив.
  • -v — Вербозный вывод. Перечисляет обработанные файлы.
  • -f <archive-name> — Имя выходного файла.

Например :

$ tar -cvf archive.tar /path/to/folder

Это рекурсивно заархивирует указанную папку в archive.tar. Вы можете указать несколько путей к файлам/папкам, чтобы добавить несколько записей:

$ tar -cvf archive.tar /path/one /path/two /path/three

Чтобы сжать архив с помощью gzip, используйте -czvf , а не просто -cvf:

$ tar -czvf archive.tar.gz /path/to/folder

Для сжатия bzip2 используйте -cjvf:

$ tar -cjvf archive.tar.bz2 /path/to/folder

Вы можете управлять выводом подробной информации с помощью -v. Опустите его, чтобы скрыть листинги файлов:

$ tar -cf archive.tar /path/to/folder

Просмотр содержимого архива

Чтобы просмотреть файлы, содержащиеся в tar-архиве, не распаковывая его, используйте:

$ tar -tf archive.tar

The -t перечисляет содержание.

Для сжатых архивов необходимо добавить флаг сжатия:

$ tar -tzf archive.tar.gz
$ tar -tjf archive.tar.bz2

Извлечение архивов

Чтобы извлечь архив, используйте -xf:

$ tar -xf archive.tar

Это извлечет содержимое файла archive.tar в текущий каталог с сохранением прав доступа и атрибутов.

Для сжатых архивов:

$ tar -xzf archive.tar.gz
$ tar -xjf archive.tar.bz2 

Вы можете извлечь в определенный каталог с помощью -C:

$ tar -xf archive.tar -C /tmp/extract-here

Это позволит извлечь архив в /tmp/extract-here.

Добавление в архивы

Вы можете добавлять файлы/каталоги в существующий tar-архив, используя -rvf вместо -cvf:

$ tar -rvf archive.tar /new/folder

Это добавит /new/folder рекурсивно к archive.tar без изменения существующего содержимого.

Обновление архивов

Чтобы обновить существующие файлы в архиве или добавить новые, используйте -uvf:

$ tar -uvf archive.tar /path/to/update

Это добавит все новые файлы в раздел /path/to/update, и заменит все существующие файлы в архиве на обновленные версии.

Удаление из архива

Удаление файлов из tar-архивов подразумевает создание нового архива без этих файлов.

Сначала распакуйте содержимое архива во временное место:

$ mkdir /tmp/archive-temp
$ tar -xf archive.tar -C /tmp/archive-temp

Затем удалите файл, который вы хотите удалить, из временной папки.

Наконец, создайте новый архив из временной папки:

$ tar -cf new-archive.tar /tmp/archive-temp

new-archive.tar теперь будет содержать содержимое архива за вычетом удаленного файла.

Исключение файлов/путей

Чтобы исключить определенные файлы/пути при создании архива, используйте --exclude:

$ tar -cvf archive.tar /path --exclude=/path/to/exclude

Это предотвратит /path/to/exclude от добавления в archive.tar.

Вы можете иметь несколько --exclude опций. Например, чтобы исключить все файлы .log:

$ tar -cvf archive.tar /path --exclude=*.log

Включение только совпадающих путей

Вместо того чтобы исключать определенные пути, вы можете выбрать включение только совпадений, используя -T:

$ tar -cvf archive.tar -T include-list.txt

Где include-list.txt содержитПаттерны типа *.py можно использовать только для соответствия определенным расширениям.

Параметры сжатия

По умолчанию tar использует gzip для сжатия. Вы можете указать различные алгоритмы:

  • Для gz (gzip): -z
  • Для bz2 (bzip2): -j
  • Для lzma: -J
  • Для lzop: -Z

Например:

$ tar -cjf archive.tar.bz2 /path # bzip2 compression

Вы также можете установить уровень сжатия, который обычно варьируется от 1 до 9 (выше = лучшее сжатие, но медленнее):

$ tar -czf -9 archive.tar.gz /path # gzip level 9

Проверка архива

После создания архива вы можете проверить, не был ли он поврежден или изменен, используя -W:

$ tar -Wvf archive.tar

Это позволит проверить целостность архива.

Для сжатых архивов добавьте флаг сжатия, как обычно:

$ tar -Wzvf archive.tar.gz

Tar по трубам и удаленный доступ

Tar может читать/записывать архивы локально или удаленно по трубам stdin/stdout.

Например, чтобы создать tar по SSH:

$ ssh user@host 'tar -cf - /path/to/archive' | tar -xvf -

Это передаст выходной файл tar по SSH для локального извлечения.

Вы также можете извлечь архив и передать его по SSH для удаленного извлечения:

$ tar -cf - /path/to/archive | ssh user@host 'tar -xvf -'

Передача tar через SSH со сжатием/распаковкой может значительно ускорить передачу:

$ tar czf - /path/to/archive | ssh user@host 'tar xvzf -'

Это лишь некоторые примеры — tar предоставляет вам большую гибкость при работе с трубами.

Разделение/расширение архивов

Если ваш архив не помещается на одном томе, например на ленте или диске, вы можете разделить tar-архив на несколько кусков.

Чтобы разделить архив по размеру:

$ tar -cvf - --tape-length=1G /path | split -b 1G - archive.tar.

Это позволит разделить archive.tar на куски по 1 ГБ с именами archive.tar.01, archive.tar.02, и т.д.

Можно также разделить по количеству кусков:

$ tar -cvf - /path | split -b 100m -d -a 5 - archive.tar.

Это разбивает архив на 5 частей (-a 5) с именами archive.tar.01, archive.tar.02, … archive.tar.05.

Чтобы восстановить архив из кусков, используйте cat для конкатенации их в обратном порядке:

$ cat archive.tar.0* > archive.tar

Затем извлеките их, как обычно, с помощью tar -xf archive.tar.

Архивация специальных файлов

  • Чтобы заархивировать такие файлы устройств, как /dev/sdb, используйте --preserve-devices опцию в GNU tar или --formats=v7 в BSD/Solaris tar.
  • Для точного отслеживания жестких ссылок на файлы и их правильного архивирования используйте --hard-dereference.
  • Для архивирования расширенных системных атрибутов (SELinux, ACL и т. д.) используйте --xattrs.
  • Чтобы сохранить пустые каталоги в архиве, используйте --keep-directory-symlinks.

Подробные сведения об этих и других специальных параметрах архивации см. в документации tar.

Полезные флаги/примеры Tar

Здесь приводится краткое описание некоторых полезных флагов и операций в tar:

# Create archive
$ tar -cf archive.tar /path/to/files
# Compressed archive 
$ tar -czf archive.tar.gz /path/to/files
# View archive contents
$ tar -tf archive.tar
# Extract archive 
$ tar -xf archive.tar
# Extract to specific folder
$ tar -xf archive.tar -C /tmp 
# Append files to archive
$ tar -rvf archive.tar file1 file2
# Update files in archive
$ tar -uvf archive.tar file1
# Delete file from archive
$ tar --delete -f archive.tar file_to_delete 
# Archive a remote folder over SSH
$ ssh user@host 'tar -cf - /path/to/archive' | tar -xvf -
# Verify archive integrity  
$ tar -Wvf archive.tar
# Compression levels 1-9
$ tar -czf -9 archive.tar.gz /path  
# Split archive into chunks 
$ tar -cf - /path | split -b 100m -d -a 5 - archive.tar.

Здесь приведен широкий спектр примеров использования tar. Для получения более подробной информации о поддерживаемых флагах обязательно обратитесь к man-страницам конкретной реализации tar.

Заключение

Tar — незаменимый инструмент для работы с группами файлов в системах Linux/UNIX. Он позволяет объединять любое количество файлов, каталогов и специальных файлов в единый переносимый архив с сохранением прав доступа и атрибутов, и имеет множество повседневных применений для резервного копирования, передачи файлов, работы с Docker и CI/CD, а также для распространения программного обеспечения. Это стандартизированная утилита UNIX, гарантированно доступная в системах Linux и macOS.

Надеемся, это руководство дало вам общее представление о tar и о том, как эффективно использовать его для управления архивами в системах Linux, таких как Debian, Ubuntu 18.04 / 20.04 / 22.04, CentOS 7 / 8 или Red Hat 7.

Если у вас возникли вопросы или вы хотите узнать больше об этой статье, пожалуйста, оставьте свой вопрос в комментариях.

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

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