Что лежит в архиве релиза: проверяем tar до извлечения
Коллега прислал архив релиза, и нужно проверить версию конфигурации. Распаковывать весь пакет в рабочий каталог неудобно: рядом уже лежат файлы другой сборки, а структура архива неизвестна. Сначала можно посмотреть список членов tar, затем вывести нужный текстовый файл непосредственно в stdout.
Это полезная привычка при работе с выгрузками сборки и диагностическими пакетами. Имя архива не доказывает его внутренний layout. В одном выпуске конфигурация лежит в config/, в другом добавлен верхний каталог release/. Перед извлечением важно узнать точный путь, который хранится внутри.
Создадим небольшой пакет
Учебный пример работает в отдельной папке. Он создаёт дерево payload и архив release.tar, затем читает единственный текстовый файл, не распаковывая архив обратно на файловую систему.
mkdir -p payload/config printf '%s\n' 'version=2026.11' > payload/config/release.conf printf '%s\n' 'artifact data' > payload/app.txt tar -cf release.tar -C payload . tar -tf release.tar tar -xOf release.tar ./config/release.conf
В списке будут пути, начинающиеся с ./, а последняя команда напечатает version=2026.11. Ключ -t отвечает за список, -x — за извлечение, -O направляет извлекаемое содержимое в stdout, -f задаёт файл архива. В выбранной записи путь совпадает с тем, который показала команда списка.
Параметр -C при создании меняет каталог, относительно которого tar читает вход. Поэтому внутри нет префикса payload. Это позволяет собрать переносимый пакет, не привязывая его layout к названию рабочей папки автора. При проверке чужого архива не предполагайте, что он создан так же.
Один член и несколько членов
Если с -O выбрать несколько файлов, их содержимое будет выведено подряд. Для конфигурации это способно выглядеть как один объединённый документ. Поэтому сначала найдите точный путь и выберите один ожидаемый член. Не расширяйте выбор маской только потому, что первый путь не подошёл.
Архив может содержать несколько членов с одинаковым именем. GNU tar умеет работать с повторными вхождениями, а простое чтение выбранного имени может вывести несколько содержимых подряд. Для пакета релиза дубликат имени лучше рассматривать как проблему упаковки и выяснить происхождение архива, прежде чем использовать файл в автоматизации.
Наличие release.conf в списке ещё не доказывает его тип. Подробный список tar -tvf release.tar помогает увидеть, где обычный файл, каталог или ссылка. Для автоматического конвейера удобнее устанавливать строгий контракт упаковщика, чем разбирать человекочитаемый подробный листинг регулярным выражением.
Просмотр не заменяет доверие к источнику
Не выводите неизвестное бинарное содержимое прямо в интерактивный терминал. Сначала убедитесь, что выбран ожидаемый текстовый файл, либо перенаправьте его в отдельный кандидат для анализа. Сам архив тоже обрабатывается программой tar, поэтому для недоверенных материалов нужна актуальная утилита и изолированная среда.
Извлечение всего архива требует отдельного решения о каталоге назначения, ссылках и допустимых путях. Описанный приём нужен именно для первичной инспекции и чтения конкретного члена. Если следующий шаг — установка релиза, сначала проверьте происхождение пакета и его состав, затем распаковывайте в выделенное место по принятой процедуре.
Проверьте также поведение при неверном имени члена: команда должна вернуть ошибку, которую вызывающий скрипт обязан заметить. Пустой stdout не равен успешно прочитанному пустому конфигу. Разница определяется статусом tar и контрактом самого файла.
В курсе Linux и Bash автоматизация связана с проверкой ошибок и резервным копированием. Откройте программу и продолжите к процедурам, где архив сначала проверяют, затем осмысленно извлекают и используют в повторяемой операции.
Ещё по теме
Продолжить на практике
- Linux и Bash для DevOps-инженеров ↗
Linux для работы с серверами: процессы, права, systemd, сеть, диски и логи. Автоматизируйте повседневные задачи на Bash и разберите типичные сбои сервиса — от занятого порта до переполненного диска.
