Архивы и сжатие: tar, gzip, zip
Архивы и сжатие в Linux: tar, gzip, bzip2, zip, unzip — как упаковывать, распаковывать и сжимать файлы и каталоги.
Архивирование объединяет несколько файлов в один. Сжатие уменьшает его размер. В Linux чаще всего используют комбинацию
tar+gzip(файлы.tar.gz), а для обмена с Windows —zip.
tar — архивирование
tar (Tape ARchive) объединяет файлы в один архив без сжатия. Ключи комбинируются:
Флаг | Значение |
| create — создать архив |
| extract — распаковать |
| list — показать содержимое |
| verbose — показывать файлы |
| file — имя архива (обязателен) |
| сжать через gzip (.tar.gz) |
| сжать через bzip2 (.tar.bz2) |
| сжать через 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 — без флага
-ftar пытается работать с лентой, а не с файлом. - gzip удаляет оригинал — если нужно сохранить, используйте
-k. - zip без -r для каталога — без
-rzip создаст архив без содержимого подкаталогов.
Коротко
tar -czvf архив.tar.gz каталог/— создать сжатый архив.tar -xzvf архив.tar.gz -C путь/— распаковать в указанное место.tar -tzvf архив.tar.gz— посмотреть содержимое без распаковки.gzip файл— сжать файл;gunzip файл.gz— распаковать.zip -r архив.zip каталог/иunzip архив.zip— для формата ZIP.