Архивы и сжатие: tar, gzip, zip

Архивы и сжатие в Linux: tar, gzip, bzip2, zip, unzip — как упаковывать, распаковывать и сжимать файлы и каталоги.

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

tar — архивирование

tar (Tape ARchive) объединяет файлы в один архив без сжатия. Ключи комбинируются:

Флаг

Значение

-c

create — создать архив

-x

extract — распаковать

-t

list — показать содержимое

-v

verbose — показывать файлы

-f

file — имя архива (обязателен)

-z

сжать через gzip (.tar.gz)

-j

сжать через bzip2 (.tar.bz2)

-J

сжать через xz (.tar.xz)

# Создать архив из каталога myproject
tar -cvf myproject.tar myproject/

# Создать сжатый архив .tar.gz
tar -czvf myproject.tar.gz myproject/

# Посмотреть содержимое архива (не распаковывая)
tar -tzvf myproject.tar.gz

# Распаковать в текущий каталог
tar -xzvf myproject.tar.gz

# Распаковать в указанный каталог
tar -xzvf myproject.tar.gz -C /home/alice/

Вывод tar -tzvf (фрагмент):

drwxr-xr-x alice/alice     0 2024-06-10 12:00 myproject/
-rw-r--r-- alice/alice  1024 2024-06-10 12:00 myproject/main.py
-rw-r--r-- alice/alice   256 2024-06-10 12:00 myproject/README.md

Запомните мнемонику: create, extract, table of contents — три главных режима tar. Флаг -f всегда должен быть последним перед именем файла.

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

# Сжать файл (оригинал удаляется, создаётся .gz)
gzip access.log

# Распаковать .gz файл
gunzip access.log.gz
# или
gzip -d access.log.gz

# Сжать с сохранением оригинала
gzip -k access.log

# Посмотреть содержимое .gz без распаковки
zcat access.log.gz | head -20

Вывод после gzip:

access.log.gz  (создан, оригинал удалён)

zip и unzip — совместимость с Windows

# Создать zip-архив из каталога
zip -r archive.zip myproject/

# Добавить файл в существующий архив
zip archive.zip newfile.txt

# Посмотреть содержимое архива
unzip -l archive.zip

# Распаковать архив
unzip archive.zip

# Распаковать в конкретный каталог
unzip archive.zip -d /home/alice/restore/

Вывод unzip -l:

Archive:  archive.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2024-06-10 12:00   myproject/
     1024  2024-06-10 12:00   myproject/main.py
---------                     -------
     1024                     2 files

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

Формат

Команда создания

Степень сжатия

Скорость

.tar.gz

tar -czvf

средняя

быстро

.tar.bz2

tar -cjvf

лучше

медленнее

.tar.xz

tar -cJvf

максимальная

медленно

.zip

zip -r

средняя

быстро

Частые ошибки

  • tar без -f — без флага -f tar пытается работать с лентой, а не с файлом.
  • gzip удаляет оригинал — если нужно сохранить, используйте -k.
  • zip без -r для каталога — без -r zip создаст архив без содержимого подкаталогов.

Коротко

  • tar -czvf архив.tar.gz каталог/ — создать сжатый архив.
  • tar -xzvf архив.tar.gz -C путь/ — распаковать в указанное место.
  • tar -tzvf архив.tar.gz — посмотреть содержимое без распаковки.
  • gzip файл — сжать файл; gunzip файл.gz — распаковать.
  • zip -r архив.zip каталог/ и unzip архив.zip — для формата ZIP.
Проверьте себя
1. Как создать сжатый архив .tar.gz из каталога myproject?
Atar -xzvf myproject.tar.gz myproject/
Btar -czvf myproject.tar.gz myproject/
Cgzip -r myproject/ myproject.tar.gz
Dzip myproject.tar.gz myproject/
2. Как посмотреть содержимое .tar.gz архива, не распаковывая его?
Atar -xzvf архив.tar.gz
Btar -tzvf архив.tar.gz
Ctar -czvf архив.tar.gz
Dgzip -l архив.tar.gz
3. Что происходит с исходным файлом после gzip access.log?
AФайл остаётся, создаётся копия access.log.gz
BИсходный файл удаляется, создаётся access.log.gz
CФайл сжимается на месте без изменения имени
Dgzip не удаляет файлы никогда
Поддержать проект