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

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

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

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

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

 

Команда zip

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

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

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

zip Archive.zip manual.pdf

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

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

Нет, для разных файлов она всегда разная. Но можно задавать уровни сжатия. Команда 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.

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

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

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

 

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

Конечно можно. Для этого необходимо воспользоваться опцией -с (—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

Запомни! При создании архива всегда помещай опцию -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. В последующих уроках мы рассмотрим и другие команды.