Tar, gzip и zip

Tar, gzip и zip — инструменты для упаковки и сжатия файлов.

tar объединяет несколько файлов в один архив, gzip сжимает отдельный поток или файл, а zip одновременно упаковывает и сжимает набор файлов.

Руководство ориентировано на Linux и macOS. Большинство ZIP-архивов также совместимо с Windows.

Содержание

Основные различия

Инструмент Упаковывает несколько файлов Сжимает данные Типичное применение
tar Да Нет, если не подключён компрессор Резервные копии и Unix-архивы
gzip Нет Да Сжатие одного файла или потока
tar + gzip Да Да Архивы .tar.gz и .tgz
zip Да Да Обмен файлами между разными ОС
unzip Нет Распаковывает ZIP Просмотр и извлечение .zip

Главное различие:

tar  → объединяет файлы
gzip → сжимает данные
zip  → объединяет и сжимает файлы

Команда:

tar -cf archive.tar project/

создаёт несжатый архив.

Команда:

gzip archive.tar

сжимает его и создаёт:

archive.tar.gz

Обычно эти две операции объединяют:

tar -czf archive.tar.gz project/

Расширения архивов

Расширение Формат
.tar Несжатый tar-архив
.tar.gz Tar, сжатый gzip
.tgz Короткое имя для .tar.gz
.gz Отдельный файл, сжатый gzip
.zip ZIP-архив
.tar.bz2 Tar, сжатый bzip2
.tar.xz Tar, сжатый xz
.tar.zst Tar, сжатый Zstandard

Расширение помогает определить ожидаемый формат, но не гарантирует его. Проверить фактический тип файла можно командой:

file archive.tar.gz

Tar

tar изначально создавался для записи файлов на магнитные ленты. Название происходит от tape archive.

Tar сохраняет внутри архива:

Основной синтаксис:

tar OPTIONS ARCHIVE FILES

Наиболее часто используются параметры:

Параметр Назначение
-c Создать архив
-x Извлечь файлы
-t Показать содержимое
-f FILE Указать файл архива
-v Выводить имена обрабатываемых файлов
-z Использовать gzip
-C DIR Перейти в каталог
--exclude=PATTERN Исключить файлы
-r Добавить файлы в несжатый tar
-u Добавить только более новые версии
--delete Удалить запись из архива в GNU tar

После -f должно следовать имя архива:

tar -czf archive.tar.gz project/

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

-cf     создать .tar
-czf    создать .tar.gz
-tf     показать содержимое
-xf     извлечь .tar
-xzf    извлечь .tar.gz

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

Архивирование одного файла

tar -cf report.tar report.txt

Архивирование каталога

tar -cf project.tar project/

Архивирование нескольких файлов

tar -cf documents.tar report.txt notes.txt table.csv

Архивирование нескольких каталогов

tar -cf backup.tar documents/ photos/ configuration/

Подробный вывод

tar -cvf project.tar project/

Параметр -v выводит имена добавляемых файлов.

Архив без внешнего родительского каталога

Команда:

tar -cf project.tar project/

сохраняет каталог project как верхний элемент архива.

Чтобы поместить в архив только его содержимое:

tar -cf project.tar -C project .

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

project/
project/src/
project/src/main.py

Во втором:

./
./src/
./src/main.py

Архивирование абсолютного пути

Не рекомендуется сохранять абсолютные пути:

tar -cf backup.tar /home/alice/documents

GNU tar обычно удаляет начальный / и сообщает:

Removing leading '/' from member names

Более управляемый вариант:

tar -cf backup.tar -C /home/alice documents

В архиве будет путь:

documents/

а не:

/home/alice/documents/

Просмотр tar-архивов

Показать содержимое:

tar -tf archive.tar

Подробный список:

tar -tvf archive.tar

Для .tar.gz:

tar -tzf archive.tar.gz

Современные версии tar часто автоматически определяют алгоритм сжатия при чтении:

tar -tf archive.tar.gz

Найти конкретные записи:

tar -tf archive.tar.gz | grep 'config'

Для имён с необычными символами надёжнее использовать встроенное сопоставление tar:

tar -tf archive.tar.gz --wildcards '*config*'

Распаковка tar-архивов

Распаковка в текущий каталог

tar -xf archive.tar

Для gzip-сжатого архива:

tar -xzf archive.tar.gz

Многие современные реализации умеют определять сжатие автоматически:

tar -xf archive.tar.gz

Распаковка в указанный каталог

Каталог должен существовать:

mkdir -p destination
tar -xf archive.tar -C destination

Для .tar.gz:

mkdir -p destination
tar -xzf archive.tar.gz -C destination

Подробный вывод при распаковке

tar -xvf archive.tar

Или:

tar -xzvf archive.tar.gz

Удаление верхнего уровня каталога

Если архив имеет структуру:

project-1.0/
project-1.0/src/
project-1.0/README.md

можно убрать первый компонент пути:

mkdir -p project
tar -xf project-1.0.tar.gz \
  -C project \
  --strip-components=1

Результат:

project/
├── src/
└── README.md

Если число компонентов указано неверно, некоторые файлы могут быть пропущены. Сначала проверьте структуру:

tar -tf project-1.0.tar.gz | head

Сжатые tar-архивы

Создание .tar.gz

tar -czf archive.tar.gz project/

С подробным выводом:

tar -czvf archive.tar.gz project/

Распаковка .tar.gz

tar -xzf archive.tar.gz

В отдельный каталог:

mkdir -p destination
tar -xzf archive.tar.gz -C destination

Просмотр .tar.gz

tar -tzf archive.tar.gz

Сжатие с помощью внешнего gzip

Сначала создать tar:

tar -cf archive.tar project/

Затем сжать:

gzip archive.tar

Получится:

archive.tar.gz

Обратная операция:

gunzip archive.tar.gz
tar -xf archive.tar

Управление уровнем gzip-сжатия

У gzip есть уровни от 1 до 9:

-1    быстрее, но слабее сжатие
-6    стандартный уровень
-9    медленнее, но обычно лучшее сжатие

Передать уровень gzip через GNU tar можно с помощью переменной окружения:

GZIP=-9 tar -czf archive.tar.gz project/

Более явный потоковый вариант:

tar -cf - project/ | gzip -9 > archive.tar.gz

Распаковка такого архива:

gzip -dc archive.tar.gz | tar -xf -

Выборочное извлечение

Сначала посмотрите точные пути:

tar -tf archive.tar.gz

Извлечь один файл:

tar -xzf archive.tar.gz project/README.md

Извлечь каталог:

tar -xzf archive.tar.gz project/config/

Извлечь несколько файлов:

tar -xzf archive.tar.gz \
  project/README.md \
  project/config/app.conf

Путь должен совпадать с записью внутри архива.

Извлечение по шаблону

GNU tar:

tar -xzf archive.tar.gz --wildcards '*.log'

Извлечь все файлы с расширением .conf:

tar -xzf archive.tar.gz --wildcards '*.conf'

Чтобы оболочка не раскрыла шаблон заранее, заключайте его в кавычки.

Исключение файлов

Исключение по шаблону

tar -czf project.tar.gz \
  --exclude='*.log' \
  project/

Исключить каталог:

tar -czf project.tar.gz \
  --exclude='project/node_modules' \
  project/

Несколько исключений:

tar -czf project.tar.gz \
  --exclude='project/node_modules' \
  --exclude='project/.git' \
  --exclude='*.log' \
  project/

Файл со списком исключений

Файл exclude.txt:

project/node_modules
project/.git
*.log
*.tmp

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

tar -czf project.tar.gz \
  --exclude-from=exclude.txt \
  project/

Короткий вариант:

tar -czf project.tar.gz -X exclude.txt project/

Исключение самого архива

Не создавайте архив внутри архивируемого каталога без исключения:

tar -czf project/backup.tar.gz project/

Архив может попытаться включить самого себя.

Безопаснее создать его снаружи:

tar -czf project-backup.tar.gz project/

Либо явно исключить:

tar -czf project/backup.tar.gz \
  --exclude='project/backup.tar.gz' \
  project/

Добавление и обновление файлов в tar

Эти операции обычно применяются только к несжатым tar-архивам.

Добавление файла

tar -rf archive.tar new-file.txt

Добавление каталога

tar -rf archive.tar additional-files/

Добавление только более новых файлов

tar -uf archive.tar project/

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

GNU tar:

tar --delete -f archive.tar path/in/archive.txt

Операции -r, -u и --delete обычно нельзя напрямую использовать для .tar.gz, потому что сжатый архив представляет собой единый поток.

Для изменения .tar.gz надёжнее:

  1. распаковать архив;
  2. изменить файлы;
  3. создать новый архив.

Пример:

mkdir archive-work
tar -xzf archive.tar.gz -C archive-work
cp new-file.txt archive-work/
tar -czf archive-new.tar.gz -C archive-work .

Права, владельцы и атрибуты

Сохранение прав

Tar обычно сохраняет права файлов внутри архива. При распаковке поведение зависит от пользователя и параметров.

Обычная распаковка:

tar -xf archive.tar

Сохранение записанных прав:

tar -xpf archive.tar

Параметр -p особенно актуален при восстановлении системных резервных копий от root.

Владельцы файлов

При извлечении от обычного пользователя файлы обычно становятся собственностью этого пользователя.

При извлечении от root tar может восстановить числовых владельцев из архива. Для недоверенного архива это нежелательно.

Не восстанавливать владельца из архива:

tar --no-same-owner -xf archive.tar

При создании переносимого архива можно нормализовать владельцев в GNU tar:

tar -czf archive.tar.gz \
  --owner=0 \
  --group=0 \
  --numeric-owner \
  project/

Символические ссылки

По умолчанию tar архивирует саму символическую ссылку, а не содержимое объекта, на который она указывает.

Пример:

current -> releases/1.0

В архив обычно попадёт ссылка current.

Чтобы разыменовывать ссылки и архивировать целевые файлы:

tar -chzf archive.tar.gz project/

Параметр -h или --dereference требует осторожности:

Gzip

gzip сжимает один файл или поток данных. Он не хранит структуру каталогов и не объединяет несколько файлов в один логический архив.

Команда:

gzip report.txt

обычно:

  1. создаёт report.txt.gz;
  2. удаляет исходный report.txt.

Чтобы сохранить исходный файл, используйте -k.

Основные команды:

Команда Назначение
gzip FILE Сжать файл
gzip -k FILE Сжать и сохранить оригинал
gzip -d FILE.gz Распаковать
gunzip FILE.gz Распаковать
gzip -c FILE Вывести сжатые данные в stdout
gzip -dc FILE.gz Вывести распакованные данные в stdout
zcat FILE.gz Показать распакованное содержимое
zless FILE.gz Просмотреть через less
gzip -t FILE.gz Проверить целостность
gzip -l FILE.gz Показать информацию о сжатии

Сжатие и распаковка gzip

Сжать файл

gzip report.txt

Результат:

report.txt.gz

Исходный report.txt обычно удаляется.

Сохранить исходный файл

gzip -k report.txt

Останутся оба файла:

report.txt
report.txt.gz

Уровень сжатия

Быстрое сжатие:

gzip -1 large.log

Максимальный стандартный уровень:

gzip -9 large.log

Уровень по умолчанию:

gzip -6 large.log

Распаковать файл

gunzip report.txt.gz

Эквивалент:

gzip -d report.txt.gz

Обычно создаётся report.txt, а .gz удаляется.

Сохранить .gz:

gzip -dk report.txt.gz

Принудительная перезапись

gzip -f report.txt

Параметр -f может перезаписать существующий файл, поэтому его следует использовать осторожно.

Показать статистику

gzip -l report.txt.gz

Пример полей:

compressed
uncompressed
ratio
uncompressed_name

Сжатие нескольких файлов

gzip file1.txt file2.txt file3.txt

Будут созданы отдельные файлы:

file1.txt.gz
file2.txt.gz
file3.txt.gz

Это не единый архив. Чтобы получить один файл, используйте tar:

tar -czf files.tar.gz file1.txt file2.txt file3.txt

Работа gzip с потоками

Сжать без удаления исходника

gzip -c report.txt > report.txt.gz

Распаковать в другой файл

gzip -dc report.txt.gz > restored-report.txt

Вывести содержимое

zcat report.txt.gz

Эквивалент:

gzip -dc report.txt.gz

Просмотреть большой журнал

zless application.log.gz

Поиск по сжатому тексту:

zgrep 'ERROR' application.log.gz

Без учёта регистра:

zgrep -i 'error' application.log.gz

Создать .tar.gz через конвейер

tar -cf - project/ | gzip -9 > project.tar.gz

Здесь - означает стандартный поток вывода.

Распаковать поток

gzip -dc project.tar.gz | tar -xf -

Сжать вывод команды

journalctl --since yesterday | gzip > journal.log.gz

Распаковать и передать другой команде

gzip -dc access.log.gz | grep ' 500 '

Zip и unzip

Формат ZIP одновременно хранит несколько файлов и сжимает их. Каждый файл обычно сжимается отдельно, поэтому отдельные элементы можно извлекать без распаковки всего архива.

ZIP удобен для:

По сравнению с tar ZIP может хуже сохранять некоторые Unix-метаданные:

Для системных резервных копий Linux обычно предпочтительнее tar.

Установка zip и unzip

Ubuntu и Debian:

sudo apt update
sudo apt install zip unzip

Fedora:

sudo dnf install zip unzip

Arch Linux:

sudo pacman -S zip unzip

Проверка:

zip -v
unzip -v

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

Архивирование одного файла

zip archive.zip report.txt

Архивирование нескольких файлов

zip documents.zip report.txt notes.txt table.csv

Архивирование каталога

zip -r project.zip project/

Параметр -r рекурсивно обходит каталоги.

Архивирование содержимого каталога

Если выполнить:

zip -r project.zip project/

верхним элементом архива будет project/.

Чтобы добавить только содержимое:

cd project
zip -r ../project.zip .

Либо в подоболочке:

(
  cd project
  zip -r ../project.zip .
)

Уровень сжатия

Без сжатия:

zip -0 archive.zip large-file.bin

Максимальный стандартный уровень:

zip -9 archive.zip report.txt

Уровень по умолчанию обычно является компромиссом между скоростью и размером.

Для уже сжатых форматов, например JPEG, MP4 или .gz, повторное сжатие часто почти не уменьшает размер:

zip -0 media.zip photo.jpg video.mp4

Исключение файлов

zip -r project.zip project/ \
  -x 'project/.git/*' \
     'project/node_modules/*' \
     '*.log'

Шаблоны следует заключать в кавычки, чтобы их не раскрыла оболочка.

Чтение списка файлов из stdin

find project -type f -name '*.txt' -print |
  zip text-files.zip -@

Обычный zip -@ читает по одному имени файла на строку. Имена с переводами строк могут обрабатываться некорректно.

Просмотр и распаковка ZIP

Показать содержимое

unzip -l archive.zip

Более подробная информация:

zipinfo archive.zip

Краткий список:

zipinfo -1 archive.zip

Распаковать в текущий каталог

unzip archive.zip

Распаковать в отдельный каталог

unzip archive.zip -d destination

Если каталога нет, unzip обычно создаст его.

Извлечь один файл

unzip archive.zip project/README.md

Извлечь несколько файлов

unzip archive.zip \
  project/README.md \
  project/config/app.conf

Извлечь файлы по шаблону

unzip archive.zip '*.txt'

Исключить файлы при распаковке

unzip archive.zip -x '*.log' '*/cache/*'

Не перезаписывать существующие файлы

unzip -n archive.zip

Перезаписывать без вопросов

unzip -o archive.zip

Параметр -o может уничтожить локальные изменения, поэтому используйте его осторожно.

Вывести файл в stdout

unzip -p archive.zip project/README.md

Просмотр через less:

unzip -p archive.zip project/README.md | less

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

Добавление файла

Если архив уже существует:

zip archive.zip new-file.txt

Файл будет добавлен или заменён.

Обновление изменившихся файлов

zip -u archive.zip report.txt notes.txt

Рекурсивное обновление каталога:

zip -ur project.zip project/

Синхронизация содержимого

zip -rFS project.zip project/

Параметр -FS синхронизирует архив с текущим набором файлов:

Перед применением к важному архиву сделайте резервную копию.

Удаление файла из ZIP

zip -d archive.zip path/in/archive.txt

Удаление по шаблону:

zip -d archive.zip '*.log'

Перемещение файлов в архив

zip -m archive.zip report.txt

После успешного добавления исходный файл удаляется. Используйте -m осторожно.

Пароли и шифрование ZIP

Запрос пароля интерактивно

zip -e private.zip document.txt

Для каталога:

zip -er private.zip private-directory/

Команда запросит пароль без отображения его в командной строке.

Не рекомендуется передавать пароль через параметр -P:

zip -P password archive.zip file.txt

Пароль может попасть:

Ограничения стандартного ZIP-шифрования

Классическая команда zip -e часто использует устаревшее шифрование ZipCrypto. Оно не подходит для надёжной защиты конфиденциальных данных.

Для чувствительных данных лучше применять инструменты с современным шифрованием, например:

Пример с GPG:

tar -czf - private-directory/ |
  gpg --symmetric --cipher-algo AES256 \
      --output private.tar.gz.gpg

Расшифровка и распаковка:

gpg --decrypt private.tar.gz.gpg |
  tar -xzf -

Не передавайте пароль через аргументы командной строки.

Проверка целостности

Проверка gzip

gzip -t archive.tar.gz

При успехе команда обычно ничего не выводит.

Показать результат явно:

gzip -t archive.tar.gz && echo 'gzip: архив исправен'

Подробная проверка:

gzip -tv archive.tar.gz

Проверка tar.gz

Проверка gzip-слоя:

gzip -t archive.tar.gz

Попытка прочитать структуру tar:

tar -tzf archive.tar.gz >/dev/null

Общая проверка:

gzip -t archive.tar.gz &&
  tar -tzf archive.tar.gz >/dev/null &&
  echo 'Архив читается'

Проверка ZIP

unzip -t archive.zip

Проверка без подробного списка:

unzip -tq archive.zip

Контрольная сумма

Создать SHA-256:

sha256sum archive.tar.gz > archive.tar.gz.sha256

Проверить:

sha256sum -c archive.tar.gz.sha256

В macOS обычно используется:

shasum -a 256 archive.tar.gz

Контрольная сумма обнаруживает изменение файла, но сама по себе не подтверждает доверенность источника.

Разбиение архивов на части

Разделение tar.gz через split

Создать архив и разбить на части по 1 ГиБ:

tar -czf - project/ |
  split -b 1G - project.tar.gz.part-

Получатся файлы:

project.tar.gz.part-aa
project.tar.gz.part-ab
project.tar.gz.part-ac

Собрать и распаковать без промежуточного файла:

cat project.tar.gz.part-* | tar -xzf -

Собрать архив:

cat project.tar.gz.part-* > project.tar.gz

Порядок частей должен быть правильным.

Разделённый ZIP-архив

Создать ZIP с частями по 1 ГиБ:

zip -r -s 1g project.zip project/

Получатся файлы:

project.z01
project.z02
project.zip

Для корректной распаковки нужны все части.

Поддержка разделённых ZIP-архивов зависит от программы распаковки. При проблемах можно преобразовать архив в обычный:

zip -s 0 project.zip --out project-full.zip

Затем:

unzip project-full.zip

Архивация через SSH

Создание локального архива удалённого каталога

ssh alice@example.com \
  'tar -czf - /var/www/app' \
  > app-backup.tar.gz

Чтобы не сохранять полный абсолютный путь:

ssh alice@example.com \
  'tar -czf - -C /var/www app' \
  > app-backup.tar.gz

Передача локального каталога на сервер

tar -czf - project/ |
  ssh alice@example.com \
  'cat > project.tar.gz'

Передача с одновременной распаковкой

tar -czf - project/ |
  ssh alice@example.com \
  'mkdir -p /srv/projects && tar -xzf - -C /srv/projects'

Получение архива и немедленная распаковка

ssh alice@example.com \
  'tar -czf - -C /var/www app' |
  tar -xzf -

При потоковой передаче архив не сохраняется локально. Если соединение прервётся, операцию придётся повторить.

Безопасная распаковка

Архив может содержать:

Перед распаковкой недоверенного архива всегда просматривайте содержимое.

Для tar:

tar -tf archive.tar.gz

Для ZIP:

unzip -l archive.zip

Распаковывайте в новый пустой каталог:

mkdir -p archive-review
tar --no-same-owner -xf archive.tar.gz -C archive-review

Или:

mkdir -p archive-review
unzip archive.zip -d archive-review

После этого проверьте результат:

find archive-review -maxdepth 3 -ls

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

При распаковке tar от root используйте:

tar --no-same-owner --no-same-permissions \
  -xf archive.tar.gz \
  -C archive-review

Точная защита от опасных путей зависит от реализации и версии архиватора. Для особо недоверенных файлов используйте изолированное окружение.

Устранение неполадок

tar: This does not look like a tar archive

Проверьте фактический формат:

file archive

Возможно, файл:

Для обычного .gz:

gzip -dc file.gz > file

Для .tar.gz:

tar -xzf archive.tar.gz

gzip: stdin: not in gzip format

Файл не является gzip-потоком либо повреждён:

file archive.tar.gz
gzip -t archive.tar.gz

Иногда файл имеет расширение .tar.gz, но фактически является несжатым tar:

tar -tf archive.tar.gz

gzip: unexpected end of file

Архив, вероятно, обрезан или загружен не полностью.

Проверьте размер и контрольную сумму:

ls -lh archive.tar.gz
sha256sum archive.tar.gz
gzip -t archive.tar.gz

tar: ... Cannot open: No such file or directory

Проверьте текущий каталог:

pwd
ls -la

Используйте абсолютный путь:

tar -xf /home/alice/downloads/archive.tar.gz

Каталог для tar -C не существует

Команда tar обычно не создаёт целевой каталог автоматически:

mkdir -p destination
tar -xf archive.tar.gz -C destination

Из архива не извлекается конкретный файл

Проверьте точное имя:

tar -tf archive.tar.gz

Например, в архиве может быть:

./project/README.md

Тогда команда должна использовать именно такой путь:

tar -xzf archive.tar.gz ./project/README.md

zip warning: name not matched

Указанный файл не найден либо шаблон был неправильно раскрыт оболочкой.

Проверьте:

ls -la path/to/file

Заключайте шаблоны в кавычки:

zip archive.zip '*.txt'

Если файлы находятся во вложенных каталогах:

zip -r archive.zip project/ -i '*.txt'

Неправильно отображаются имена файлов в ZIP

Причиной может быть несовпадение кодировок имён файлов, особенно в старых архивах.

Посмотреть локаль:

locale

Современные ZIP-архивы обычно используют UTF-8, но старые архивы могут хранить имена в другой кодировке. Возможности преобразования зависят от версии unzip.

Архив получился почти такого же размера

Некоторые форматы уже используют сжатие:

Повторное сжатие таких файлов обычно даёт небольшой эффект или увеличивает размер.

Сравнить размеры:

du -sh project/
ls -lh project.tar.gz project.zip

Недостаточно места при распаковке

Размер сжатого архива может быть намного меньше распакованных данных.

Проверить свободное место:

df -h

Для gzip посмотреть ожидаемый несжатый размер:

gzip -l file.gz

Для ZIP:

unzip -l archive.zip

Для tar.gz точный суммарный размер можно оценить по списку:

tar -tvf archive.tar.gz

Файл начинается с дефиса

Имя вроде -report.txt может быть воспринято как параметр.

Используйте --:

tar -cf archive.tar -- -report.txt
gzip -- -report.txt
zip archive.zip -- -report.txt

Либо укажите путь:

tar -cf archive.tar ./-report.txt

Шпаргалка

Tar

Действие Команда
Создать .tar tar -cf archive.tar directory/
Создать с подробным выводом tar -cvf archive.tar directory/
Показать содержимое tar -tf archive.tar
Распаковать tar -xf archive.tar
Распаковать в каталог tar -xf archive.tar -C destination/
Добавить файл tar -rf archive.tar file.txt
Добавить новые версии tar -uf archive.tar directory/
Исключить файлы tar -cf archive.tar --exclude='*.log' directory/

Tar и gzip

Действие Команда
Создать .tar.gz tar -czf archive.tar.gz directory/
Показать содержимое tar -tzf archive.tar.gz
Распаковать tar -xzf archive.tar.gz
Распаковать в каталог tar -xzf archive.tar.gz -C destination/
Извлечь один файл tar -xzf archive.tar.gz path/in/archive
Убрать верхний каталог tar -xzf archive.tar.gz --strip-components=1
Проверить gzip-слой gzip -t archive.tar.gz

Gzip

Действие Команда
Сжать файл gzip file.txt
Сжать и сохранить оригинал gzip -k file.txt
Максимальное сжатие gzip -9 file.txt
Распаковать gunzip file.txt.gz
Распаковать и сохранить .gz gzip -dk file.txt.gz
Вывести содержимое zcat file.txt.gz
Просмотреть через less zless file.txt.gz
Поиск в сжатом файле zgrep 'text' file.txt.gz
Проверить целостность gzip -t file.txt.gz

Zip

Действие Команда
Создать ZIP zip archive.zip file.txt
Добавить несколько файлов zip archive.zip file1 file2
Архивировать каталог zip -r archive.zip directory/
Максимальное сжатие zip -9 -r archive.zip directory/
Исключить файлы zip -r archive.zip directory/ -x '*.log'
Обновить архив zip -ur archive.zip directory/
Удалить файл из архива zip -d archive.zip path/in/archive
Создать архив с паролем zip -er archive.zip directory/

Unzip

Действие Команда
Показать содержимое unzip -l archive.zip
Распаковать unzip archive.zip
Распаковать в каталог unzip archive.zip -d destination/
Извлечь один файл unzip archive.zip path/in/archive
Не перезаписывать файлы unzip -n archive.zip
Перезаписывать без вопросов unzip -o archive.zip
Вывести файл в stdout unzip -p archive.zip path/in/archive
Проверить целостность unzip -t archive.zip

Минимум для запоминания

tar -cf archive.tar directory/          создать tar
tar -xf archive.tar                     распаковать tar
tar -tf archive.tar                     показать содержимое tar

tar -czf archive.tar.gz directory/      создать tar.gz
tar -xzf archive.tar.gz                 распаковать tar.gz
tar -tzf archive.tar.gz                 показать содержимое tar.gz

gzip -k file.txt                        создать file.txt.gz
gunzip file.txt.gz                      распаковать gzip
gzip -t file.txt.gz                     проверить gzip

zip -r archive.zip directory/           создать ZIP
unzip -l archive.zip                    показать содержимое ZIP
unzip archive.zip -d destination/       распаковать ZIP
unzip -t archive.zip                    проверить ZIP

Главное правило: tar объединяет файлы, gzip сжимает один файл или поток, а zip выполняет упаковку и сжатие одновременно. Перед распаковкой неизвестного архива просмотрите его содержимое и извлекайте файлы в отдельный пустой каталог.