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.