Введение: назначение и особенности bzexe
В операционных системах семейства Linux утилита bzexe решает весьма специфическую задачу: она упаковывает исполняемые файлы с применением алгоритмов bzip2, формируя самораспаковывающийся сценарий. Главное преимущество такого подхода заключается в том, что программе не требуется предварительная ручная декомпрессия перед каждым запуском — все необходимые процедуры развертывания происходят прозрачно прямо в памяти при старте. Ниже подробно разобран пошаговый сценарий работы с инструментом: от инсталляции зависимостей и создания тестовой нагрузки до анализа полученных бинарных оберток и возврата к исходному состоянию.
1. Развертывание пакетов и подготовка тестового скрипта
Для полноценного тестирования потребуются сама утилита сжатия, поставляемая в составе пакета bzip2, а также системный инструмент file, позволяющий идентифицировать типы файлов по их сигнатурам. Обновим списки репозиториев и установим недостающие компоненты:

Чтобы изолировать эксперимент от остальных каталогов пользователя, создадим отдельную рабочую директорию с помощью команды mkdir -p ~/bzexe_demo:

Для демонстрации эффективности сжатия сформируем исполняемый файл demo_app.sh, генерирующий псевдослучайный поток данных из устройства /dev/urandom, закодированный в base64:

Файл должен запускаться напрямую, поэтому назначим ему соответствующие права исполнения посредством вызова chmod +x:

Убедимся в корректности созданного сценария, выполнив demo_app.sh и ограничив вывод первыми тремя строками с помощью утилиты head:

2. Упаковка исполняемого файла средствами bzexe
Перед началом трансформации зафиксируем исходный размер созданного скрипта, выполнив команду ls -lh ~/bzexe_demo/demo_app.sh:

Теперь упакуем исполняемый файл с помощью вызова bzexe ~/bzexe_demo/demo_app.sh. Программа отрабатывает в фоновом режиме без избыточных системных сообщений, модифицируя целевой объект непосредственно на диске:

Проверим содержимое каталога командой ls -lh ~/bzexe_demo/. Механизм bzexe автоматически сохраняет первоначальный скрипт под именем demo_app.sh~ в качестве резервной копии, тогда как основной файл demo_app.sh заменяется сжатым архивом со встроенным декомпрессором:

3. Анализ структуры упакованного файла и проверка запуска
Исследуем изменившийся тип файла demo_app.sh, запустив команду file ~/bzexe_demo/demo_app.sh. В терминале отобразится статус POSIX shell script executable, содержащий бинарную часть — это свидетельствует о том, что файл превратился в скрипт-оболочку со сжатыми данными внутри:

Для сопоставления проверим сохраненную резервную копию demo_app.sh~ вызовом file ~/bzexe_demo/demo_app.sh~. Отчет подтверждает исходное состояние: перед нами обычный Bourne-Again shell script, ASCII text executable:

Проверим способность упакованного скрипта функционировать без явной распаковки, выполнив ~/bzexe_demo/demo_app.sh | head -n 3. Заголовочный код распаковщика отработал на лету, передав управление телу программы, благодаря чему результат вывода полностью совпал с оригинальным:

4. Попытка декомпрессии через ключ -d и очистка окружения
Штатный синтаксис bzexe предусматривает обратное восстановление через параметр -d. Выполним команду bzexe -d ~/bzexe_demo/demo_app.sh:

В выводе консоли зафиксировано предупреждение о невозможности распознать внутреннюю структуру файла, вследствие чего модификация объекта не произошла.
Убедимся в этом, запросив атрибуты файла командой ls -lh ~/bzexe_demo/demo_app.sh. Размер объекта остался неизменным (788 байт):

Повторный опрос через file ~/bzexe_demo/demo_app.sh также демонстрирует, что файл сохранил структуру скрипта-обертки POSIX shell script executable:

По окончании эксперимента удалим все вспомогательные данные и сам каталог командой rm -rf ~/bzexe_demo:

Рассмотренная утилита bzexe представляет собой удобное классическое решение для сокращения дискового пространства под исполняемые программы в системах Linux. Возможность прозрачного запуска без предварительного ручного извлечения делает её полезным инструментом в специфических сценариях администрирования компактных сред.