В мире Linux умение эффективно архивировать и сжимать данные — не просто навык, а необходимость. Будь то резервное копирование, передача файлов или экономия места, правильный выбор инструмента решает всё. В этой статье мы разберёмся с главными командами для работы с архивами: от классического tar до универсальных zip и 7z.

Введение: Архивирование vs Сжатие

Важно понимать разницу между этими двумя понятиями:

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

Часто эти процессы используются вместе: сначала файлы пакуют в tar-архив, а затем сжимают его.

 

Наш арсенал: Обзор утилит

Перед погружением в примеры, ознакомимся с инструментами, которые будем использовать.

Команды-архиваторы:

Утилита Что делает Расширение Особенности
tar Архивирование .tar Архиватор, который только объединяет файлы. Для сжатия использует внешние утилиты.
zip Архивирование + Сжатие .zip Универсальный формат, стандарт для Windows.
7z Архивирование + Сжатие .7z Отличное сжатие, открытый формат.
rar Архивирование + Сжатие .rar Проприетарный формат, популярен в Windows. В Linux для распаковки используют unrar.

Команды-утилиты сжатия (часто используются с tar):

Утилита Что делает Расширение Особенности
gzip Сжатие .gz Быстрое сжатие и распаковка.
bzip2 Сжатие .bz2 Лучшее сжатие, чем у gzip, но медленнее.
xz Сжатие .xz Максимальное сжатие, но очень медленный.
zstd Сжатие .zst Современный алгоритм с идеальным балансом скорости и качества.

Подготовка рабочего окружения

Большинство систем Linux уже имеют предустановленные tar и gzip. Для установки полного комплекта в Debian/Ubuntu выполните:

sudo apt update
sudo apt install -y tar gzip bzip2 xz-utils zstd zip p7zip-full rar

Важно: Утилита rar является проприетарной и находится в репозитории non-free.

Создадим тестовые файлы для наглядности примеров:

Создаем два файла со случайными данными

dd if=/dev/urandom of=./file1 bs=50K count=10
dd if=/dev/urandom of=./file2 bs=50K count=10

 

Создаем директорию и копируем в неё файлы

mkdir -v ./dir/
cp -v ./file1 ./file2 ./dir/

Властелин архивов: Команда tar

tar (Tape ARchiver) — это основа основ. Его синтаксис может показаться сложным из-за обилия ключей, но разобравшись, вы получите мощнейший инструмент.

Базовые операции:

  • Создание архива:

tar -c -f ./archive.tar ./file1 ./file2 ./dir/

  • -c (--create) — создать архив.
  • -f (--file) — указать имя файла архива.
  • -v (--verbose) — показать процесс подробно.
  • Просмотр содержимого:

tar -t -f ./archive.tar

Извлечение архива:

tar -x -f ./archive.tar

  • -x (--extract) — извлечь.
    • Чтобы извлечь в конкретную папку, используйте -C: tar -x -f archive.tar -C /path/to/target/

Двойной удар: Сжатие tar-архива

Вот где tar раскрывает свою мощь. Специальные ключи позволяют ему прозрачно работать с утилитами сжатия.Gzip (.tar.gz или .tgz):

tar -c -z -f ./archive.tar.gz ./file1 ./file2

Bzip2 (.tar.bz2):

tar -c -j -f ./archive.tar.bz2 ./file1 ./file2

XZ (.tar.xz):

tar -c -J -f ./archive.tar.xz ./file1 ./file2

Zstd (.tar.zst):

tar -c --zstd -f ./archive.tar.zst ./file1 ./file2

Совет: Для распаковки любого из этих форматов достаточно команды tar -x -f archive.tar.xx, так как tar сам определит тип сжатия.

Сжатие одиночных файлов

Иногда архивировать не нужно, а сжать один файл — необходимо.

  • Сжать файл с помощью gzip (исходный файл удалится):

gzip file1.txt # Создаст file1.txt.gz

Сжать файл, сохранив оригинал:

gzip -k file1.txt

Разжать файл:

gunzip file1.txt.gz

или

gzip -d file1.txt.gz

Аналогично работают утилиты bzip2, xz и zstd.

Мощь конвейеров: Потоковое архивирование и сжатие

Одна из сильнейших сторон Linux — возможность объединять утилиты с помощью конвейера (|).

  • Создание архива и его передача для сжатия:

tar -c -f - ./dir/ | gzip -9 > ./archive.tgz

Копирование директории на удаленный сервер через SSH:

tar -c -z -f - ./dir/ | ssh user@host "tar -C /tmp -x -z -f -"

Создание зашифрованного архива с помощью gpg:

tar -c -z -f - ./dir/ | gpg --batch --symmetric --passphrase "MyPassword" > ./archive.tgz.gpg

Разбиение большого архива на части:

tar -c -z -f - ./large_dir/ | split -b 200M - ./archive.tgz.part-

  • Собрать обратно: cat ./archive.tgz.part-* | tar -x -z -f -

Универсальные солдаты: Zip, 7z и Rar

Эти форматы популярны благодаря своей кроссплатформенности.

Zip:

zip archive.zip file1.txt dir/ # Создать
unzip -l archive.zip # Просмотреть
unzip archive.zip # Извлечь

7z:

7z a archive.7z file1.txt dir/ # Создать (a = add)
7z l archive.7z # Просмотреть (l = list)
7z x archive.7z # Извлечь (x = extract)

Rar:

rar a archive.rar file1.txt dir/ # Создать
unrar l archive.rar # Просмотреть
unrar x archive.rar # Извлечь

 

Заключение

  • Для повседневных задач в Linux tar + gzip — классика, которая работает почти везде.
  • Если нужен максимальный баланс скорости и сжатия — присмотритесь к связке tar + zstd.
  • Для передачи файлов пользователям Windows идеально подойдет zip.
  • Когда важно сэкономить каждый байт и время не критично — ваш выбор 7z или tar + xz.

Экспериментируйте, тестируйте на своих данных, и вы найдёте идеальный инструмент для каждой ситуации. Удачи в освоении бескрайних возможностей командной строки

От root

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *