Архивы

Сжатие и восстановление файлов

Последнее обновление: 12.03.2024

Неотъемлемой частью Linux являются команды сжатия файлов и архивирования. Рассмотрим ряд команд, которые предназначены для сжатия файлов.

gunzip и gzip

Команды 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 и bunzip2

Команда 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

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   
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850