Gymterview
junior

Как архивировать и сжимать файлы?

Архивация — это объединение нескольких файлов и директорий в один файл (архив), а сжатие — уменьшение размера данных с помощью алгоритма компрессии. В Linux эти операции часто разделены: tar архивирует, а gzip/bzip2/xz сжимают, хотя tar умеет вызывать их автоматически.

tar (Tape Archive) — архивация

Пример
# Создать архив
tar -cf archive.tar dir/          # -c create, -f file
tar -cf archive.tar file1 file2   # Несколько файлов

# Создать архив с gzip-сжатием (.tar.gz или .tgz)
tar -czf archive.tar.gz dir/      # -z = gzip

# Создать архив с bzip2-сжатием (.tar.bz2)
tar -cjf archive.tar.bz2 dir/     # -j = bzip2

# Создать архив с xz-сжатием (.tar.xz)
tar -cJf archive.tar.xz dir/      # -J = xz

# Просмотреть содержимое архива
tar -tf archive.tar.gz             # -t = list
tar -tvf archive.tar.gz            # С подробной информацией

# Распаковать
tar -xf archive.tar.gz             # -x = extract (автоопределение сжатия)
tar -xf archive.tar.gz -C /opt/    # Распаковать в конкретную директорию
tar -xf archive.tar.gz file.txt    # Извлечь конкретный файл

# Verbose (показать процесс)
tar -xvf archive.tar.gz            # -v = verbose

Мнемоника для tar: create, extract, list, z = gzip, j = bzip2, J = xz, f = file.

gzip / gunzip — сжатие отдельных файлов

Пример
gzip file.txt                     # Сжать → file.txt.gz (оригинал удаляется!)
gzip -k file.txt                  # Сжать, сохранив оригинал (-k = keep)
gzip -9 file.txt                  # Максимальное сжатие (медленнее)
gunzip file.txt.gz                # Распаковать
gzip -d file.txt.gz               # Распаковать (альтернатива)
zcat file.txt.gz                  # Просмотреть сжатый файл без распаковки

zip / unzip — формат ZIP (кроссплатформенный)

Пример
zip archive.zip file1 file2       # Создать ZIP
zip -r archive.zip directory/     # Рекурсивно (-r)
zip -e archive.zip file.txt       # С паролем (-e)
unzip archive.zip                 # Распаковать
unzip archive.zip -d /opt/        # Распаковать в конкретную директорию
unzip -l archive.zip              # Просмотреть содержимое
unzip -o archive.zip              # Перезаписать без подтверждений

Сравнение алгоритмов сжатия

Алгоритм Скорость сжатия Степень сжатия Распространённость
gzip Быстрый Средняя Самый распространённый в Linux
bzip2 Медленный Хорошая Устаревает, заменяется на xz
xz Самый медленный Лучшая Ядро Linux, пакеты дистрибутивов
zip Быстрый Средняя Кроссплатформенный стандарт

Практические примеры

Пример
# Архивация логов старше 30 дней
find /var/log/app -name "*.log" -mtime +30 -exec gzip {} \;

# Бэкап проекта с исключениями
tar -czf backup.tar.gz \
    --exclude='target' \
    --exclude='.git' \
    --exclude='node_modules' \
    project/

# Распаковка Spring Boot fat JAR (JAR — это ZIP-архив)
unzip -l app.jar
unzip app.jar -d extracted/

На собеседовании: достаточно уверенно владеть tar -czf / tar -xf и знать разницу между архивацией и сжатием. Полезно упомянуть, что JAR/WAR-файлы Java — это ZIP-архивы, и их можно исследовать через unzip -l.