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.
Если у вас возникли вопросы или вы хотите узнать больше об этой статье, пожалуйста, оставьте свой вопрос в комментариях.