Команда unzip в Linux Эта программа извлекает файлы из .zip архивов через терминал. Используйте её для просмотра, проверки или извлечения файлов из архивов, включая ZIP-архивы, защищённые паролем. Типичное использование: «unzip file.zip» или «unzip file.zip -d /path». Она легковесна, удобна для скриптов и доступна в большинстве дистрибутивов через пакет «unzip».
Если вы работаете со сжатыми файлами на сервере или локальном компьютере, команда unzip в Linux — это быстрый и надежный способ распаковки .zip архивов. В этом руководстве рассматриваются установка, синтаксис, распространенные параметры, примеры из реальной жизни, вопросы безопасности и устранение неполадок — все, что вам нужно, чтобы уверенно использовать unzip в производственной или тестовой среде.
Что такое команда unzip в Linux?
unzip — это утилита командной строки, которая извлекает и проверяет содержимое .zip-архивов. Она поддерживает вывод списка содержимого, проверку целостности, выборочное извлечение, архивы, защищенные паролем, и надежное сопоставление с использованием подстановочных знаков. Она идеально подходит для автоматизации (скрипты оболочки, CI/CD), удаленного доступа. серверы через SSHа также быстрые рабочие процессы в терминале, где инструменты графического интерфейса недоступны.
Установите unzip на популярные дистрибутивы Linux.
На большинстве серверов unzip по умолчанию не включен. Установите его вместе с вашим пакетом. manager:
Debian / Ubuntu:
sudo apt update && sudo apt install -y unzip zipRHEL/CentOS/AlmaLinux/Rocky:
sudo dnf install -y unzip zip
# older releases: sudo yum install -y unzip zipFedora:
sudo dnf install -y unzip zipАрх/Манджаро:
sudo pacman -S unzip zipАльпийский:
sudo apk add unzip zipОсновной синтаксис и общие параметры
Базовый синтаксис прост:
unzip [options] archive.zip [file_pattern ...] -d target_directoryБыстрый старт: Распаковка ZIP-архива
# Extract to current directory
unzip site_backup.zip
# Extract to a specific directory
unzip site_backup.zip -d /var/www/htmlСписок файлов без распаковки (-l)
# Short listing
unzip -l site_backup.zip
# Verbose listing with attributes (-v shows more details)
unzip -v site_backup.zipПроверка целостности архива (-t)
unzip -t site_backup.zipЭто подтверждает, что архив не поврежден, что полезно для резервного копирования и конвейеров CI/CD.
Перезапись параметров управления (-n и -o)
По умолчанию при распаковке архива появляется запрос перед перезаписью существующих файлов. Используйте:
# Never overwrite existing files
unzip -n site_backup.zip
# Overwrite existing files without prompting
unzip -o site_backup.zipСелективное извлечение с использованием шаблонов и исключений
# Extract only PHP files from public/ directory
unzip site_backup.zip "public/*.php" -d /var/www/html
# Exclude specific paths or file types (-x)
unzip site_backup.zip -x "*/node_modules/*" "*.log" -d /var/www/htmlИспользование кавычек предотвращает интерпретацию символов подстановки вашей оболочкой, позволяя unzip обрабатывать шаблоны внутри себя.
Архивы, защищенные паролем (-P)
Для зашифрованных ZIP-архивов можно указать пароль. В общих средах предпочтительнее использовать интерактивные запросы.
# Inline password (avoid in shared shells or history-enabled sessions)
unzip -P "StrongPassword" secrets.zip -d ~/secure
# Safer: omit -P and let unzip prompt for the password
unzip secrets.zip -d ~/secureСохранить или игнорировать структуру папок (-j)
Используйте «лишние пути» для преобразования каталогов в плоские структуры во время распаковки:
# Extract everything into one folder without subdirectories
unzip -j images.zip -d ./images_flatUpdate vs Freshen (-u и -f)
Полезно для поэтапного развертывания или синхронизации.
# Update: extract only files that are newer than existing ones or missing
unzip -u build.zip -d /var/www/app
# Freshen: update only files that already exist (don’t create new files)
unzip -f build.zip -d /var/www/appТихий и неинтерактивный режимы (-q, -o, -n)
Для скриптов и cron jobsУменьшите уровень шума и избегайте подсказок:
# Quiet + overwrite
unzip -q -o release.zip -d /opt/app
# Quiet + never overwrite
unzip -q -n assets.zip -d /opt/app/assetsПрактические примеры и реальные сценарии использования
Пакетная распаковка нескольких архивов
Если в папке содержится много .zip-файлов, автоматизируйте их распаковку:
mkdir -p ~/archives/extracted
for z in ~/archives/*.zip; do
[ -e "$z" ] || continue
unzip -n "$z" -d ~/archives/extracted
doneИзвлекать только журналы или файлы определенных типов.
# Only .log files
unzip logs_backup.zip "*.log" -d ./logs
# Only images from nested folders
unzip media.zip "*.png" "*.jpg" "*.webp" -d ./public/imagesРекурсивная распаковка в подкаталогах
Распакуйте все найденные рекурсивно архивы по указанному пути:
find /data/backups -type f -name "*.zip" -print0 | while IFS= read -r -d '' z; do
unzip -n "$z" -d "${z%.zip}"
doneОбработка имен файлов, содержащих пробелы или специальные символы.
# Quote file specs; use -O to set character encoding if needed
unzip -O UTF-8 "backup with spaces.zip" -d ./restoreИспользуйте опцию -O, если архивы были созданы в системах с определенными кодировками.
Перед извлечением выполните поиск, поиск и фильтрацию содержимого.
# Find a file in the archive without extracting
unzip -l app.zip | grep -i "config.php"Вопросы разрешений, прав собственности и безопасности.
При распаковке файлов на серверах следует учитывать права доступа и безопасность.
- Собственность: Распаковка архива выполняется от имени текущего пользователя. При развертывании в корневые каталоги веб-сайта (например, /var/www) используйте привилегированную учетную запись с осторожностью или распакуйте архив во временную папку и переместите его с указанием прав владельца (chown -R www-data:www-data /var/www/html).
- Права доступа: Программа unzip пытается восстановить сохраненные режимы. После распаковки может потребоваться команда chmod для приведения настроек в соответствие с вашей политикой безопасности (например, для файлов 0644, для каталогов 0755).
- Символические ссылки: Архивы могут содержать символические ссылки. Извлекайте файлы только из надежных источников, чтобы избежать обхода путей или доступа к небезопасным целевым ссылкам.
- Окружающая среда: Избегайте встраивания паролей (-P) в многопользовательские системы; отдавайте предпочтение интерактивным подсказкам или внедрению среды в CI с осторожностью.
- Encoding: Используйте параметр -O для указания кодировки имени файла; несоответствие кодировок может привести к искажению имен файлов.
Устранение распространенных ошибок при распаковке архивов
- Подпись конца центрального каталога не найдена: Файл не является допустимым ZIP-архивом или усечен. Перезагрузите файл, проверьте контрольную сумму или убедитесь, что вы не переходите на страницу ошибки HTML, сохраненную как ZIP-архив.
- Не удаётся найти или открыть файл .zip: Убедитесь, что путь указан правильно и учитывается регистр символов. Используйте абсолютные пути или команду `cd` для перехода в нужную директорию.
- Пропуская: Файл уже существует; используйте -o для перезаписи: добавьте -o или -n в зависимости от желаемого поведения или сначала удалите целевой файл.
- Зашифрованный файл: Используйте параметр -P для указания пароля: укажите пароль или создайте архив заново без шифрования.
- Многотомные архивы (.z01, .z02… .zip): Убедитесь, что все части находятся в одной директории, и запустите программу для распаковки .zip-файла.
- Ошибки CRC/повреждения данных: Попробуйте сначала использовать команду unzip -t; если это не удастся, запросите новый архив или попробуйте восстановить его с помощью команды zip -FF (на стороне создателя).
Zip или tar.gz: что лучше использовать?
- Используйте .zip, когда вам необходима кроссплатформенная совместимость (Windows/macOS/Linux), сжатие файлов по отдельности и удобный графический интерфейс.
- Используйте .tar.gz для работы с нативными приложениями Linux, повышения степени сжатия больших кодовых баз и сохранения прав доступа и владения в формате UNIX в одном архиве.
- Для развертывания на серверах обычно используется формат tar.gz, но .zip тоже вполне подойдет, особенно при совместной работе с пользователями Windows.
Автоматизация распаковки в CI/CD и заданиях Cron
Обеспечьте детерминированность и безопасность извлечения данных в автоматизированном режиме. Используйте неинтерактивные флаги, гарантируйте идемпотентность и регистрируйте результаты.
# Example: deploy build artifact quietly and overwrite
set -euo pipefail
ARTIFACT="/tmp/build.zip"
DEST="/var/www/app"
if unzip -t "$ARTIFACT" >/dev/null; then
mkdir -p "$DEST"
unzip -q -o "$ARTIFACT" -d "$DEST"
find "$DEST" -type d -exec chmod 755 {} \;
find "$DEST" -type f -exec chmod 644 {} \;
chown -R www-data:www-data "$DEST"
echo "Deployment complete."
else
echo "Invalid artifact. Aborting." >&2
exit 1
fiДля обеспечения бесперебойной работы распакуйте архив в каталог релиза и атомарно замените символическую ссылку после проверки.
Полезные советы и менее известные варианты
- Сохранить метки времени: Команда `unzip` сохраняет сохраненные метки времени; проверьте это с помощью `ls -l`.
- Чувствительность к регистру: Шаблоны чувствительны к регистру, если только локаль вашей системы не меняет это поведение; используйте классы символов (например, «*.{JPG,jpg}»).
- Funzip для потоковой передачи: Функция funzip считывает данные из стандартного ввода и записывает декомпрессированные данные в стандартный вывод, что удобно в конвейерах обработки данных.
- zipinfo для получения метаданных: Команда `zipinfo -1 archive.zip` выводит простой список имен файлов.
- Исключить несколько каталогов: Объедините параметр -x с заключенными в кавычки шаблонами, чтобы пропустить папки node_modules, vendor или caches.
Часто задаваемые вопросы (FAQ)
Как распаковать файл в Linux в определенную директорию?
Используйте опцию -d. Пример: unzip archive.zip -d /path/to/target. Целевой каталог будет создан, если он не существует (если это возможно).
Как распаковать архив, не перезаписав существующие файлы?
Используйте -n, чтобы «никогда не перезаписывать». Например: unzip -n archive.zip. Чтобы всегда перезаписывать без запроса подтверждения, используйте -o.
Как распаковать защищенный паролем ZIP-архив в Linux?
Запустите unzip archive.zip и введите пароль, когда появится соответствующий запрос. Или укажите его с помощью параметра -P “password” (не рекомендуется на общих системах из-за раскрытия истории командной строки).
Как вывести содержимое ZIP-архива без его распаковки?
Выполните команду `unzip -l archive.zip` для получения краткого списка или `unzip -v archive.zip` для получения подробной информации, такой как метод сжатия и размеры файлов.
Можно ли извлечь из ZIP-архива только определённые файлы или папки?
ДаУкажите шаблоны и исключения. Примеры: unzip app.zip “public/*.php” -d ./site или unzip app.zip -x “*/tests/*” “*.md”. Всегда заключайте шаблоны в кавычки, чтобы unzip мог их обработать.
Что означает сообщение "Подпись центра каталога не найдена"?
Скорее всего, файл не является действительным ZIP-архивом, неполный или вы загрузили страницу с ошибкой. Проверьте URL-адрес, загрузите файл повторно или проверьте целостность с помощью команды unzip -t и контрольных сумм.
Устанавливается ли Unzip по умолчанию в Linux?
Не всегдаУстановите его через ваш пакет. manageНапример, в Ubuntu/Debian можно выполнить команду `sudo apt install unzip`, а в системах на базе Fedora/RHEL — `sudo dnf install unzip`.
Заключение
Освоение команды unzip в Linux обеспечивает быстрое и удобное управление .zip архивами, идеально подходящее для разработчиков, системных администраторов и владельцев сайтов. Независимо от того, развертываете ли вы файлы в продакшене, восстанавливаете резервные копии или автоматизируете CI/CD, описанные выше параметры помогут вам безопасно и эффективно распаковывать архивы. Для оптимизированного хостинга с SSH и надежные операции с файлами, изучите YouStableпланы.