Курс по сетевым технологиям
A A A

Работа с архивами 

При работе с любой операционной системой возникают ситуации, когда необходимо заархивировать и сжать файлы. Например, для уменьшения места на диске либо отправка большого файла по электронной почте. Следует отличать архивирование и сжатие. Это совсем разные понятия. 

Архивирование - объединение нескольких файлов в один файл. При этом финальный файл может иметь суммарный размер архивированных файлов либо даже больше. Это связано с добавлением служебной информации. 

Сжатие - уменьшение размера исходного файла. 

В Linux существует несколько программ, позволяющие выполнять вышеописанные операции. 

 

Команда zip 

Распространена и в Windows. Если планируешь использовать файлы и в Windows, то смело пользуйся данной программой. Формат команды таков:

zip [опции] финальный_файл сжимаемый_файл

 

Попробуем сжать файл manual.pdf в домашнем каталоге:

Список файлов

 

zip Archive.zip manual.pdf

Архивирование документа командой zip


После исполнения команды указывается и степень сжатия в процентах.

А степень сжатия всегда одинакова? 

Нет, для разных файлов она всегда разная. Но можно задавать уровни сжатия. Команда zip поддерживает 10 уровней сжатия от 0 до 9, где 0 не сжимает, а просто архивирует файл. Например, так 

zip -9 Archive.zip manual.pdf

А какой уровень сжатия был, когда мы не указывали его? 

По умолчанию это всегда 6. 

А можно сжать сразу несколько файлов? 

Да. Можно указать последовательно несколько файлов, например, так 

zip documents.zip  manual.pdf  operations.pdf  maitenance.pdf

Последовательное сжатие нескольких файлов

Либо можно собрать все файлы в одном каталоге и указать в команде данный каталог. При этом необходимо воспользоваться опцией -r (--recursive), потому что иначе будет сжата только пустая папка: 

zip -r documents.zip  Documents/

 

Кстати, у данной команды есть возможность ввести пароль для защиты содержимого. Для этого существуют опции -P (--password) и -e (--encrypt): 

zip -P 12345 Archive.zip manual.pdf

Добавление пароля к файлу

Данная опция довольно небезопасная в плане сокрытия пароля, поэтому рекомендуется следующая опция: 

zip -e Archive.zip manual.pdf

Опция скрытого пароля

После этого команда запросит ввести пароль, который никто не увидит.

 

А как можно распаковать сжатый файл? 

Для этого существует команда unzip. Теперь распакуем наш файл Archive.zip: 

unzip Archive.zip

Распаковка файла

А можно как-нибудь узнать содержимое архива? Ведь не всегда же мне для этого надо его распаковывать. 

Конечно можно. Воспользуемся опцией -l (--list): 

unzip -l music.zip

Проверка содержимого архива

Иногда бывает, что архив поврежден, поэтому советую всегда его проверять с помощью опции -t (--test): 

unzip -t music.zip

Проверка архива на ошибки



Команды gzip, bzip2 

В Linux существуют и более мощные утилиты сжатия по сравнению с zip. Это gzip и bzip2. Обе утилиты очень похожи, но отличаются степенью сжатия. Работают они немного по-другому в отличие от zipФормат команд следующий:

gzip [опции] архивированный_файл 

bzip2 [опции] архивированный_файл

 

Попробуем выполнить команду gzip presentation.pdf:

Сжатие командой gzip

Как видно команда не выдает результата своей работы, кроме того она удалила исходный файл. 

Поэтому для слежения за ходом выполнения команды можно воспользоваться опцией -v (--verbose):

Отображение степени сжатия


А чтобы сохранить исходный файл воспользуемся опцией -k (--keep):

Сохранение файла опцией -k

 

А можно сразу задать другое имя архивированного файла? 

Конечно можно. Для этого необходимо воспользоваться опцией (--stdout) и перенаправить выходной поток в новый файл: 

gzip -cv presentation.pdf > MyDocument.pdf.gz

Перенаправление потока в файл

Как видно из рисунка исходный файл presentation.pdf остался нетронутым и не нужно пользоваться опцией -k (--keep). 

А если не указать перенаправление потока в другой файл, что будет? 

Тогда результат команды не будет сохранен и отобразится на экране терминала:

Отображение символов на экране


Кстати, у данной команды также доступны различные степени сжатия от 0 до 9, как и в у zip. 

А можно сжать сразу несколько файлов за один прием? 

Да, можно указать последовательно несколько файлов либо поместить их в каталог и вызвать команду gzip -r либо gzip  --recursive: 

gzip -rv Music/

Рекурсивное сжатие файлов в папке


Команда рекурсивно создаст архив каждого файла. 

А можно создать один общий архив всех файлов? 

Можно, но об этом немного позже.

 

Распаковка архива возможна 2-мя способами: 

gunzip MyDocument.pdf.gz

либо

gzip -d MyDocument.pdf.gz

либо

gzip --decompress MyDocument.pdf.gz

 

При распаковке удаляется исходный архив, поэтому, если нужно его сохранить, то необходимо воспользоваться опцией -k (--keep). 

Все вышеописанные опции и приемы доступны и для команды bzip2Для распаковки архива существует команда bunzip2. 

Для команд gunzip и bunzip2 доступны следующие опции: 

-t (--test) - проверка архива на ошибки

-l (--list) - отображение списка файлов в архиве без распаковки самого архива



Команда tar 

tar [опции] целевой_файл исходный файл

Данная команда служит только для архивирования одного или нескольких файлов. При создании архива исходный файл не удаляется. 

Для создания архива необходимо использовать опции -c (--create) и -f (--file). Например, создадим архив файла Report.doc: 

tar -cf  New_Archive.tar Report.doc

Создание архива командой tar


Запомни! При создании архива всегда помещай опцию -f в конец. Недопустимо, чтобы она была в начале или середине списка опций. То есть запись tar -fc неверная! 

А можно архивировать и целые каталоги? 

Да, достаточно в качестве исходного файла указать каталог. 

А как узнать список файлов в архиве без распаковки всего файла? 

Для этого существует опция -t (--list), использовать ее надо совместно с опцией -f (--file). Посмотрим что у нас в архиве Linux.tar: 

tar -tf Linux.tar

Получение списка файлов в архиве

Ну а если нужно распаковать архив, то воспользуемся опцией -x (--extract или --get): tar -xf Linux.tar

Теперь, когда мы умеем создавать архивы, мы можем воспользоваться командами gzip либо bzip2 для сжатия архивированного файла. 

Как мы уже знаем, данные команды не могут создавать единый архив из нескольких файлов, поэтому на помощь им приходит команда tar. 

Можно, конечно, воспользоваться символами групповых операций: 

tar -cf  Mymusic.tar music/; gzip -k Mymusic.tar

или

tar -cf Mymusic.tar music/ | gzip -c > Mymusic.tar.gz

Но существует запись получше. Вместо символов групповых операций достаточно воспользоваться специальными опциями. Чтобы сжать с помощью gzip применим опцию -z (--gzip) либо -j (--bzip2) для bzip2: 

tar -zcf Mymusic.tar.gz music/ 

tar -jcf Mymusic.tar.bz2 music/

 

Кстати, команда tar по умолчанию не отображает в терминале все свои действия, поэтому можно воспользоваться опцией -v (--verbose).

Ну а для того, чтобы разархивировать файл достаточно заменить опцию -c опцией -x (--extract): 

tar -zxf Mymusic.tar.gz 

или 

tar -jxf Mymusic.tar.bz2

А можно и здесь узнать список файлов, не распаковывая сам архив tar.gz или tar.bz2? 

Да, достаточно к вышеуказанной команде добавить опцию -t (--list): 

tar -zxtf  Mymusic.tar.gz 

или 

tar -jxtf  Mymusic.tar.bz2

 

Вот мы и рассмотрели часто используемые команды и опции для уверенной работы в Linux. В последующих уроках мы рассмотрим и другие команды.