Learning Platform
Глоссарий Troubleshooting
Урок 14.03 · 15 мин
Начальный
zipunzipWindowscross-platform

zip и cross-platform обмен

tar.gz, tar.zst — UNIX-native. На Windows у пользователей zip — другой формат. Когда DE нужно обмениваться файлами с не-Linux пользователями (бизнес-клиенты, юристы, marketing) — обычно используется zip.

В этом уроке: zip, unzip, их особенности, и где они нужны DE.


zip vs tar.gz: главные отличия

zip vs tar.gz

Разные форматы для разных целевых аудиторий

zipСоздан в 1989 (PKZIP). Cross-platform (Windows, macOS, Linux). Каждый файл сжат отдельно — можно читать только нужное. Менее efficient compression
tar.gzUNIX-стандарт. Архив + compression. Один solid stream — лучшее compression, но нужно читать всё для извлечения одного файла
zip: per-file compressionКаждый файл сжат отдельно — random access OK, но redundancy между файлами не используется
tar.gz: solid compressionВсе файлы как один поток — лучше сжатие если файлы похожи, но извлечение одного файла = разжать всё
Native в WindowsПроводник Windows открывает .zip встроенным архиватором. Любой пользователь — без дополнительных утилит
Не native в WindowsНужен 7-Zip или WinRAR. Базовый Проводник не понимает .tar.gz

Правило: обмен с не-Linux — используем zip. Внутри Linux/DE-командыtar.gz или tar.zst.


zip — создание

# Установка (Ubuntu/Debian)
sudo apt install zip unzip

# Установка (RHEL/Fedora)
sudo dnf install zip unzip

# Запаковать файл
zip archive.zip file.txt

# Запаковать директорию (recursively)
zip -r archive.zip directory/

# Несколько файлов
zip archive.zip file1.txt file2.csv file3.json

# С компрессией level 9 (default 6)
zip -9 archive.zip large.csv

# Без compression (быстрее, store mode)
zip -0 archive.zip already-compressed.gz

unzip — извлечение

# Базовая распаковка
unzip archive.zip

# В конкретную директорию
unzip archive.zip -d /tmp/extract-here/

# Только конкретные файлы
unzip archive.zip file1.txt file2.csv

# Без перезаписи существующих
unzip -n archive.zip

# С перезаписом без вопросов
unzip -o archive.zip

# Список содержимого
unzip -l archive.zip

# Подробный список (с CRC, modified time)
unzip -v archive.zip

# Тест архива (проверить integrity)
unzip -t archive.zip

Просмотр без распаковки

# Список файлов
unzip -l report.zip

# Output:
#  Archive:  report.zip
#  Length      Date    Time    Name
#  ---------  ---------- -----   ----
#       1024  2026-05-13 14:23   data/users.csv
#       2048  2026-05-13 14:23   data/orders.csv
#       3072  2026-05-13 14:23   data/summary.json
#  ---------                     -------
#       6144                     3 files

# Подробно — с CRC, methods, ratios
unzip -v report.zip

# Прочитать один файл из архива без полной распаковки
unzip -p report.zip data/users.csv
# -p = print to stdout
# Можно сразу в pipe!
unzip -p report.zip data/users.csv | head
unzip -p report.zip data/users.csv | awk -F',' '{print $3}'

Password protection

# Создать с паролем (запросит интерактивно)
zip -e secrets.zip sensitive.txt

# С паролем в команде (видно в history — небезопасно)
zip -P "mypassword" secrets.zip sensitive.txt

# Распаковать
unzip secrets.zip
# Введите пароль

# Или в команде
unzip -P "mypassword" secrets.zip
WARNING

zip encryption — слабая! Используется PKZIP encryption (ZipCrypto) — был сломан в 1990-х. Современный zip также поддерживает AES-256, но это unofficial extension, не все программы поддерживают.

Никогда не используйте zip password для real secrets (database credentials, API keys, customer PII). Для real secrets — GPG, age, или secret manager.

# Лучше: GPG encryption
tar czf - data/ | gpg -c > data.tar.gz.gpg
# Расшифровка
gpg -d data.tar.gz.gpg | tar xzf -

DE-сценарии

1. Получили weekly report как .zip от клиента

# Структура
unzip -l weekly-2026-W19.zip
# data/sales.csv
# data/customers.csv
# data/orders.csv

# Распаковать в data lake
mkdir -p /data/import/weekly-2026-W19
unzip weekly-2026-W19.zip -d /data/import/weekly-2026-W19/

# Или сразу прочитать один файл в pipe для ETL
unzip -p weekly-2026-W19.zip data/sales.csv | \
  awk -F',' 'NR > 1 {sum += $5} END {print "Total sales:", sum}'

2. Подготовка отчёта для бизнеса (они на Windows)

# Сгенерировали отчёт
python generate_report.py > /tmp/report.csv
cp dashboard.png /tmp/

# Запаковать в zip для отправки business-users
zip /tmp/monthly-report-$(date +%Y-%m).zip /tmp/report.csv /tmp/dashboard.png

# Отправить через email или Slack

3. Sharing data dump с partner

# Создать password-protected zip (note: weak, лучше GPG)
zip -re partner-data-2026-05.zip data/ -P "agreedPassword123"

# Передать через secure channel
scp partner-data-2026-05.zip [email protected]:/inbox/

4. Batch обработка ZIPов с веба

# Скачали 12 ZIP файлов
ls
# 2026-01.zip  2026-02.zip ... 2026-12.zip

# Распаковать все в один target
for zip in *.zip; do
  unzip "$zip" -d /tmp/all-data/
done

# Альтернатива — параллельно
ls *.zip | xargs -P 4 -I {} unzip {} -d /tmp/all-data/

Подводные камни

1. Структура внутри zip

ZIP — flat archive (каждый файл с полным path), без концепции «top-level директории». Создавая, обращай внимание:

# Плохо — все файлы окажутся в текущей директории при распаковке
cd /tmp/data
zip ../data.zip *.csv
unzip data.zip      # все CSV в текущую директорию, mess

# Хорошо — обернуть в директорию
cd /tmp
zip -r data.zip data/
unzip data.zip      # создаст data/ с файлами внутри

2. Большие файлы (> 4GB) и ZIP64

Старый формат ZIP ограничен 4GB на файл. Современные zip-утилиты используют ZIP64 extension — без лимита. Но если получатель использует старый софт (например, ZIP-tools из 2010-х на Windows XP) — могут быть проблемы.

# Проверить, использует ли архив ZIP64
unzip -l huge.zip | head
# Если упоминается ZIP64 — нужны современные tools на receiving stronе

Для файлов > 4GB лучше использовать tar.gz или tar.zst.

ZIP менее богат метаданными, чем tar:

  • Symlinks: zip может хранить как файл-с-таргетом, но не все unzip-утилиты respect это.
  • Permissions: zip хранит, но Windows-утилиты часто их игнорируют.

Если важно сохранить symlinks и unix permissions — используйте tar.gz, не zip.


7z и rar — другие cross-platform форматы

Бывают у получателей. Для extract:

# 7z (нужен p7zip)
sudo apt install p7zip-full
7z x archive.7z

# RAR — пакет unrar
sudo apt install unrar
unrar x archive.rar

В DE-сценариях встречаются редко. ZIP — стандарт для обмена.


ZIP vs tar.gz — сравнительная таблица для DE

Когда что использовать

Принятие решения для типичных DE-задач

Backup кода/configsВнутри команды, на Linux серверах. Compression важна. Symlinks могут быть
Daily backup БДStreaming через pg_dump | gzip. Один файл. Внутреннее использование
Report для бизнесаПолучатели на Windows/macOS. CSV + PNG. Не критично compression. Совместимость важна
Получили от клиентаЧто прислали в zip — распакуй. Не воюй с форматом — он стандартный для бизнеса
Software distributionPython пакеты — .tar.gz. Linux kernel — .tar.xz
Archive logs long-termДля archival storage компактность важнее скорости

Попробуй сам

# 1. Создать тестовую структуру
mkdir -p /tmp/zip-test/data
echo "name,value" > /tmp/zip-test/data/file1.csv
echo "alice,100" >> /tmp/zip-test/data/file1.csv
echo "bob,200" >> /tmp/zip-test/data/file1.csv
echo "more,data" > /tmp/zip-test/data/file2.csv

# 2. Запаковать
cd /tmp/zip-test
zip -r data.zip data/
ls -lh data.zip

# 3. Просмотр
unzip -l data.zip
unzip -v data.zip

# 4. Прочитать один файл без распаковки
unzip -p data.zip data/file1.csv

# 5. Распаковка в другую директорию
unzip data.zip -d /tmp/extracted/
ls -R /tmp/extracted/

# 6. С паролем
zip -e secret.zip data/file1.csv
# Введи пароль

unzip secret.zip -d /tmp/secret-extract/
# Введи пароль

# 7. Сравнить размеры
zip -9 max.zip data/file1.csv
zip -0 store.zip data/file1.csv
gzip -k -9 -c data/file1.csv > min.gz
ls -lh max.zip store.zip min.gz data/file1.csv

# 8. Cleanup
rm -rf /tmp/zip-test /tmp/extracted /tmp/secret-extract

Cross-link: предыдущий урок 02 — gzip/zstd/xz. Следующий урок 04 — production workflows. Модуль 11 — передача файлов через rsync/scp.


Проверка знанийKnowledge check
Senior говорит: «Biznes-команда прислала ZIP от внешнего partner с PII-данными, защищён password. Распакуй и положи в data lake.» Какие шаги и какие риски учесть?
ОтветAnswer
Шаги: 1) unzip -P "password" partner-data.zip -d /tmp/import/ (или интерактивно unzip partner.zip — введёшь пароль). 2) Просмотреть структуру: ls -R /tmp/import/. 3) Проверить файлы на malware (если есть AV scanner, или хотя бы file *.csv — должны быть CSV/JSON, а не executables). 4) Двинуть в data lake с правильными permissions: mv /tmp/import/* /data/lake/imports/$(date +%F)/. 5) chmod 640 на CSVs — read для группы, остальные ничего. 6) Очистить /tmp/import/. Риски и важные моменты: 1) ZIP encryption (ZipCrypto) — слабый, был сломан в 1990-х. Если ZIP с password содержит PII, это compliance issue (GDPR/HIPAA): шифрование считается inadequate. Senior должен знать, что в production нужно re-encrypt через GPG/age для at-rest safety. 2) PII лимиты доступа — кто может видеть /data/lake/imports/? Нужны правильные ACLs/permissions. 3) Audit trail — кто и когда импортировал. Залогировать в audit log. 4) Сохранить original ZIP с pass отдельно для compliance audit. 5) Если PII попадает в downstream pipelines — нужно ли masking/tokenization? Это особенно важно для analytics workflows. 6) Никогда не commit-ить ZIP-пароли в git. Использовать secret manager или env vars. 7) Очистка temp: rm всё в /tmp после импорта, не оставлять копий PII в shared local space.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Когда DE стоит использовать .zip вместо .tar.gz?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4