Какая из команд используется для сжатия файла

Обновлено: 04.07.2024

Команда gzip предназначена для сжатия данных без потерь с помощью одноименной утилиты, использующей алгоритм Лемпела-Зива (LZ77) с кодированием Хаффмана. Целью использования данной утилиты является экономия дискового пространства. Упомянутый алгоритм позволяет достичь худшей степени сжатия данных, чем те, которые реализованы в рамках утилит bzip2 и xz. При этом данный алгоритм является стандартным алгоритмом утилиты zip и используется по умолчанию в архивах формата ZIP. Кроме того, он является менее ресурсоемким, чем алгоритмы, которые реализованы в рамках утилит bzip2 и xz. Последнее обстоятельство обуславливает актуальность данной утилиты для низкопроизводительных систем.

Базовый синтаксис команды выглядит следующим образом:

Чаще всего gzip используется вообще без каких-либо параметров, причем в качестве аргументов может передаваться неограниченное количество имен файлов, которые следует сжать. По умолчанию оригинальные версии файлов заменяются на их сжатые версии с соответствующими метаданными (то есть, меткой времени модификации, правами доступа, именами владельца и группы владельцев и так далее). Если вас не устраивает такое положение дел, вы можете воспользоваться параметром -k для сохранения оригинальных версий файлов. Параметры из диапазона от -1 до -9 позволяют задать степень сжатия (от самой низкой до самой высокой соответственно), при этом чем выше степень сжатия, тем больше системных ресурсов требуется утилите. Параметр -t предназначен для тестирования целостности сжатого файла и не оказывает какого-либо влияния на него (следует комбинировать его с параметром -v для подробного вывода). Параметр -l также не оказывает никакого влияния на сжатый файл и предназначен для получения информации об архиве (размеров сжатого и не сжатого файлов, степени сжатия и имени оригинального файла). Параметр -d позволяет восстановить оригинальные версии файлов с переданными именами на основе их сжатых версий.

Если же вам нужно создать архив с несколькими файлами внутри, одной утилиты gzip будет явно мало. Для этой цели также понадобится утилита tar, с помощью которой можно создать архив с файлами, после чего сжать этот архив с помощью утилиты gzip. Например, вы можете использовать следующую последовательность команд для создания архива с именем archive.tar.gz:

Параметры -c и -f утилиты tar предназначены для указания на необходимость добавления всех файлов в один архив (-c) и чтения имени файла архива из следующего аргумента (-f). Альтернативным вариантом является замена последней команды на параметр -z утилиты tar, позволяющий автоматически сжать полученный архив с помощью gzip:

Примеры использования

1. Сжатие одного файла

В результате оригинальный файл text.txt будет заменен на свою сжатую версию text.txt.gz.

2. Одновременное сжатие нескольких файлов

В этом случае также все оригинальные версии файлов (text1.txt, text2.txt, text3.txt) будут заменены на сжатые версии (text1.txt.gz, text2.txt.gz, text3.txt.gz). Добавление нескольких файлов в единый файл архива будет рассмотрено ниже.

3. Сжатие одного файла с сохранением оригинала

Теперь оригинальный файл text.txt будет оставлен в директории вместе со сжатой версией text.txt.gz.

4. Восстановление оригинальной версии файла из сжатой версии

В результате сжатая версия файла text.txt.gz будет заменена на его оригинальную версию text.txt. Если вам нужно сохранить сжатую версию, следует воспользоваться параметром -k таким же образом, как было показано выше.

5. Сжатие файла с указанием степени сжатия

Степень сжатия файла может регулироваться с помощью параметров из диапазона от -1 (минимальная) до -9 (максимальная). Команда для сжатия файла с минимальной степенью сжатия:

С максимальной степенью сжатия:

При этом параметр -1 может заменяться на параметр --fast, а параметр -9 — на параметр --best.

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

В результате будет создан архив etc.tar.gz с файлами из директории /etc/.

7. Проверка целостности сжатой версии файла

8. Получение информации о сжатом файле

Очевидно, что в столбце compressed выводится размер сжатого файла в байтах, в столбце uncompressed — размер несжатого файла в байтах, в столбце ratio — степень сжатия файла, а в столбце uncompressed_name — имя оригинального файла. Вся эта информация хранится в заголовке сжатого файла.

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

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

Архивирование в Linux

Важно отметить, что архивирование в linux это не одно и то же что и сжатие файлов linux. Архивирование - это объединение нескольких небольших файлов в один, с целю более удобной последующей передачи, хранения, шифрования или сжатия. Как я уже сказал, архивация выполняется специальными утилитами. Мы не будем трогать архивацию файлов в графическом интерфейсе, вы с ними разберетесь сами, наша тема - терминал.

Самой популярной для Linux утилитой для архивации есть tar. Она используется почти везде, для архивации исходников, упаковки пакетов. Для сжатия используются другие утилиты, в зависимости от алгоритма сжатия, например, zip, bz, xz, lzma и т д. Сначала выполняется архивация, затем сжатие, отдельными программами. Автоматический запуск некоторых утилит сжатия для только что созданного архива поддерживается в tar и других подобных программах с помощью специальных опций.

Также полезной возможностью архивации есть шифрование. Но теперь давайте рассмотрим какие существуют утилиты, с помощью которых выполняется архивирование файлов linux и как ими пользоваться.

Tar - это стандартная утилита, с помощью которой выполняется архивирование файлов Linux. Постепенно из небольшой программы архивации она превратилась в мощный инструмент, поддерживающий работу со многими вариантами архивов и алгоритмами сжатия. Программа поддерживает большое количество параметров. Давайте рассмотрим ее синтаксис и основные параметры:

$ tar опции f файл_для_записи /папка_файлами_для_архива

А теперь разберем основные опции:

  • A - добавить файл к архиву
  • c - создать архив в linux
  • d - сравнить файлы архива и распакованные файлы в файловой системе
  • j - сжать архив с помощью Bzip
  • z - сжать архив с помощью Gzip
  • r - добавить файлы в конец архива
  • t - показать содержимое архива
  • u - обновить архив относительно файловой системы
  • x - извлечь файлы из архива
  • v - показать подробную информацию о процессе работы
  • f - файл для записи архива
  • -C - распаковать в указанную папку
  • --strip-components - отбросить n вложенных папок

Теперь давайте рассмотрим архивирование файлов в Linux. Чтобы создать архив используйте такую команду:

tar -cvf archive.tar.gz /path/to/files

А чтобы распаковать архив tar linux:

tar -xvf archive.tar.gz

Очень просто запомнить для упаковки используется опция c - Create, а для распаковки - x - eXtract.

Сжатый архив создается точно так же, только с опцией -z, это в случае, если использовалось шифрование gizp, если нужно bzip то применяется опция -j:

tar -zcvf archive.tar.gz /path/to/files

$ tar -zxvf archive.tar.gz

Например, рассмотрим как заархивировать папку в Linux:

tar -zcvf home.tar.gz

Хотя можно поступить по-другому, тот же архив мы получим если сначала создать обычный архив с помощью tar, а потом сжать его утилитой для сжатия, только здесь мы получаем больше контроля над процессом сжатия:

Также можно убрать сжатие:

Утилиты сжатия мы рассмотрим ниже.

Чтобы добавить файл в архив используйте:

tar -rvf archive.tar file.txt

Для извлечения одного файла синтаксис тот же:

tar -xvf archive.tar file.txt

Можно извлечь несколько файлов по шаблону соответствия с помощью параметра wildcard, например, извлечем все php файлы:

tar -xvf archive.tar --wildcards '*.php'

По умолчанию распаковать архив tar linux можно в текущую папку с именем архива, чтобы распаковать в нужную папку используйте ключ -C:

tar -xvf archive.tar -C /path/to/dir

Стандартную утилиту рассмотрели, теперь кратко рассмотрим ее альтернативы. Их не так много, и большинство из них уже устаревшие.

Shar позволяет создавать самораспаковывающиеся архивы. По сути, это скрипт оболочки, и для распаковки ему необходима оболочка Bash или другая совместимая с Bourne Shell. У Shar есть несколько преимуществ, но также он потенциально небезопасный, так как архив представляет собой исполняемый файл.

  • -o - сохранять архив в файл вместо стандартного вывода
  • -l - ограничить размер выходного файла
  • -L - ограничить размер выходного файла и разбить его на части
  • -n - имя архива не будет включено в заголовок
  • -a - разрешить автоматическую генерацию заголовков

Примеры использования shar для того чтобы заархивировать папку linux:

Создаем shar архив:

shar file_name.extension > filename.shar

Распаковываем shar архив:

ar - утилита для создания и управления архивами. В основном используется для архивации статических библиотек, но может быть использована для создания любых архивов. Раньше использовалась довольно часто но была вытеснена утилитой tar. Сейчас используется только для создания и обновления файлов статических библиотек.

  • - d - удалить модули из архива
  • - m - перемещение членов в архиве
  • - p - напечатать специфические члены архива
  • - q - быстрое добавление
  • - r - добавить члена к архиву
  • - s - создать индекс архива
  • - a - добавить новый файл к существующему архиву

Теперь рассмотрим примеры использования. Создадим статическую библиотеку libmath.a из объектных файлов substraction.o и division.o:

ar cr libmath.a substraction.o division.o

Теперь извлечем файлы из архива:

Таким образом, можно распаковать любую статическую библиотеку.

cpio - означает Copy in and out (скопировать ввод и вывод). Это еще один стандартный архиватор для Linux. Активно используется в менеджере пакетов Red Hat, а также для создания initramfs. Архивация в Linux для обычных файлов с помощью этой программы не применяется.

  • -a - сбросить время обращения к файлам после их копирования
  • -A - добавить файл
  • -d - создать каталоги при необходимости

Пример использования. Создаем cpio архив:

file1.o file2.o file3.o

ls | cpio -ov > /path/to/output_folder/obj.cpio

cpio -idv < /path/to folder/obj.cpio

Архивирование папки linux выполняется также само.

Сжатие архивов в Linux

Как создать архив в linux рассмотрели. Теперь давайте поговорим о сжатии. Как я говорил, для сжатия используются специальные утилиты. Рассмотрим кратко несколько из них

Чаще всего применяется Gzip. Это стандартная утилита сжатия в Unix/Linux. Для декомпрессии используется gunzip или gzip -d Сначала рассмотрим ее синтаксис:

$ gzip опции файл

$ gunzip опции файл

Теперь разберем опции:

  • -c - выводить архив в стандартный вывод
  • -d - распаковать
  • -f - принудительно распаковывать или сжимать
  • -l - показать информацию об архиве
  • -r - рекурсивно перебирать каталоги
  • -0 - минимальный уровень сжатия
  • -9 - максимальный уровень сжатия

Примеры использования вы уже видели в описании утилиты tar. Например, выполним сжатие файла:

gzip -c файл > архив.gz

А теперь распакуем:

gunzip -c архив.gz

Но чтобы сжать папку в Linux вам придется сначала заархивировать ее с помощью tar, а уже потом сжать файл архива с помощью gzip.

bzip2 - еще одна альтернативная утилита сжатия для Linux. Она более эффективная чем gzip, но работает медленнее. Для распаковки используйте утилиту bunzip2.

Описывать опции bzip2 я не буду, они аналогичны gzip. Чтобы создать архив в Linux используйте:

В текущем каталоге будет создан файл file.bz2

Новый и высокоэффективный алгоритм сжатия. Синтаксис и опции тоже похожи на Gzip. Для распаковки используйте unlzma.

Еще один высокоэффективный алгоритм сжатия. Обратно совместимый с Lzma. Параметры вызова тоже похожи на Gzip.

Кроссплатформенная утилита для создания сжатых архивов формата zip. Совместимая с Windows реализациями этого алгоритма. Zip архивы очень часто используются для обмена файлами в интернете. С помощью этой утилиты можно сжимать как файлы, так и сжать папку linux.

$ zip опции файлы

$ unzip опции архив

Чтобы создать Zip архив в Linux используйте:

zip -r /path/to/files/*

А для распаковки:

Как видите архивирование zip в Linux не сильно отличается от других форматов.

Выводы

Теперь вы знаете все что нужно об архивации файлов в Linux. Мы рассмотрели только консольные команды, так сказать, чтобы была понятна суть. В графическом интерфейсе все еще проще. Если остались вопросы - задавайте их в комментариях.

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

Утилита gzip

При сжатии в качестве аргумента вводятся имена файлов, которые необходимо сжать, также дополнительно можно применять опции (ключи). Указанный файл заменяется сжатой версией с расширением .gz., сохраняя владельца, режимы, права доступа, время модификации и метки исходного оригинального файла. В результате gzip выдает меньший процент сжатия чем его другие собратья (например, bzip2) используя довольно старый алгоритм, но при этом является нетребовательным к ресурсам системы, и как вариант подходящий для машин с небольшими мощностями.

Общий синтаксис команды таков:

$ gzip опции название_файлов/каталогов

где название_файлов/каталогов - файлы которые необходимо сжать.

В командной строке можно указать сразу несколько имен файлов или шаблоны имен файлов, просто отделив их пробелами. Но в этом случае каждый из указанных файлов будет заархивирован отдельно (общий архив не создается), как на примере ниже. Здесь команда ls используется для вывода списка файлов.

]$ 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 - выполнить архивирование рекурсивно полностью всей директории (все подкаталоги и все файлы в этих подкаталогах).

-v - вывод дополнительной информации о процессе сжатия.

Также можно числами указать степень сжатия от 1 до 9, где соответственно 9 самая высокая степень сжатия, на выполнение какой будет употребляться больше ресурсов системы, по умолчанию задано как 6.

Пример, внедрим наивысший степень сжатия 9 для файла newfile.txt и в следующей команде выводим с помощью ключа -l сведения об сжатом файле.

]$ 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 - со сжатием и указывается процент достигнутого сжатия.

]$ 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. Как видим сохранились лишь изменения, обновился один файл и один добавился.

]$ 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.

]$ 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.

]$ 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.

]$ 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 опции название_архива

Сжатие как нигде необходимо в работе на хостинге, и дает экономить не только пространство, ну и деньги. Для более подробного ознакомления с утилитами можно использовать официальную документацию.

Gzip также относится к .gz файлов .gz и утилите gzip которая используется для сжатия и распаковки файлов.

В этом руководстве мы покажем вам, как использовать команду gzip .

Синтаксис команды gzip

Общий синтаксис команды gzip следующий:

Gzip сжимает только отдельные файлы и создает сжатый файл для каждого заданного файла. По соглашению, имя файла, сжатого с помощью Gzip, должно заканчиваться на .gz или .z .

Если вы хотите сжать несколько файлов или каталогов в один файл, сначала вам нужно создать архив Tar, а затем сжать файл .tar с помощью Gzip. Файл с .tar.gz или .tgz представляет собой архив Tar, сжатый с помощью Gzip.

Gzip чаще всего используется для сжатия текстовых файлов, архивов Tar и веб-страниц. Не используйте Gzip для сжатия изображений, аудио, документов PDF и других двоичных файлов, поскольку они уже сжаты.

gzip может сжимать только обычные файлы. Символьные ссылки игнорируются.

Сжатие файлов с помощью gzip

Чтобы сжать отдельный файл, вызовите команду gzip за которой следует имя файла:

gzip создаст файл filename.gz и удалит исходный файл.

По умолчанию gzip сохраняет в сжатом файле метку времени, режим, владельца и имя исходного файла.

Сохраните исходный файл

Если вы хотите сохранить исходный (исходный) файл, используйте параметр -k :

Подробный вывод

Используйте параметр -v если вы хотите увидеть процентное сокращение и имена обрабатываемых файлов:

Сжать несколько файлов

Вы также можете передать несколько файлов в качестве аргументов команде. Например, чтобы сжать файлы с именами file1 , file2 , file3 , вы должны выполнить следующую команду:

Приведенная выше команда создаст три сжатых файла: file1.gz , file2.gz , file3.gz .

Сжать все файлы в каталоге

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

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

Измените уровень сжатия

gzip позволяет указать диапазон уровней сжатия от 1 до 9. -1 или --fast означает самую высокую скорость сжатия с минимальной степенью сжатия, -9 или --best указывает на самую --best скорость сжатия с максимальной степенью сжатия. Уровень сжатия по умолчанию -6 .

Например, чтобы получить максимальное сжатие, вы должны запустить:

Стандартный ввод

Чтобы создать файл .gz из стандартного .gz , перенаправьте вывод команды в gzip . Например, чтобы создать резервную копию базы данных MySQL в формате Gzip, вы должны выполнить:

Вывод команды mysqldump будет вводиться для gzip .

Распаковка файлов с помощью gzip

Чтобы распаковать файл .gz , используйте параметр -d :

Возможно, вам будет проще запомнить gunzip чем gzip -d .

Сохраните сжатый файл

Как и при сжатии файла, параметр -k сообщает gzip нужно сохранить входной файл, в данном случае это сжатый файл:

Распаковать несколько файлов

Чтобы распаковать сразу несколько файлов, передайте имена файлов в gzip качестве аргументов:

Распаковать все файлы в каталоге

При использовании с параметрами -d и -r gzip рекурсивно распаковывает все файлы в указанном каталоге:

Список содержимого сжатого файла

При использовании с параметром -l gzip показывает статистику по данным сжатым файлам:

Вывод будет включать имя несжатого файла, сжатый и несжатый размер и степень сжатия:

Чтобы получить дополнительную информацию, добавьте параметр -v :

Выводы

С помощью Gzip вы можете уменьшить размер данного файла. Команда gzip позволяет сжимать и распаковывать файлы.

Для получения дополнительной информации о команде gzip обратитесь к странице документации Gnu gzip .

Читайте также: