- Как заархивировать или разархивировать файлы из терминала Linux
- Формат сжатого архива ZIP
- zip, unzip и другие утилиты
- Как создать ZIP-файл с помощью команды zip
- Включение каталогов в ZIP-файлы
- Установка уровня сжатия
- Добавление паролей к ZIP-файлам
- Как разархивировать ZIP-файл с помощью команды unzip
- Извлечение файлов в целевой каталог
- Извлечь ZIP-файлы, защищенные паролем
- Исключение файлов
- Перезапись файлов
- Заглянуть внутрь ZIP-файла
- Добавьте пароль с помощью команды zipcloak
- Просмотр сведений о файле с помощью команды zipdetails
- Поиск внутри файла с помощью команды zipgrep
- Просмотр информации с помощью команды zipinfo
- Разделите файл с помощью команды zipsplit
Как заархивировать или разархивировать файлы из терминала Linux
ZIP-файлы — это универсальный архив, обычно используемый в системах Windows, macOS и даже Linux. Вы можете создать zip-архив или распаковать файлы из него с помощью некоторых распространенных команд терминала Linux.
Формат сжатого архива ZIP
Благодаря доминированию формата ZIP в среде Windows, ZIP-файлы, вероятно, являются наиболее распространенной формой сжатого архива в мире.
Хотя файлы .tar.gz и tar.bz2 распространены в Linux, пользователи Windows, вероятно, отправят вам архив в формате ZIP. И, если вы хотите заархивировать некоторые файлы и отправить их пользователю Windows, формат ZIP будет самым простым и совместимым решением для всех.
zip, unzip и другие утилиты
Возможно, вы уже знаете, что Linux и Unix-подобные операционные системы, такие как macOS, имеют инструменты, позволяющие создавать ZIP-файлы и извлекать из них файлы, называемые zip и unzip . Но есть целое семейство связанных утилит, таких как zipcloak , zipdetails , zipsplit и zipinfo .
Мы проверили некоторые дистрибутивы Linux, чтобы узнать, включают ли они эти утилиты в стандартную установку. Все утилиты присутствовали в Ubuntu 19.04, 18.10 и 18.04. Они также присутствовали в Manjaro 18.04. Fedora 29 включала zip и unzip , но ни одну из других утилит, и это также имело место для CentOS.
Чтобы установить недостающие элементы в Fedora 29, используйте следующую команду:
sudo dnf install perl-IO-Compress
Чтобы установить недостающие элементы в CentOS 7, используйте следующую команду:
sudo yum install perl-IO-Compress
Если какие-либо утилиты zip отсутствуют в дистрибутиве Linux, не упомянутом выше, используйте инструмент управления пакетами этого дистрибутива Linux для установки необходимого пакета.
Как создать ZIP-файл с помощью команды zip
Чтобы создать ZIP-файл, вам нужно указать zip имя файла архива и какие файлы в него включить. Вам не нужно добавлять расширение «.zip» к имени архива, но это не повредит, если вы это сделаете.
Чтобы создать файл с именем source_code.zip , содержащий все файлы исходного кода C и файлы заголовков в текущем каталоге, вы должны использовать эту команду:
Каждый файл отображается по мере его добавления. Отображается имя файла и степень сжатия, достигнутая для этого файла.
Если вы посмотрите на новый ZIP-архив, вы увидите, что расширение «.zip» было добавлено автоматически с помощью zip .
Если вы не хотите видеть вывод из zip при создании ZIP-файла, используйте параметр -q (тихий).
Включение каталогов в ZIP-файлы
Чтобы включить подкаталоги в ZIP-файл, используйте параметр -r (рекурсивный) и укажите имя подкаталога в командной строке. Чтобы создать ZIP-файл, как и раньше, а также включить в него подкаталог архива, используйте эту команду.
zip -r -q source_code archive/ *.c *.h
Чтобы быть внимательным к человеку, который будет извлекать файлы из ZIP-файла, который вы создаете, часто вежливо создавать ZIP-файлы с файлами внутри него, содержащимися в каталоге. Когда человек, получивший ZIP-файл, извлекает его, все файлы аккуратно помещаются в каталог на его компьютере.
В следующей команде мы собираемся заархивировать каталог work и все подкаталоги. Обратите внимание, что эта команда запускается из родительского каталога папки work .
Установка уровня сжатия
Вы можете установить степень сжатия файлов при их добавлении в ZIP-архив. Диапазон значений от 0 до 9, где 0 означает полное отсутствие сжатия. Чем выше степень сжатия, тем больше времени требуется для создания ZIP-файла. Для ZIP-файлов небольшого размера разница во времени не является значительным штрафом. Но тогда для ZIP-файлов небольшого размера стандартное сжатие (уровень 6), вероятно, в любом случае будет достаточно хорошим.
Чтобы заставить zip использовать определенный уровень сжатия, передайте число как параметр в командной строке со знаком «-», например:
zip -0 -r -q source_code work/
Уровень сжатия по умолчанию равен 6. Нет необходимости указывать параметр -6 , но если вы это сделаете, это не повредит.
Максимальный уровень сжатия — уровень 9.
zip -9 -r -q source_code work/
При выборе файлов и каталогов, архивируемых здесь, разница между отсутствием сжатия (уровень 0) и сжатием по умолчанию (уровень 6) составляет 400 КБ. Разница между сжатием по умолчанию и самым высоким уровнем сжатия (уровень 9) составляет всего 4K.
Это может показаться немного, но для архивов, содержащих сотни или даже тысячи файлов, небольшое дополнительное сжатие для каждого файла приведет к существенной экономии места.
Добавление паролей к ZIP-файлам
Добавлять пароли к ZIP-файлам очень просто. Используйте опцию -e (зашифровать), и вам будет предложено ввести свой пароль и ввести его повторно для проверки.
zip -e -r -q source_code work/
Как разархивировать ZIP-файл с помощью команды unzip
Чтобы извлечь файлы из ZIP-файла, используйте команду unzip и укажите имя ZIP-файла. Обратите внимание, что вам нужно указать расширение «.zip».
По мере извлечения файлов они отображаются в окне терминала.
ZIP-файлы не содержат информации о владении файлом. У всех извлекаемых файлов владельцем является пользователь, который их извлекает.
Как и zip , unzip имеет параметр -q (тихий), поэтому вам не нужно видеть список файлов, так как файлы извлечено.
Извлечение файлов в целевой каталог
Чтобы файлы были извлечены в определенный каталог, используйте параметр -d (каталог) и укажите путь к каталогу, в который вы хотите извлечь архив.
unzip -q source_code.zip -d ./development
Извлечь ZIP-файлы, защищенные паролем
Если ZIP-файл был создан с паролем, unzip запросит у вас пароль. Если вы не укажете правильный пароль, unzip не извлечет файлы.
Если вас не волнует, что ваш пароль увидят другие, а также то, что он будет сохранен в вашей истории команд, вы можете указать пароль в командной строке с помощью параметра -P (пароль). (Вы должны использовать заглавную «П.»)
unzip -P fifty.treacle.cutlass -q source_code.zip
Исключение файлов
Если вы не хотите извлекать определенный файл или группу файлов, используйте параметр -x (исключить). В этом примере мы хотим извлечь все файлы, кроме тех, которые заканчиваются расширением «.h».
unzip -q source_code.zip -x *.h
Перезапись файлов
Предположим, вы распаковали архив, но по ошибке удалили несколько извлеченных файлов.
Быстрым решением для этого будет повторное извлечение файлов. Но если вы попытаетесь распаковать ZIP-файл в тот же каталог, что и раньше, unzip предложит вам принять решение относительно перезаписи файлов. Ожидается один из следующих ответов.
За исключением ответа r (переименовать), эти ответы чувствительны к регистру.
- y: Да, перезаписать этот файл
- n: Нет, не перезаписывать этот файл
- О: Все, перезаписать все файлы
- Н: Нет, не перезаписывать ни один из файлов
- r: переименуйте, извлеките этот файл, но дайте ему новое имя. Вам будет предложено ввести новое имя.
Чтобы заставить unzip перезаписать любые существующие файлы, используйте параметр -o (перезаписать).
Наиболее эффективным способом замены отсутствующих файлов будет использование unzip для извлечения из архива только тех файлов, которые не находятся в целевом каталоге. Для этого используйте параметр -n (никогда не перезаписывать).
Заглянуть внутрь ZIP-файла
Часто бывает полезно и поучительно просмотреть список файлов внутри ZIP-файла перед его извлечением. Вы можете сделать это с помощью опции -l (список архивов). Он передается через less , чтобы сделать вывод управляемым.
unzip -l source_code.zip | less
Вывод показывает каталоги и файлы в ZIP-файле, их длину, а также время и дату добавления в архив. Нажмите «q», чтобы выйти из less .
Как мы увидим, есть и другие способы заглянуть внутрь ZIP-файла, которые предоставляют различные типы информации.
Добавьте пароль с помощью команды zipcloak
Если вы создали ZIP-файл, но забыли добавить пароль, что вы можете сделать? Вы можете быстро добавить пароль к ZIP-файлу с помощью команды zipcloak . Передайте имя ZIP-файла в командной строке. Вам будет предложено ввести пароль. Вам необходимо подтвердить пароль, введя его второй раз.
Просмотр сведений о файле с помощью команды zipdetails
Команда zipdetails покажет вам много информации о ZIP-файле. Единственный разумный способ справиться с объемом вывода, который может дать эта команда, — передать его через less .
zipdetails source_code.zip | less
Обратите внимание, что информация будет включать имена файлов, даже если ZIP-файл защищен паролем. Этот тип информации хранится в ZIP-файле в виде метаданных и не является частью зашифрованных данных.
Поиск внутри файла с помощью команды zipgrep
Команда zipgrep позволяет выполнять поиск внутри файлов в ZIP-файле. В следующем примере мы хотим узнать, какие файлы в ZIP-файле содержат текст «keyval.h».
zipgrep keyval.h source_code.zip
Мы видим, что файлы slang.c и getval.c содержат строку «keyval.h». Мы также видим, что есть две копии каждого из этих файлов. в разных каталогах ZIP-файла.
Просмотр информации с помощью команды zipinfo
Команда zipinfo дает вам еще один способ заглянуть внутрь ZIP-файла. Как и раньше, мы передаем вывод через less .
zipinfo source_code.zip | less
Слева направо вывод показывает:
- Права доступа к файлам
- Версия инструмента, использованного для создания ZIP-файла.
- Исходный размер файла
- Описатель файла (описан ниже)
- Метод сжатия (в данном случае дефляция)
- Данные и отметка времени
- Имя файла и любого каталога
Дескриптор файла состоит из двух символов. Первым символом будет t или b, чтобы указать текстовый или двоичный файл. Если это заглавная буква, файл зашифрован. Второй символ может быть одним из четырех символов. Этот символ указывает, какой тип метаданных включен в этот файл: нет, расширенный локальный заголовок, «дополнительное поле» или и то, и другое.
- -: Если ни один из них не существует, символ будет дефисом.
- l: если есть расширенный локальный заголовок, но нет дополнительного поля
- x: если нет расширенного локального заголовка, но есть дополнительное поле
- X, если есть расширенный локальный заголовок и дополнительное поле
Разделите файл с помощью команды zipsplit
Если вам нужно отправить ZIP-файл кому-то еще, но есть ограничения по размеру или проблемы с передачей файла, вы можете использовать команду zipsplit , чтобы разделить исходный ZIP-файл на набор меньших ZIP-файлов. файлы.
Опция -n (размер) позволяет установить максимальный размер для каждого из новых ZIP-файлов. В этом примере мы разделяем файл source_code.zip . Мы не хотим, чтобы какой-либо из новых ZIP-файлов был больше 100 КБ (102400 байт).
zipsplit -n 102400 source_code.zip
Выбранный вами размер не может быть меньше размера любого из файлов в ZIP-файле.
Используя эти команды, вы можете создавать свои собственные ZIP-файлы, распаковывать полученные ZIP-файлы и выполнять с ними различные другие операции, даже не выходя из терминала Linux.
Linux Commands | |
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts