Библиотека сайта rus-linux.net
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 | выдает список, проверяет или распаковывает файлы из архива |
unzipfsx | является самораспаковывающийся фрагмент, который можно добавить к началу архива |
zipgrep | ищет файлы в архиве |
zipinfo | выдает техническую информацию о файлах в архиве |
| содержит функции API, необходимые программам UnZip |
Перевод сделан с варианта оригинала, датированного 2011-10-23 00:19:32 +0000
Предыдущий раздел: | Оглавление | Следующий раздел: |
Пакет Which-2.20 и альтернативные пакеты | Пакет Zip-3.0 |