Тар‑архив (от англ. tar – tape archive) – это один из самых популярных форматов упаковки файлов в один контейнер. Он широко используется в Unix‑подобных системах для создания резервных копий, распространения программного обеспечения и передачи наборов файлов между машинами.
Содержание
- История и назначение формата TAR
- Структура TAR‑файла
- Базовые операции с tar в командной строке
- Сжатие TAR‑архивов
- Продвинутые возможности
- Лучшие практики и типичные ошибки
- Безопасность и проверка целостности
- Альтернативные инструменты и библиотеки
История и назначение формата TAR
Формат tar появился в начале 1970‑х годов для записи данных на магнитные ленты (tape). Основная идея заключалась в том, чтобы собрать набор файлов в один последовательный поток, который легко записать и позже восстановить. С тех пор tar стал де‑факто стандартом для:
- Создания резервных копий (backup);
- Распространения исходного кода программ (часто в сочетании с gzip или bzip2);
- Переноса больших наборов файлов между серверами.
Структура TAR‑файла
Тар‑архив состоит из последовательных блоков фиксированного размера (обычно 512 байт). Каждый файл описывается заголовком, после которого следуют данные файла, выравненные до целого количества блоков. В конце архива находятся два пустых блока, которые обозначают конец потока.
Ключевые поля заголовка:
| Поле | Размер (байт) | Назначение |
|---|---|---|
| Имя файла | 100 | Полный путь внутри архива |
| Режим доступа | 8 | Unix‑права (octal) |
| UID / GID | 8 + 8 | Идентификаторы владельца и группы |
| Размер | 12 | Размер файла в байтах (восьмеричный) |
| Время модификации | 12 | UNIX‑timestamp (восьмеричный) |
| Контрольная сумма | 8 | Контрольная сумма заголовка |
| Тип файла | 1 | ‘0’ – обычный файл, ‘5’ – каталог и т.д. |
| Имя файла (длинное) | 100 | Для путей > (POSIX‑UStar) |
Базовые операции с tar в командной строке
В большинстве дистрибутивов Linux и macOS утилита tar уже установлена. Ниже – самые часто используемые варианты.
Создание архива
tar -cvf archive.tar /path/to/directory - -c – создать архив;
- -v – выводить имена файлов (verbose);
- -f – указать имя файла архива.
Извлечение содержимого
tar -xvf archive.tar - -x – извлечь файлы;
- -C /path/to/dir – распаковать в указанный каталог.
Просмотр содержимого без распаковки
tar -tvf archive.tar Добавление файлов в существующий архив
tar -rvf archive.tar newfile.txt - -r – добавить (append) файлы в конец архива.
Сжатие TAR‑архивов
Сам по себе tar не сжимает данные, но его удобно комбинировать с внешними компрессорами;
| Компрессор | Опция tar | Расширение | Плюсы / Минусы |
|---|---|---|---|
| gzip | -z | .tar.gz / .tgz | Быстрое, широкая поддержка, умеренная степень сжатия. |
| bzip2 | -j | ;tar.bz2 | Лучшее сжатие, но медленнее. |
| xz | -J | .tar.xz | Самое высокое сжатие, но требует больше памяти и времени. |
| lz4 | —lz4 | .tar.lz4 | Очень быстро, но низкое сжатие. |
| zstd | —zstd | .tar.zst | Хороший компромисс между скоростью и степенью сжатия. |
Пример создания сжатого архива
tar -cJvf backup.tar.xz /var/www Извлечение сжатого архива
tar -xJvf backup.tar.xz Продвинутые возможности
Исключение файлов и каталогов
tar -cvf project.tar --exclude='*.log' --exclude='tmp/' . Создание архива из списка файлов
tar -cvf selected.tar -T filelist.txt Файл filelist.txt содержит один путь на строку.
Архивирование с сохранением прав доступа и владельцев
tar -cvpf archive.tar /etc - -p – сохранять права доступа;
- -f – имя файла;
- -c – создать.
Создание «инкрементных» резервных копий
С помощью опций --listed-incremental (или --newer) можно хранить только изменённые файлы.
tar -cvf backup_full.tar /home
tar -g snapshot.file -cvf backup_inc.tar /home
Работа с архивами через конвейер (pipe)
tar -cf ⎻ /data | ssh user@remote "cat > /backup/data.tar" Лучшие практики и типичные ошибки
- Не храните архивы без сжатия в долгосрочной перспективе. Даже если вам нужен «чистый» tar, лучше сразу упаковать в gzip/bzip2/xz – экономия места.
- Проверяйте целостность. После создания используйте
tar -tvf archive.tarилиtar --verify -f archive.tar. - Не забывайте про права доступа. При резервном копировании системных каталогов используйте
-pи запускайтеtarот root. - Избегайте длинных путей без поддержки UStar; Если требуется совместимость со старыми системами, ограничьте длину путей ми.
- Не добавляйте файлы в уже сжатый архив. Для
.tar.gzи подобных форматов операция-rневозможна – нужно распаковать, добавить и снова упаковать. - Регулярно проверяйте резервные копии. Автоматизируйте проверку с помощью cron и скриптов, сравнивая контрольные суммы.
Безопасность и проверка целостности
Тар‑архивы сами по себе не содержат криптографической защиты. Для обеспечения конфиденциальности и целостности рекомендуется:
- Создать архив.
- Сжать (по желанию).
- Подписать архив с помощью
gpg:gpg --output archive.tar.gz.sig --detach-sig archive.tar.gz - При передаче проверить подпись:
gpg --verify archive.tar.gz.sig archive.tar.gz
Для автоматической проверки можно хранить sha256sum в отдельном файле:
sha256sum archive.tar.gz > archive.tar.gz.sha256 Альтернативные инструменты и библиотеки
- GNU tar – самая распространённая реализация, поддерживает все перечисленные опции.
- bsdtar (часть libarchive) – кроссплатформенный, умеет работать с множеством форматов (zip, cpio, pax).
- 7‑zip (p7zip) – позволяет создавать и распаковывать tar‑архивы, часто используется в Windows.
- Python – модуль
tarfileпозволяет программно работать с tar‑файлами:import tarfile with tarfile.open('data.tar.gz', 'w:gz') as tar: tar.add('folder') - Go – пакет
archive/tarв стандартной библиотеке.
Тар‑архивы остаются фундаментальным инструментом для администраторов, разработчиков и обычных пользователей. Понимание их внутренней структуры, умение правильно использовать опции tar и сочетать их с современными компрессорами позволяет эффективно решать задачи резервного копирования, распространения программ и миграции данных.
Помните, что правильная организация резервных копий и регулярная проверка целостности – ключ к надёжному хранению информации.