Неотъемлемой частью Linux являются команды сжатия файлов и архивирования. Рассмотрим ряд команд, которые предназначены для сжатия файлов.
Команды gunzip (GNU Unzip) и gzip (GNU Zip) используются для сжатия и восстановления файлов. Команда gzip используется для сжатия файлов и создания сжатого файла с расширением .gz, а также для восстановления исходного файла, а команда gunzip используется только для восстановления этих файлов .gz.
Команда gzip имеет следующую форму:
gzip [OPTION]... [FILE]...
Команде передается набор опций и набор файлов/каталогов для сжатия/восстановления. Например:
gzip book.pdf
В данном случае архивируем файл "book.pdf". По умолчанию архивируемый файл удаляется, а вместо него создается сжатый, который называется как оригинальный, только с расширением .gz. В моем случае это файл "book.pdf.gz".
Аналогично можно сжать сразу несколько файлов:
gzip book.pdf image.png
В этом случае для каждого файла будет создаваться свой сжатый файл.
Чтобы оригинальный файл не удалялся, применяется опция -k
gzip -k book.pdf
gzip также предоставляет еще ряд опций, из которых следует отметить следующие:
-d, --decompress
: распаковать архив
-l, --list
: выводит список заархивированных файлов и каталогов
-r, --recursive
: рекурсивно архивирует содержимое каталогов
-1, --fast
: применяет быстрое архивирование (в ущерб размеру)
-9, --best
: применяет лучшее архивирование с упором на наименьший размер (в ущерб скорости)
Например, посмотрим информацию о созданном архиве с помощью опции -l:
eugene@Eugene:~$ gzip -l book.pdf.gz compressed uncompressed ratio uncompressed_name 10642132 11773659 9.6% /home/eugene/book.pdf
Восстановление вышесозданного архива "book.pdf.gz":
gzip -d book.pdf.gz
При этом оригинальный архив также удаляется. Чтобы его сохранить также применяется опция -k
gzip -k -d book.pdf.gz
И также можно распаковать с помощью команды gunzip, которой просто передается имя архива. Если файл уже существует, то команда спросит, надо ли перезаписывать его:
eugene@Eugene:~$ gunzip -k book.pdf.gz gzip: /home/eugene/book.pdf already exists; do you wish to overwrite (y or n)? y eugene@Eugene:~$
По умолчанию gunzip также удаляет файл архива после распаковки. Чтобы этого не произошло, команде также передается опция -k
Команда bzip2 используется для сжатия файла (применяет алгоритм сжатия текста с сортировкой блоков Берроуза-Уиллера (Burrows-Wheeler) с последующим кодированием Хаффмана), а команда bunzip2 - для восстановления файла, сжатого с помощью bzip2. Создаваемые архивы имеют расширение .bz2. Считается, что bzip2 чуть более эффективнее сжимает, чем gzip - сжатые файлы получаются примерно на 10% меньше
Команде bzip2 передается набор опций и файлов для сжатия. Основные опции утилиты bzip2:
-d --decompress
: выполняет распаковку
-z --compress
: выполняет сжатие
-v --verbose
: выводит сводку об операции
-k --keep
: сохраняет (не удаляет) сжимаемые файлы
-f --force
: перезаписывает уже существующие компоненты в сжатом файле
-t --test
: проверяет целостность сжатого файла
-1 .. -9
: уровень сжатия, где 1 означает наибыстрое сжатие, но ниабольный размер выходного файла. Тогда как 9 означает масимальное сжатие - наименьший размер, но время сжатия может увеличиться.
Значения от 2 до 8 позволяют применить промежуточные уровни.
--fast
: аналог -1
--best
: аналог -9
Например, сожмем два файла:
bzip2 -k book.pdf image.png
Здесь сжимаются файлы "book.pdf" и "image.png". И свой архив создается для каждого входного файла. То есть на выходе получим файлы "book.pdf.bz2" и "image.png.bz2"
По умолчанию сжимаемые файлы удаляются. И чтобы их сохранить, применяется опция -k
bzip2 -k book.pdf image.png
Чтобы увидеть подробную сводку по сжатию, применяется опция -v:
eugene@Eugene:~$ bzip2 -v book.pdf image.png book.pdf: 1.098:1, 7.287 bits/byte, 8.91% saved, 11773659 in, 10724549 out. image.png: 1.079:1, 7.413 bits/byte, 7.33% saved, 177489 in, 164473 out. eugene@Eugene:~$
Используя опцию -d, можно восстановить ранее сжатые файлы:
eugene@Eugene:~$ bzip2 -d -v book.pdf.bz2 image.png.bz2 book.pdf.bz2: done image.png.bz2: done
Команда bunzip2 используется для восстановления файлов, сжатых с помощью bzip2. Когда сжатый файл распаковывается с помощью bunzip2, исходный файл восстанавливается с тем же именем и путем к каталогу, что и сжатый файл, но без расширения .bz2. Стоит отметить, что команда bunzip2 также может распаковывать файлы, сжатые с помощью команды gzip.
Использование bunzip2 во многом аналогично bzip2 за тем исключением, что по умолчанию идет не сжатие, а восстановление файлов. Например, восстановим ранее сжатые файлы:
bunzip2 book.pdf.bz2 image.png.bz2
XZ — это инструмент командной строки, используемый для сжатия и распаковки данных. Он основан на алгоритме цепочки Лемпеля-Зива-Маркова (Lempel-Ziv-Markov или LZMA), который известен своей высокой степенью сжатия и низким использованием памяти. XZ используется для создания сжатых архивов больших файлов и каталогов, особенно в системах Linux. Он также используется для сжатия ядра Linux во время установки. XZ обеспечивает значительное уменьшение размера файла при сохранении целостности исходного файла. Кроме того, XZ можно использовать для сжатия и распаковки файлов «на лету», что полезно в некоторых сценариях.
Общий формат команды:
xz [OPTION]... [FILE]...
Вначале команде могут передаваться опции, а затем набор файлов. Команда принимает следующие опции:
-z, --compress
: сжатие файлов
-d, --decompress
: восстановление файлов
-t, --test
: проверка целостность сжатого файла
-l, --list
: выводит информацию о файлах в архиве
-k, --keep
: сохраняет (не удаляет) входные файлы
-f, --force
: принудительно перезаписывает выходной файл
-0...-9
: задает уровень сжатия; по умолчанию — 6
-e, --extreme
: попытаться улучшить степень сжатия, используя больше процессорного времени; не влияет на требования к памяти декомпрессора
-T, --threads=NUM
: устанавливает максимальное число потоков в NUM; значение по умолчанию — 1; установите значение 0, чтобы использовать столько потоков, сколько имеется ядер процессора.
-v, --verbose
: выводит подробную сводку операции
Например, сожмем файлы:
eugene@Eugene:~$ xz -v book.pdf image.png book.pdf (1/2) 100 % 9.9 MiB / 11.2 MiB = 0.885 0:02 image.png (2/2) 100 % 157.6 KiB / 173.3 KiB = 0.909
В итоге для каждого файла создается свой сжатый файл с расширением .xz. Таким образом, в данном случае для файла "book.pdf" создается файл "book.pdf.xz", а для файла "image.png" - файл "image.png.xz"
Для распаковки сжатых файлов применим флаг -d:
eugene@Eugene:~$ xz -d -v book.pdf.xz image.png.xz book.pdf.xz (1/2) 100 % 9.9 MiB / 11.2 MiB = 0.885 image.png.xz (2/2) 100 % 157.6 KiB / 173.3 KiB = 0.909