LinuxRuLinux без лишней теории
Архивы и сжатие

Архивы в Linux: команды tar, zip и 7z с примерами

Редакция LinuxRu7 мин чтенияИнструкции

Чтобы распаковать tar.gz в Linux, достаточно команды tar -xf archive.tar.gz, а архивировать папку можно через tar -czf archive.tar.gz папка/. Ниже все нужные команды для tar, gzip, xz, zstd, zip и 7z, распаковка RAR, исправление русских имён из Windows и проверка архивов.

Архивы в Linux: команды tar, zip и 7z с примерами
Фото: Ravenbird, CC0, Wikimedia Commons
Содержание
  1. Как устроены
  2. Распаковка tar
  3. Архивировать папку
  4. gzip, xz, zstd
  5. zip и unzip
  6. 7z и RAR
  7. Графические архиваторы
  8. Ошибки и проверка
  9. Частые вопросы

Почему в Linux архив состоит из двух частей

Имя project.tar.gz честно описывает, что внутри. Утилита tar склеивает файлы и папки в один поток, сохраняя права доступа, владельцев, символические ссылки и время изменения. Сжатием она не занимается, это делает отдельная программа: gzip, bzip2, xz или zstd. Отсюда двойное расширение.

Такое разделение удобно: формат tar один на всех, а алгоритм сжатия выбирается под задачу. Zip и 7z устроены иначе, это архив и сжатие в одном формате. Они хороши для обмена с Windows, но права доступа и владельцев Unix сохраняют плохо или не сохраняют вовсе, так что для резервных копий системы и переноса домашнего каталога берите tar.

РасширениеЧем сжатоКлюч tarКогда выбирать
.tarБез сжатиянетУже сжатые файлы: фото, видео, архивы
.tar.gz, .tgzgzip-zМаксимальная совместимость, быстро
.tar.bz2bzip2-jВстречается в старых архивах, сейчас редко нужен
.tar.xzxz-JЛучшее сжатие, медленная упаковка; исходники, дистрибутивы
.tar.zstzstd--zstdБыстро и хорошо жмёт, пакеты Arch и Fedora
.zipdeflateне tarОбмен с Windows и macOS
.7zLZMA2не tarСильное сжатие и шифрование с паролем

Как распаковать tar.gz, tar.xz и tar.zst

GNU tar сам определяет тип сжатия при распаковке, поэтому одна команда подходит почти для всего:

# распаковать в текущую папку
tar -xf archive.tar.gz
# то же для xz, bz2 и zst
tar -xf archive.tar.xz
tar -xf archive.tar.zst
# в указанную папку, с выводом имён файлов
mkdir -p ~/src/project
tar -xvf archive.tar.gz -C ~/src/project

Ключи читаются так: x извлечь, f имя файла архива (после него сразу идёт имя), v подробный вывод, C каталог назначения. Старые инструкции пишут tar -xzvf, это тоже работает, явный z просто необязателен.

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

tar -tf archive.tar.gz | head
# вытащить один файл или папку
tar -xf archive.tar.gz project/README.md
# убрать верхний каталог из путей
tar -xf archive.tar.gz --strip-components=1 -C ~/src/project

Если архив не начинается с общей папки, распаковка в текущий каталог вывалит сотни файлов рядом с вашими. Поэтому сначала tar -tf, потом решайте, нужен ли -C.

Как архивировать папку в Linux командой tar

# gzip: универсальный вариант
tar -czf docs.tar.gz Документы/
# xz: сильнее сжатие, дольше
tar -cJf docs.tar.xz Документы/
# zstd: быстрый и современный
tar --zstd -cf docs.tar.zst Документы/
# выбор сжатия по расширению имени
tar -caf docs.tar.zst Документы/

Ключ c создаёт архив, a (auto-compress) смотрит на расширение и сам выбирает компрессор, удобно в скриптах. Поддержка zstd в GNU tar появилась в версии 1.31, во всех актуальных дистрибутивах она есть.

Исключения, права и многопоточность

# без кэша и папки node_modules
tar -czf site.tar.gz --exclude='*/node_modules' --exclude='.cache' site/
# системные файлы с сохранением владельцев и прав
sudo tar -cpzf etc-backup.tar.gz /etc
# все ядра процессора при сжатии
tar -I 'zstd -T0 -19' -cf big.tar.zst data/
tar -I 'xz -T0' -cf big.tar.xz data/

Сообщение tar: Removing leading `/' from member names при упаковке /etc - не ошибка. Tar убирает ведущий слеш, чтобы при распаковке файлы не перезаписали вашу настоящую /etc, а легли в ./etc. Права при распаковке от root сохраняются по умолчанию, от обычного пользователя их сохраняет ключ -p. Что такое права и владельцы, подробно в статье о chmod и chown.

Архивировать можно и результат поиска: например, все PDF за последний месяц собрать командой find ~/Документы -name '*.pdf' -mtime -30 -print0 | tar --null -czf pdf.tar.gz -T -. Как составлять такие условия, рассказано в статье о find и grep.

Сжатие отдельных файлов: gzip, xz, zstd

Компрессоры работают и без tar, но только с одним файлом. По умолчанию исходник заменяется сжатой версией, ключ -k сохраняет оригинал.

gzip -k access.log        # access.log.gz
gunzip access.log.gz
xz -k -T0 dump.sql        # dump.sql.xz
unxz dump.sql.xz
zstd -k image.raw         # image.raw.zst
unzstd image.raw.zst
# просмотр без распаковки
zcat access.log.gz | less
xzcat dump.sql.xz | head
zstdcat image.raw.zst | wc -c

Сравнивать алгоритмы удобнее на своих данных, чем по чужим таблицам: заархивируйте одну и ту же папку тремя способами и посмотрите ls -lh, а время замерьте через time. Логи и текст жмутся сильно, фото и видео почти не сжимаются ничем.

Zip и unzip: архивы для Windows

Утилиты zip и unzip ставятся отдельно, если их нет: sudo apt install zip unzip, sudo dnf install zip unzip, sudo pacman -S zip unzip.

# упаковать папку рекурсивно
zip -r photos.zip Фото/
# с паролем (шифрование слабое, для серьёзных данных берите 7z)
zip -er secret.zip Документы/
# посмотреть содержимое
unzip -l photos.zip
# распаковать в папку
unzip photos.zip -d ~/Фото/импорт

Кракозябры в именах файлов из Windows

Старые архивы из Windows хранят русские имена в кодировке CP866, и после распаковки вместо названий получаются символы вроде ÅÑ¿Ñ. В Debian и Ubuntu unzip умеет указывать кодировку: unzip -O cp866 archive.zip. Универсальный обходной путь - утилита unar из одноимённого пакета, она сама угадывает кодировку, или 7-Zip.

7z и распаковка RAR

7-Zip

В Debian 13, Ubuntu 26.04 и Arch актуальный 7-Zip лежит в пакете 7zip, старый p7zip оставлен только как переходный. В Fedora имя пакета зависит от выпуска, проверьте dnf search 7zip.

sudo apt install 7zip      # Debian, Ubuntu
sudo pacman -S 7zip        # Arch
# распаковать с сохранением путей
7z x archive.7z
# создать архив
7z a backup.7z Документы/
# с паролем и шифрованием имён файлов
7z a -p -mhe=on private.7z Документы/
# список файлов
7z l archive.7z

Обратите внимание: 7z x сохраняет структуру папок, а 7z e вываливает все файлы в одну кучу. Почти всегда нужен x.

RAR

Формат RAR закрытый, создавать такие архивы в Linux нет смысла, а распаковать можно несколькими способами:

  • unrar - официальная утилита, работает со всеми архивами, включая зашифрованные и многотомные. В Debian она в разделе non-free, в Ubuntu в multiverse, в Fedora в RPM Fusion nonfree, в Arch в обычном репозитории.
  • unrar-free - свободная замена, обычные RAR5 открывает, а зашифрованные RAR5 нет.
  • unar - свободная утилита, понимает RAR, 7z, zip и многое другое.
  • В Debian и Ubuntu пакет 7zip-rar добавляет поддержку RAR в команду 7z.
unrar x archive.rar
unar archive.rar
lsar archive.rar

Архиваторы с окном: Ark и File Roller

В KDE Plasma архивами занимается Ark, в GNOME и Linux Mint - "Менеджер архивов" (File Roller). Оба встроены в контекстное меню файлового менеджера: "Распаковать сюда", "Сжать". Внутри они вызывают те же tar, zip, 7z и unrar, поэтому если в терминале какой-то формат не открывается, в графике он тоже не откроется, пока не поставите нужную утилиту.

Для повторяющихся задач терминал выигрывает: команду можно сохранить в скрипт или алиас, а Ctrl+R найдёт вчерашний длинный tar с исключениями. Полезные приёмы работы в терминале собраны в статье о горячих клавишах терминала, а базовые команды для файлов в подборке основных команд Linux.

Проверка архива и частые ошибки

# проверить целостность без распаковки
gzip -t archive.tar.gz
xz -t archive.tar.xz
zstd -t archive.tar.zst
unzip -t photos.zip
7z t backup.7z
# что это за файл на самом деле
file archive.tar.gz
  • gzip: stdin: not in gzip format. Файл назван .tar.gz, но им не является: недокачан, это HTML-страница с ошибкой загрузки или обычный tar. Команда file покажет правду, а tar -xf без -z часто справляется сам.
  • Cannot open: Permission denied. Нет прав на запись в каталог назначения. Распакуйте в домашнюю папку или используйте -C.
  • Unexpected EOF in archive. Архив обрезан. Скачайте заново и сверьте контрольную сумму: sha256sum archive.tar.gz.
  • Нет места при распаковке. Размер содержимого можно прикинуть заранее: tar -tvf archive.tar.gz показывает размеры файлов, xz -l - размер до сжатия.

Архив с резервной копией без проверки - это надежда, а не копия. Сразу после создания выполните tar -tf или 7z t и хотя бы раз распакуйте копию во временную папку. Для регулярных копий с дедупликацией и шифрованием tar неудобен, посмотрите на Borg и Restic из статьи о резервных копиях.

Полное описание ключей tar есть в руководстве GNU tar.

Частые вопросы

Как распаковать tar.gz в Linux?

Выполните tar -xf archive.tar.gz в нужной папке или добавьте -C путь, чтобы распаковать в другое место. Ключ -z указывать не обязательно.

Как заархивировать папку?

Командой tar -czf имя.tar.gz папка/ для gzip или tar --zstd -cf имя.tar.zst папка/ для zstd. Для обмена с Windows подойдёт zip -r имя.zip папка/.

Чем распаковать RAR в Linux?

Утилитой unrar, свободными unar или unrar-free, либо 7z с модулем 7zip-rar. Для зашифрованных RAR5 нужен unrar.

Что лучше: gzip, xz или zstd?

gzip самый совместимый, xz сжимает сильнее, но медленно, zstd быстрый и сжимает хорошо. Для новых архивов в Linux zstd обычно лучший выбор.

Почему русские имена файлов из zip превратились в кракозябры?

Архив создан в Windows с кодировкой CP866. Распакуйте командой unzip -O cp866 archive.zip или утилитой unar.

Документация и источники

Читайте также

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