Выявляем тонкости использования архиватора p7zip в Linux

debianeach

Опубликован:  2020-02-20T13:32:58.112404Z
Отредактирован:  2020-02-20T13:26:27.714100Z
7800
Мир, в котором мы живём, удивителен и многообразен. Видимо поэтому в операционных системах с ядром Linux как правило кроме архиватора Tar, о котором мы говорили в прошлом выпуске, находится место и другим архиваторам. Героем этого обзора назначен архиватор p7zip, поговорим о его возможностях, целесообразности и необходимости использования и рассмотрим некоторые приёмы работы с ним.

1. Начальные сведения

Архиватор 7z - это кросс-платформенная программа, которая изначально разрабатывалась, наверно, для операционных систем Microsoft, но успешно компилируется и может использоваться в окружении Linux и других операционных систем.

В Debian buster этот архиватор включен в состав программного обеспечения, чтобы им воспользоваться достаточно установить пакет p7zip-full. Кроме этого, в пакетной базе есть облегченная версия - архиватор 7zr, пакет p7zip, и средства для распаковки RAR-архивов - пакет p7zip-rar.

f7mrSRLGYS.png

Всё вместе можно установить одной командой.

sudo apt install --install-suggests p7zip-full

kvKCAXzO7P.png

После установки всех пакетов операционная система предлагает три исполняемых файла: 7z - полная версия архиватора, 7za - альтернативный модуль, 7zr - урезанная в возможностях версия архиватора.

nww16JMPmK.png

В рамках этого обзора во всех командах будет использоваться архиватор 7z.

7z неплохо документирован, в составе установленных пакетов есть man-страницы для всех трёх вариантов, кроме этого, 7z предлагает краткую сводку по командам и переключателям с описанием их значений, которую можно вывести запуском команды с ключом --help.

7z --help

j7aKlGnmpE.png

В пакете p7zip-full есть детальное описание всех команд и переключателей архиватора в формате html, которое можно просмотреть с помощью любого web-браузера, например Firefox:

firefox-esr /usr/share/doc/p7zip/DOC/MANUAL/start.htm &

JbvHHSfOmt.png

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

  • 7z;
  • BZIP2;
  • GZIP;
  • TAR;
  • WIM;
  • XZ;
  • ZIP.

Когда вы работаете в операционной системе Microsoft, мульти-форматность 7z наверно имеет значение, под управлением операционной системы с ядром Linux вряд ли есть необходимость создавать с помощью этого архиватора архивы отличных от 7z форматов, ну просто потому, что для архивов других форматов есть нативные средства почти в каждом Linux-дистрибутиве.

Распаковать с помощью 7z можно чуть ли не все известные на сегодня форматы архивов, полный перечень форматов можно найти в документации.

7z - это консольная утилита, использовать её можно и нужно в терминале, в командной строке, в этом варианте программа предоставляет пользователю весь спектр своих возможностей. В свободном доступе есть программы с GUI для этого архиватора, но разработчики Debian buster не посчитали нужным внести в состав пакетной базы соответствующие пакеты. Если сильно хочется использовать 7z с GUI, придётся довольствоваться возможностями XArchiver, Engrampa и подобных интерфейсов.

Далее я покажу основные приёмы работы с 7z и определю целесообразность его использования, в том числе случаи, когда этот архиватор действительно необходимо использовать.

2. Целесообразность использования 7z в Linux

Итак, у нас есть архиватор, давайте определимся, насколько целесообразно его использовать в операционных системах с ядром Linux. Как известно, архиватор может создавать новые архивы и распаковывать готовые архивы. При создании нового архива необходимо определиться, где и с помощью каких средств этот архив будет распакован получателем.

Если получатель архива будет распаковывать ваш архив в операционной системе Microsoft, то, вероятно, 7z будет хорошим выбором, потому что обеспечивает отличную степень сжатия, правда при этом достаточно медленно работает, об этом чуть позже.

Если получатель архива будет распаковывать ваш архив в операционной системе с ядром Linux, тогда лучше отказаться от 7z в пользу Tar и любого компрессора из следующей линейки: bzip2, xz, lzip. И вот почему...

Специально для этой демонстрации я приготовил каталоги с файлами, которые нужно упаковать в архив.

MPtocMAG7R.png

Следует обратить внимание на режим доступа этих каталогов и файлов. Мне необходимо, чтобы все атрибуты предназначенных для упаковки каталогов и файлов после распаковки архива были сохранены - это основное условие.

Теперь я запакую эти каталоги в архивы двух разных форматов: tar и 7z, и буду использовать для этого два архиватора: Tar и 7z.

tar -c -z -f ~/new.tar.gz hard soft

5ZxCIm3xH0.png

7z a ~/new.7z hard soft

tbWRbRPGy0.png

Теперь удаляю из текущего каталога все файлы и каталоги - rm -rf *.

zCd2jAtnfq.png

Посмотрим, как при распаковке архиваторы справятся с основным условием. Сначала Tar.

tar -x -z -p -f ~/new.tar.gz 

NBLRxn6rnA.png

Как видно на снимке экрана выше, режим доступа к каталогам и файлам после распаковки сохранён. С Tar всё OK - он выполнил основное условие оператора.

Опять удаляю всё из текущего каталога и распаковываю второй архив с помощью 7z.

7z x ~/new.7z 

v4UqoFqrDO.png

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

Отсюда я делаю простой вывод, архиватор 7z нецелесообразно использовать, если вам необходимо сохранить все Linux-специфичные атрибуты архивируемых каталогов и файлов при распаковке.

Рассмотрим ещё один вероятный вариант использования 7z, поскольку это мульти-форматный архиватор, я попробую распаковать с его помощью созданный только что архив new.tar.gz - 7z поддерживает распаковку таких архивов. Опять удаляю из текущего каталога всё, что в нём есть.

55xDZE7Icm.png

Теперь распаковываю архив new.tar.gz и смотрю на оглавление текущего каталога.

WCzeWPf0BI.png

Ну и чего он мне распаковал, где мои файлы и каталоги..?

Очевидно, что в операционных системах с ядром Linux для распаковки архивов форматов отличных от 7z лучше использовать нативные для этого типа архивов архиваторы - так будет удобнее и эффективнее.

Следует упомянуть третий вариант использования 7z - его я, к сожалению, не смогу продемонстрировать. Если вам нужно запаковать файлы и каталоги с именами, содержащими символы отличные от ASCII, например символами кириллицы, в архив, который будет распакован под управлением операционной системы Microsoft. В этом случае 7z будет хорошим выбором, при условии, что архивируемые файлы являются сжимаемыми сущностями. Если же в архив нужно упаковать много-много несжимаемых файлов (mp3, jpeg etc.), то лучше обойтись классическим Zip, потому что упаковка c 7z может длиться достаточно продолжительное время - эффективность такой упаковки будет близка к нулю.

3. Создание и распаковка архивов 7z

В одном из предыдущих выпусков блога я рассмотрел архиватор Tar и основные приёмы его использования, в процессе подготовки того текста я создал несколько архивов разных типов в которые упаковал одни и те же каталоги.

x9zsA3qwyB.png

В этой демонстрации я имею возможность упаковать эти же каталоги в архив 7z и сравнить время упаковки и размер полученного архива с архиватором Tar и доступных ему компрессоров. При этом упаковывать архив 7z буду с максимальной степенью сжатия. Приступим...

Команда для упаковки каталогов будет выглядеть так:

7z a -mx=9 ~/auriz.7z db src

Длительность упаковки продемонстрирую опять с помощью time -p.

SMEqHvEoET.png

Запасаюсь терпением и дожидаюсь завершения процесса упаковки архива. В итоге мой терминал выглядит следующим образом.

R5uPjKKUKe.png

Сравниваю со снимком экрана из предыдущего выпуска, на котором показано время упаковки тех же каталогов с помощью Tar и lzip с максимальной степенью сжатия.

yqXoOwGwCR.png

Очевидно, что 7z не уложился даже в эту норму. При этом продемонстрировал степень сжатия на уровне lzip.

Vwm59XMyoL.png

Посмотрим, что он покажет на распаковке этого архива.

7z x ~/auriz.7z

pjUN7r47bm.png

А на распаковке 7z показывает отличную быстроту, сравним с lzip.

Mxrw6Vytlk.png

Видим соизмеримые цифры, то есть 7z в Debian buster есть чем заменить, если созданный архив будет распакован на Linux-системе.

4. Многотомные и самораспаковывающиеся архивы

Архиватор 7z поддерживает создание многотомных архивов и умеет распаковывать многотомные архивы 7z. При этом никаких особых сложностей при создании архива не возникает, достаточно задать в команде один дополнительный ключ и указать желаемый размер тома.

7z a -v100m auriz.7z db src

FpqV1J5wnJ.png

В результате выполнения команды в текущем каталоге появились файлы архива, размер каждого не превышает 100MiB.

4G00vC85ut.png

Распаковывается этот архив так же просто.

7z x -o/home/newbie/unpacked/ auriz.7z.001

В данном случае я указал каталог назначения, куда архив будет распакован - ключ -o, и первый файл многотомного архива.

xFVmj04Iee.png

После распаковки смотрим на содержимое каталога назначения и текущего каталога.

4AbIx3k0gC.png

Размер целевых каталогов в каталоге unpacked совпадает с размером каталогов в текущем каталоге auriz - многотомный архив распакован.

Кроме этого, 7z позволяет создавать так называемые самораспаковывающиеся архивы, такие архивы можно распаковать в операционных системах Microsoft, даже если на конкретной машине не установлен этот архиватор. Продемонстрировать распаковку такого архива у меня нет возможности, увы...

5. Защита архива паролем

7z даёт возможность защитить архив паролем. Пароль можно задать прямо в командной строке ключом -p - это не очень удобно, потому что при создании архива пароль будет виден на экране терминала, учитывая длительность процесса упаковки, есть риск засветить пароль.

7z a -pK32tmSb ~/auriz.7z db src

fT05P9F389.png

Защита паролем никак существенным образом не сказывается на размере архива. Распаковать такой архив можно только зная пароль, ну или с применением специальных средств. Насколько стойкой окажется защита оценить сложно, но в некоторых случаях плохой замок лучше чем совсем без замка. Попробуем распаковать полученный архив.

7z x ~/auriz.7z

dJsT97P1Ye.png

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

5mAgIVpv9Z.png

Архив не распакован... Но, блин, зачем архиватор показал злоумышленнику состав архива и список входящих в него файлов? Кроме этого в текущем каталоге появились каталоги с именами каталогов из архива.

auFs37KeWE.png

Теперь я задам правильный пароль при распаковке.

VCq4l6SjQm.png

С правильным паролем файлы из архива извлекаются в штатном режиме.

m5oC61gGnI.png

На мой взгляд эта возможность p7zip не очень качественно продумана, но дарёному коню, как известно, в зубы не смотрят. :))) Поэтому, если архив нужно распаковать в операционной системе Microsoft, и при этом защитить паролем - 7z хороший выбор.

Комментарии: