Команды для архивации и сжатия файлов gzip, bzip2, zip
Сжатие файлов выполняется с целью уменьшения размера файла, и применяется по разным причинам. Чаще всего это делается для экономии места или же если вы пересылаете файл по сети, для экономии времени передачи. Сжатие и распаковка файлов можно осуществлять с помощью разных инструментов и методик, в том числе используя специальные утилиты, такие как gzip, zip т.д.
Утилита gzip
При сжатии в качестве аргумента вводятся имена файлов, которые необходимо сжать, также дополнительно можно применять опции (ключи). Указанный файл заменяется сжатой версией с расширением .gz., сохраняя владельца, режимы, права доступа, время модификации и метки исходного оригинального файла. В результате gzip выдает меньший процент сжатия чем его другие собратья (например, bzip2) используя довольно старый алгоритм, но при этом является нетребовательным к ресурсам системы, и как вариант подходящий для машин с небольшими мощностями.
Общий синтаксис команды таков:
$ gzip опции название_файлов/каталогов
где название_файлов/каталогов - файлы которые необходимо сжать.
В командной строке можно указать сразу несколько имен файлов или шаблоны имен файлов, просто отделив их пробелами. Но в этом случае каждый из указанных файлов будет заархивирован отдельно (общий архив не создается), как на примере ниже. Здесь команда ls используется для вывода списка файлов.
[maria@cp*nl ~]$ gzip newfile.txt newfile1.txt
[maria@cp*nl ~]$ ls -la newfile*
-rw-r--r-- 1 maria maria 26 Jul 60 13:48 newfile.txt.gz
-rw-r--r-- 1 maria maria 26 Jul 60 13:47 newfile1.txt.gz
Основные опции утилиты gzip:
-d - для восстановления оригинала файла со сжатой версии.
-h - для получения помощи об использовании, ключах и т.д.
-N - оставляет оригинальный выходной файл вместе со сжатым без замены, сохраняет его временные метки.
-l - получение информации об сжатом файле, его новый размер, процент сжатия, названия исходного файла и т.д.
-r - выполнить архивирование рекурсивно полностью всей директории (все подкаталоги и все файлы в этих подкаталогах).
-t - проверка на корректность прохождения процедуры сжатия файлов, если файлы повредились, выведется сообщение с ошибкой (использовать связкой с ключом -v для вывода сообщения с результатом проведения проверки).
-v - вывод дополнительной информации о процессе сжатия.
Также можно числами указать степень сжатия от 1 до 9, где соответственно 9 самая высокая степень сжатия, на выполнение какой будет употребляться больше ресурсов системы, по умолчанию задано как 6.
Пример, внедрим наивысший степень сжатия 9 для файла newfile.txt и в следующей команде выводим с помощью ключа -l сведения об сжатом файле.
[maria@cp*nl ~]$ gzip -9 newfile.txt
[maria@cp*nl ~]$ gzip -l newfile.txt.gz
compressed uncompressed ratio uncompressed_name
43 60 78.3% newfile.txt
Для распаковки gzip-архива можно воспользоваться либо командой gzip с ее опцией -d, либо командой gunzip. Эти команды приводят к распаковке файла с расширением .gz и заменяют его распакованной версией с тем же именем в выходное состояние.
$ gunzip опции название_архива
где название_архива - архив, который нужно распаковать.
Утилита zip
Утилита gzip идеально подходит для пользователей в системе с Linux. Если есть необходимость работать с тем же файлом в другой ОС (например, с Windows или MS DOS), более универсальной является zip, так как подходит для обмена файлами избегая проблем с совместимостью. Используется zip и для архивирования, и для сжатия. После процедуры файлы имеют расширение .zip.
Создание zip-архива задается следующей командой:
$ zip опции название_архива название_файлов/каталого
где на месте название_архива - прописываем имя нового архива, а на месте название_файлов/каталогов - вводим имена файлов/каталогов, которые нужно архивировать.
Пример, архивируем рекурсивно папку sale в архив с названием sale1. После ввода команды на экране будет выведена информация о ходе выполнения и состояние каждого файла, который добавляется в архив. После пути к файлу в скобках можно увидеть обозначение stored - добавление без сжатия, deflated - со сжатием и указывается процент достигнутого сжатия.
[maria@cp*nl ~]$ zip -r sale1 sale
adding: sale/ (stored 0%)
adding: sale/masha2.txt (deflated 58%)
adding: sale/formounth/ (stored 0%)
adding: sale/formounth/orders2.txt (stored 0%)
adding: sale/orders.txt (stored 0%)
Полезные опции:
-r - для рекурсивного архивирования;
-u - обновления архива, добавление лишь измененных или новых файлов;
Например, в той же папке sale изменим файл orders2.txt и создадим новый файл с названием article.txt, и добавим в уже существующий архив sale1.zip. Как видим сохранились лишь изменения, обновился один файл и один добавился.
[maria@cp*nl ~]$ zip -ru sale1 sale
updating: sale/ (stored 0%)
updating: sale/orders.txt (deflated 43%)
adding: sale/article.txt (deflated 87%)
-t - проведения тестирования на целостность созданного архива;
-d - удаление файла с созданного архива:
На примере, удалим с архива sale1.zip файл test1.txt.
[maria@cp*nl ~]$ zip sale1.zip -d test1.txt
deleting: test1.txt
-h - для получении справок (можно просмотреть все ключи)
-m - для добавления определенного файла в уже созданный архив;
-v - включить подробный режим для вывода дополнительной информации о выполнении процесса архивации.
Чтобы распаковать zip-архив также существует специальная команда unzip. Имеет следующий общий синтаксис:
$ unzip опции название_архива
После ввода команды система будет спрашивать о выполнении указанных действий для каждого файла, где y - даете соглашение на распаковку этого файла, n - не распаковывать этот файл, N - не распаковывать архив вообще, r - переименовать текущий файл. На примере был введен символ r, после чего система запросила ввести новое название файла.
replace sale/masha2.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: r
new name: maria
Для распаковки архива в определенную директорию применяется параметр -d, после чего указывается путь к папке. На примере распакуем архив sale1.zip в папку data.
[maria@cp*nl ~]$ unzip sale1.zip -d data
Archive: sale1.zip
creating: data/sale/
inflating: data/sale/masha2.txt
creating: data/sale/formounth/
extracting: data/sale/formounth/orders2.txt
inflating: data/sale/orders.txt
inflating: data/sale/article.txt
Утилита bzip2
Утилита bzip2 предназначена выполнять функцию сжатия. Главный плюс в сравнении с другими утилитами, что bzip2 предоставляет возможность сжатия с большим процентом, но поступается в скорости выполнения процесса самой архивации, что может негативно сказываться при работе с объемными файлами. Сам принцип действия и назначение похож на gzip, но использует другой алгоритм сжатия, тем самым реализует сжатия данных с высокой степенью. После процедуры файлы имеют расширение .bz2.
Рассмотрим простой синтаксис команды:
$ gbzip2 опции название_файлов/каталогов
Сжатый файл имеет те же временные метки, права доступа владельца, как и оригинальный файл, что дает в дальнейшем возможность сохранить эти атрибуты при распаковке файлов. Также если вы сжимаете одной командой несколько файлов не будет создаваться общий архив (каждый файл будет отдельно). Для выполнения архивация можно сначала через tar создать общий архив, и потом уже его сразу сжать.
Основные опции похожи с gzip, но есть и ряд отличий, например отсутствует ключ -r, или наличие параметров:
-k - оставляет оригинальный выходной файл вместе со сжатым, без замены;
-s - сократить употребляемые ресурсы процессами архивации, при этом увеличивается время выполнения сжатия;
Посмотреть все опции и краткое их описание можно стандартно через параметр -h.
[maria@cp*nl ~]$ bzip2 -h
bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010.
usage: bzip2 [flags and input files in any order]
-h --help print this message
-d --decompress force decompression
-z --compress force compression
-k --keep keep (don't delete) input files
-f --force overwrite existing output files
-t --test test compressed file integrity
-c --stdout output to standard out
-q --quiet suppress noncritical error messages
-v --verbose be verbose (a 2nd -v gives more)
-L --license display software version & license
-V --version display software version & license
-s --small use less memory (at most 2500k)
-1 .. -9 set block size to 100k .. 900k
--fast alias for -1
--best alias for -9
Распаковать сжатый файл можно с помощью bunzip2 или с добавлением параметра -d (аналогично к gzip).
$ bunzip2 опции название_архива
Сжатие как нигде необходимо в работе на хостинге, и дает экономить не только пространство, ну и деньги. Для более подробного ознакомления с утилитами можно использовать официальную документацию.