Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30
Назад 11. Системные утилиты Вперед

Пакет UnZip-6.0

Знакомимся с пакетом UnZip

В пакете UnZip находятся утилиты работы с форматом ZIP. Они используются для извлечения файлов из архивов ZIP. Архивы ZIP создаются с помощью утилит PKZIP или Info-ZIP, главным образом в среде DOS.

Предупреждение

В предыдущей версии пакета UnZip были некоторые проблемы, связанные с локалями. В настоящее время в проекте BLFS нет сотрудников, способных протестировать эти проблемы. Поэтому информация, касающаяся локалей, не проверялась, хотя и осталась на этой странице. Обратите внимание, что патч, рекомендуемый для исправления проблем с локалями, не следует применять к этой версии пакета UnZip. Смотрите обсуждение ниже в разделе "Вопросы, связанные с локалями в UnZip". Более общее обсуждение этих проблем можно найти в разделе "Кодировки, используемые программами" на странице "Вопросы, связанные с локалями".

Известно, что пакет правильно собирается и работает на платформе LFS-7.0.

Информация о пакете

  • Загрузка (HTTP): http://downloads.sourceforge.net/infozip/unzip60.tar.gz
  • Контрольная сумма MD5: 62b490407489521db863b523a7f86375
  • Размер загружаемого пакета: 1,3 MB
  • Оценочный размер требуемого дискового пространства: 9 MB
  • Оценочное время сборки: 0,1 SBU

Замечания для пользователей: http://wiki.linuxfromscratch.org/blfs/wiki/unzip

Вопросы, связанные с локалями в UnZip

Замечание

Применение UnZip в JDK, Mozilla, DocBook или в любых других пакетах, устанавливаемых в BLFS, проблем не вызывает, поскольку в инструкциях BLFS UnZip никогда не используется для извлечения файлов с именами, в которых используются символы, не являющимися символами ASCII.

В пакете UnZip предполагается, что имена файлов, которые хранятся в архивах ZIP, созданных не в Unix системах, кодируются в кодировке CP850, и, поэтому, они, когда файлы записываются в файловую систему, должны быть преобразованы в кодировку ISO-8859-1. Такие предположения не всегда справедливы. В самом деле, внутри архива ZIP имена файлов кодируются согласно кодовой странице DOS, которая используется в конкретной стране, а имена файлов, размещаемых на, диске должны указываться в кодировке локали. В MS Windows функция OemToChar () языка С (из User32.DLL) выполняет правильное преобразование (которая действительно выполняет преобразование из кодировки CP850 в расширенную кодировку ISO-8859-1 в случае когда в MS Windows используется язык US English) , но в Linux ее эквивалент отсутствует.

Когда unzip используется для распаковки архива ZIP, в котором есть имена файлов с символами, не являющимися символами кодировки ASCII, имена файлов повреждаются из-за того, что в unzip и, исходя из неправильных предположений о кодировки, используются неправильные преобразования. Например, в локали ru_RU.KOI8-R требуется преобразование имен файлов из CP866 в KOI8-R, но выполняется преобразование из CP850 в ISO-8859-1, в результате чего создаются имена файлов, состоящие из нераспознаваемых символов (ближайших эквивалентным понятным примером только для англоязычных пользователей является rot13). Есть несколько способов обойти это ограничение:

1) Для распаковки архивов с именами, содержащими символы, не являющиеся символами ASCI, используйте WinZip, работающий под эмулятором Windows Wine.

2) После запуска unzip исправьте испорченные имена файлов с помощью инструментального средства convmv (http://j3e.de/linux/convmv/). Ниже приведен пример для локали ru_RU.KOI8-R:

Шаг 1. Отмените операцию преобразования, выполненную с помощью unzip:

convmv -f iso-8859-1 -t cp850 -r --nosmart --notest \
    <path/to/unzipped/files>

Шаг 2. Вместо этого выполните правильное преобразование:

convmv -f cp866 -t koi8-r -r --nosmart --notest \
    <path/to/unzipped/files>

Установка пакета UnZip

case `uname -m` in
  i?86)
    sed -i -e 's/DASM"/DASM -DNO_LCHMOD"/' unix/Makefile
    make -f unix/Makefile linux
    ;;
  *)
    sed -i -e 's/CFLAGS="-O -Wall/& -DNO_LCHMOD/' unix/Makefile
    make -f unix/Makefile linux_noasm
    ;;
esac

Чтобы проверить результаты, выполните команду make check.

Теперь в роли пользователя root выполните:

make prefix=/usr install

Пояснение команд

sed ...: Эта команда гарантирует, что не будет создан устаревший системный вызов

linux, linux_noasm: Параметр linux для target в Makefile предполагает, что компиляция исполняемых модулей выполняется для системы Linux, но этот параметр также используется для некоторых вариантов 32-битного ассемблерного кода с архитектурой x86. Параметр linux_noasm будет указывать, что сборка выполняется для всех вариантов Linux. Чтобы узнать о других параметрах, используемых для target, выполните команду make -f unix/Makefile list

Описание пакета

Установленные программы: funzip, unzip, unzipfsx, zipgrep и zipinfo

Установленные библиотеки: Нет

Установленные директории: Нет

Краткое описание

funzip

позволяет перенаправлять выходные данные команды unzip

unzip

выдает список, проверяет или распаковывает файлы из архива ZIP

unzipfsx

является самораспаковывающийся фрагмент, который можно добавить к началу архива ZIP. Если его добавить в файл этого формата, то файл, в который он добавлен, можно распаковывать без установки UnZip

zipgrep

ищет файлы в архиве ZIP, совпадающие с шаблоном

zipinfo

выдает техническую информацию о файлах в архиве ZIP, в том права доступа к файлам, статус шифрования, тип сжатия и т.д.

libunzip.so

содержит функции API, необходимые программам UnZip

Перевод сделан с варианта оригинала, датированного 2011-10-23 00:19:32 +0000


Предыдущий раздел: Оглавление Следующий раздел:
Пакет Which-2.20 и альтернативные пакеты   Пакет Zip-3.0