Как распаковать zlib linux

Как распаковать данные zlib в UNIX?

Я создал zlib-сжатые данные в Python, например:

(или однострочный в оболочке: echo -n ‘. ‘ | python2 -c ‘import sys,zlib; sys.stdout.write(zlib.compress(sys.stdin.read()))’ > /tmp/data )

Теперь я хочу распаковать данные в оболочке. Ни zcat , ни uncompress работают:

Кажется, что я создал gzip-подобный файл, но без заголовков. К сожалению, я не вижу возможности распаковывать такие необработанные данные на странице gzip man, а пакет zlib не содержит исполняемой программы.

Есть ли утилита для распаковки необработанных данных zlib?

10 ответов

Можно также распаковать его, используя стандартный shell-script + gzip , если вы этого не сделали или хотите использовать openssl или другие инструменты.
Трюк состоит в том, чтобы добавить магическое число gzip и сжать метод до фактических данных из zlib.compress :

Редактирование:
@ d0sboots прокомментировал: для данных RAW Deflate вам нужно добавить еще 2 пустых байта:
â † ‘ «\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00»

Этот Q на SO дает больше информации об этом подходе. Ответ там предполагает, что есть также 8-байтовый нижний колонтитул.

Пользователи @ Vitali-Kushner и @ mark-bessey сообщили об успехе даже с усеченными файлами, поэтому нижний колонтитул gzip не кажется строго обязательным.

@ tobias-kienzler предложил эту функцию для bashrc :
zlipd() (printf «\x1f\x8b\x08\x00\x00\x00\x00\x00» |cat — [email protected] |gzip -dc)

Я нашел решение (одно из возможных), используя openssl :

* ПРИМЕЧАНИЕ. Функциональность zlib, по-видимому, доступна в последних версиях openssl> = 1.0.0 (OpenSSL должен быть сконфигурирован /построен с параметром zlib или zlib-dynamic, последний по умолчанию)

Пользователь @tino прокомментировал ниже ответ OpenSSL, но я думаю, что это должно быть отдельным:

Я попробовал это, и это сработало для меня.

zlib-flate можно найти в пакете qpdf (в Debian Squeeze и Fedora 23, согласно комментариям в других ответах)

Я рекомендую pigz от Марк Адлер , соавтор библиотеки сжатия zlib. Выполните pigz , чтобы увидеть доступные флаги.

-z —zlib Compress to zlib (.zz) instead of gzip format.

Вы можете распаковать, используя флаг -d :

-d —decompress —uncompress Decompress the compressed input.

Предполагая файл с именем ‘test’:

  • pigz -z test — создает сжатый файл zlib с именем test.zz
  • pigz -d -z test.zz — преобразует test.zz в распакованный тестовый файл

В OSX вы можете выполнить brew install pigz

zlib реализует сжатие, используемое gzip, но а не формат файла. Вместо этого вы должны использовать gzip модуль , который сам использует zlib .

Это может сделать это:

Затем запустите его следующим образом:

Пример программы zpipe.c найден здесь от Mark Сам Адлер (поставляется с исходным распределением библиотеки zlib) очень полезен для этих сценариев с необработанными данными zlib. Скомпилируйте с помощью cc -o zpipe zpipe.c -lz и выполните распаковку: zpipe -d decompressed . Он также может выполнять сжатие без флага -d .

Вы можете использовать это для сжатия с помощью zlib:

И это для дефляции:

В macOS, который является полностью совместимым с POSIX UNIX (официально сертифицированным!), OpenSSL не поддерживает zlib , нет zlib-flate

Вот решение на основе Perl, которое можно использовать в качестве однострочного интерфейса командной строки, получает его вход через STDIN-канал и работает из коробки со свеже установленным macOS:

Более чистый формат, сценарий Perl выглядит следующим образом:

Источник

Русские Блоги

Проблемы, возникающие в процессе компиляции библиотеки zlib и ее распаковки с использованием библиотеки zlib

каталог

1. Скачать zlib

Вы можете перейти на официальный сайтhttp://www.zlib.net/ Скачать zlib

2. Скомпилируйте zlib

PS: Рабочая среда здесь VS2008 + zlib1.2.7

Шаг 1: Откройте окно запуска командной строки VS2008

Шаг 2. После открытия окна командной строки введите каталог zlib-1.2.7 \ contrib \ masmx86, введите команду bld_ml32.bat и нажмите клавишу Enter, чтобы запустить команду

Приведенное выше сообщение показывает, что компиляция прошла успешно.

PS: Поскольку машины в основном 64-битные, они обычно входят в каталог masmx64 и выполняют bld_ml64.bat. Но поскольку я работаю в системной среде Win7 и Win10, ошибка «ml64.exe не является ни внутренней, ни внешней командой, ни запущенной программой», ошибка показана на рисунке ниже, поскольку внутренняя операционная система автоматически отправляет 64-разрядные адреса выровнены, поэтому использование 32-разрядного программного обеспечения на 64-разрядных компьютерах не представляет проблем! Таким образом, мы компилируем bld_ml32.bat здесь

Читайте также:  Windows live mail где хранит письма

Шаг 3: Введите каталог D: \ zlib-1.2.7 \ contrib \ vstudio \ vc9, потому что я использую vs2008 для запуска, поэтому я вошел в каталог vc9. Затем используйте vs2008, чтобы открыть zlibvc.sln

Шаг 4. После открытия файла в vs2008 сначала установите препроцессор свойств проекта на win32, а затем скомпилируйте проект (нажмите F5

Шаг 5: В это время в каталоге D: \ zlib-1.2.7 \ contrib \ vstudio \ vc9 \ x86, который содержит скомпилированную библиотеку dll и lib, появляется папка ZlibDllDebug.

Приведенная выше библиотека zlib скомпилирована

3. Распакуйте файл, используя библиотеку zlib

3.1 Подготовка

Чтобы использовать библиотеку zlib для распаковки файлов в проекте, вам нужно проделать некоторую подготовительную работу — создать новую папку в файле проекта для использования библиотеки zlib, здесь я называю ее zlib, и файлы в ней: , Так что следующих файлов достаточно)

В это время вам также необходимо поместить zlibwapi.dll в Windows / System, иначе он сообщит об ошибке при запуске

Наконец, просто добавьте эти две строки кода в код проекта

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

3.2 Используйте функцию распаковки, чтобы распаковать файл

1)Откройте сжатый файл.использованиеunzOpen64(char* filePath)Функция открывает сжатый файл.Если возвращаемое значение равно NULL, это означает, что сжатый файл не удалось открыть, в противном случае он возвращает переменную типа unzFile для успешного открытия сжатого файла.

2)Получить глобальную информацию о сжатых файлах.использованиеunzGetGlobalInfo64(unzFile zFile, unz_global_info64 *zGlobalInfo)Функция получает глобальную информацию о сжатом файле и помещает ее в структуру unz_global_info64. Существует важная переменная-член — количество всех файлов в сжатом файле, но не каталог. Таким образом, вы можете использовать эту функциюЗнать количество файлов в сжатом файле.

3)Переберите все файлы в сжатом файле и распакуйте сжатый файл в локальный файл (на самом деле, это означает, что записанный файл будет записан в локальный файл для завершения распаковки).

Полный код распаковки выглядит следующим образом:

Источник

Как распаковать данные zlib в UNIX?

Я создал zlib-сжатые данные в Python, например:

(или однострочный в оболочке: echo -n ‘. ‘ | python2 -c ‘import sys,zlib; sys.stdout.write(zlib.compress(sys.stdin.read()))’ > /tmp/data )

Теперь я хочу распаковать данные в оболочке. Ни zcat ни zcat работают:

Кажется, что я создал gzip-подобный файл, но без заголовков. К сожалению, я не вижу возможности распаковывать такие необработанные данные на странице gzip man, а пакет zlib не содержит исполняемой программы.

Есть ли утилита для распаковки необработанных данных zlib?

Также можно распаковать его, используя стандартный скрипт оболочки + gzip. Хитрость заключается в том, чтобы дополнить магическое число gzip и метод сжатия (см. http://www.onicos.com/staff/iz/formats/gzip.html ) к фактическим данным:

Я нашел решение (одно из возможных), оно использует openssl :

* ПРИМЕЧАНИЕ. Функциональность zlib, по-видимому, доступна в последних версиях openssl> = 1.0.0 (OpenSSL должен быть настроен / построен с параметром zlib или zlib-dynamic, последний по умолчанию)

Пользователь @tino прокомментировал ниже ответ opensl, но я думаю, что это должно быть отдельно:

Я попробовал это, и это сработало для меня.

zlib-flate можно найти в пакете qpdf (в Debian Squeeze и Fedora 23, согласно комментариям в других ответах)

Я рекомендую pigz от Марка Адлера , соавтора библиотеки сжатия zlib. pigz чтобы увидеть доступные флаги.

-z —zlib Compress to zlib (.zz) instead of gzip format.

Вы можете распаковать с помощью флага -d :

-d —decompress —uncompress Decompress the compressed input.

Предполагая файл с именем ‘test’:

  • pigz -z test – создает сжатый файл zlib с именем test.zz
  • pigz -d -z test.zz – конвертирует test.zz в распакованный файл теста

На OSX вы можете выполнить brew install pigz

zlib реализует сжатие, используемое gzip, но не формат файла. Вместо этого вы должны использовать модуль gzip , который сам использует zlib .

Это может сделать это:

Затем запустите его так:

Вы можете использовать это для сжатия с помощью zlib:

Источник

Как распаковать данные zlib в UNIX?

Я создал zlib-сжатые данные в Python, вот так:

(или один вкладыш в оболочке: echo -n ‘. ‘ | python2 -c ‘import sys,zlib; sys.stdout.write(zlib.compress(sys.stdin.read()))’ > /tmp/data )

Читайте также:  Linux kernel build targets

Теперь я хочу распаковать данные в оболочке. Ни , zcat ни uncompress работа:

Кажется, я создал gzip-подобный файл, но без заголовков. К сожалению, я не вижу никакой возможности распаковать такие необработанные данные на man-странице gzip, и пакет zlib не содержит никакой исполняемой утилиты.

Есть ли утилита для распаковки сырых данных zlib?

Также можно распаковать его, используя стандартный shell-скрипт + gzip , если у вас его нет, или вы хотите использовать openssl или другие инструменты.
Хитрость заключается в том, чтобы добавить магический номер gzip и метод сжатия к фактическим данным из zlib.compress :

Изменения:
@ d0sboots прокомментировал: Для данных RAW Deflate вам нужно добавить еще 2 нулевых байта:
→ «\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00»

Этот вопрос о SO дает больше информации об этом подходе. Ответ там предполагает, что есть также 8-байтовый нижний колонтитул.

Пользователи @ Vitali-Kushner и @ mark-bessey сообщили об успехе даже с усеченными файлами, поэтому нижний колонтитул gzip не кажется строго обязательным.

@ tobias-kienzler предложил эту функцию для bashrc :
zlipd() (printf «\x1f\x8b\x08\x00\x00\x00\x00\x00» |cat — $@ |gzip -dc)

Пользователь @tino прокомментировал ниже ответ OpenSSL, но я думаю, что это должно быть отдельным:

Я попробовал это, и это сработало для меня.

zlib-flate можно найти в пакете qpdf (в Debian Squeeze и Fedora 23, согласно комментариям в других ответах)

Я нашел решение (одно из возможных), оно использует openssl :

* ПРИМЕЧАНИЕ: функциональность zlib, по-видимому, доступна в последних версиях openssl> = 1.0.0 (OpenSSL должен быть настроен / собран с опцией zlib или zlib-dynamic, последняя используется по умолчанию)

Я рекомендую pigz от Марка Адлера , соавтора библиотеки сжатия zlib. Выполните, pigz чтобы увидеть доступные флаги.

-z —zlib Compress to zlib (.zz) instead of gzip format.

Вы можете распаковать, используя -d флаг:

-d —decompress —uncompress Decompress the compressed input.

Предполагая файл с именем «тест»:

  • pigz -z test — создает сжатый zlib файл с именем test.zz
  • pigz -d -z test.zz — преобразует test.zz в распакованный тестовый файл

На OSX вы можете выполнить brew install pigz

Источник

zlib (n) — Linux Man Pages

zlib: compression and decompression operations

Command to display zlib manual in Linux: $ man n zlib

zlib — compression and decompression operations

SYNOPSIS


DESCRIPTION

The zlib command provides access to the compression and check-summing facilities of the Zlib library by Jean-loup Gailly and Mark Adler. It has the following subcommands.

COMPRESSION SUBCOMMANDS


CHANNEL SUBCOMMAND

The following options may be set when creating a transformation via the « options . » to the zlib push command: -dictionary binData Sets the compression dictionary to use when working with compressing or decompressing the data to be binData . Not valid for transformations that work with gzip-format data. -header dictionary Passes a description of the gzip header to create, in the same format that zlib gzip understands. -level compressionLevel How hard to compress the data. Must be an integer from 0 (uncompressed) to 9 (maximally compressed). -limit readaheadLimit The maximum number of bytes ahead to read when decompressing. This defaults to 1, which ensures that data is always decompressed correctly, but may be increased to improve performance. This is more useful when the channel is non-blocking.

Both compressing and decompressing channel transformations add extra configuration options that may be accessed through chan configure . The options are: -checksum checksum This read-only option gets the current checksum for the uncompressed data that the compression engine has seen so far. It is valid for both compressing and decompressing transforms, but not for the raw inflate and deflate formats. The compression algorithm depends on what format is being produced or consumed. -dictionary binData This read-write options gets or sets the compression dictionary to use when working with compressing or decompressing the data to be binData . It is not valid for transformations that work with gzip-format data, and should not normally be set on compressing transformations other than at the point where the transformation is stacked. -flush type This write-only operation flushes the current state of the compressor to the underlying channel. It is only valid for compressing transformations. The type must be either sync or full for a normal flush or an expensive flush respectively. Flushing degrades the compression ratio, but makes it easier for a decompressor to recover more of the file in the case of data corruption. -header dictionary This read-only option, only valid for decompressing transforms that are processing gzip-format data, returns the dictionary describing the header read off the data stream. -limit readaheadLimit This read-write option is used by decompressing channels to control the maximum number of bytes ahead to read from the underlying data source. This defaults to 1, which ensures that data is always decompressed correctly, but may be increased to improve performance. This is more useful when the channel is non-blocking.

Читайте также:  Программное обеспечение лицензия windows

STREAMING SUBCOMMAND


CHECKSUMMING SUBCOMMANDS


STREAMING INSTANCE COMMAND

Streaming compression instance commands are produced by the zlib stream command. They are used by calling their put subcommand one or more times to load data in, and their get subcommand one or more times to extract the transformed data.

The full set of subcommands supported by a streaming instance command, stream , is as follows: stream add ? option. ? data A short-cut for « stream put ? option. ? data » followed by « stream get ». stream checksum Returns the checksum of the uncompressed data seen so far by this stream. stream close Deletes this stream and frees up all resources associated with it. stream eof Returns a boolean indicating whether the end of the stream (as determined by the compressed data itself) has been reached. Not all formats support detection of the end of the stream. stream finalize A short-cut for « stream put -finalize <> ». stream flush A short-cut for « stream put -flush <> ». stream fullflush A short-cut for « stream put -fullflush <> ». stream get ? count ? Return up to count bytes from stream ‘s internal buffers with the transformation applied. If count is omitted, the entire contents of the buffers are returned. stream header Return the gzip header description dictionary extracted from the stream. Only supported for streams created with their mode parameter set to gunzip . stream put ? option. ? data Append the contents of the binary string data to stream ‘s internal buffers while applying the transformation. The following option s are supported (or an unambiguous prefix of them), which are used to modify the way in which the transformation is applied: -dictionary binData Sets the compression dictionary to use when working with compressing or decompressing the data to be binData . -finalize Mark the stream as finished, ensuring that all bytes have been wholly compressed or decompressed. For gzip streams, this also ensures that the footer is written to the stream. The stream will need to be reset before having more data written to it after this, though data can still be read out of the stream with the get subcommand.

This option is mutually exclusive with the -flush and -fullflush options. -flush Ensure that a decompressor consuming the bytes that the current (compressing) stream is producing will be able to produce all the bytes that have been compressed so far, at some performance penalty.

This option is mutually exclusive with the -finalize and -fullflush options. -fullflush Ensure that not only can a decompressor handle all the bytes produced so far (as with -flush above) but also that it can restart from this point if it detects that the stream is partially corrupt. This incurs a substantial performance penalty.

This option is mutually exclusive with the -finalize and -flush options. stream reset Puts any stream, including those that have been finalized or that have reached eof, back into a state where it can process more data. Throws away all internally buffered data.

EXAMPLES

To compress a Tcl string, it should be first converted to a particular charset encoding since the zlib command always operates on binary strings.

When converting back, it is also important to reverse the charset encoding:

The compression operation from above can also be done with streams, which is especially helpful when you want to accumulate the data by stages:

Источник

Оцените статью