Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Подробнее о командах архивирования и сжатия в системе Linux

Оригинал: In Depth Look at Linux’s Archiving and Compression Commands
Автор: Gary Sims
Дата публикации: 21st Oct 2013
Перевод: Н.Ромоданов
Дата перевода: ноябрь 2013 г.

Потребность упаковывать и сжимать файлы в виде одного архива возникла примерно в то же самое время, когда компьютеры впервые получили жесткие диски, и эта потребность не исчезла до сегодняшнего дня. Каждый день в виде архивов загружается на сайты и скачивается с сайтов все, начиная от документов и фотографий и заканчивая программами и драйверами устройств. Большинство пользователей знакомы с файлами .zip, однако есть гораздо больше архиваторов, которые не так известны, как .zip. В этом руководстве мы расскажем вам о различные командах, которые есть в Linux, и о том, как правильно их использовать.

Tar и gzip

Исторически сложилось так, что инструментом архивирования, используемым в Linux по умолчанию, является команда tar. Первоначально она означала «Tape Archive» («Архив на магнитной ленте»), но это было тогда, когда ленты были основным носителем для переноса данных. Команда tar является очень гибкой и она может создавать, сжимать, обновлять, распаковывать и тестировать архивные файлы. По умолчанию расширением для несжатого архива tar (иногда называемым файлом tar или архивом tarball) является расширение .tar, тогда как для сжатых архивов tar чаще всего используют расширение .tgz (означающее, что архив tar сжат с помощью команды GNU zip). В действительности в архивах tar предлагается несколько различных методов сжатия, в том числе bzip2, zip, LZW и LZMA.

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

tar cvf somefiles.tar *

c означает create (создать), v расшифровывается как verbose (означающее, что команда tar выведет список файлов, которые она архивирует), а f говорит о том, что следующий параметр является именем файла архива, в данном случае somefiles.tar. Символ * точно также, как и в большинстве команд командной оболочки Linux, обозначает все файлы в каталоге.

Архив somefiles.tar создается в текущем каталоге. Теперь его можно сжать с помощью таких инструментальных средств как gzip, zip, compress или bzip2. Например:

gzip somefiles.tar

Комада gzip сожмет архив и добавит расширение .gz. Теперь в текущем каталоге вместо файла somefiles.tar будет находиться файл somefiles.tar.gz.

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

tar cvzf somefiles.tgz *

Эта команда создаст сжатый архив gzip (архив tarball), который называется somefiles.tgz. Дополнительный параметр z указывает команде tar, что сжатие будет осуществляться в tarball. Вместо параметра z можно использовать параметры j, J или Z, которые соответственно указывают команде tar использовать алгоритмы сжатия bzip2, xz и LZW. С помощью параметра xz указывается использования алгоритма сжатия LZMA2, который представляет собой точно такой же алгоритм, как и популярная в системе Windows программа 7-Zip.

7-Zip

С помощью команды 7zr можно создать файл, совместимый с алгоритмом сжатия 7-Zip. Чтобы создать архив .7z, используйте следующую команду:

7zr a somefiles.7z *

Параметр a означает add (добавить), т. е. добавить все локальные файлы в архив somefiles.7z. Затем этот файл можно отправить пользователю системы Windows и он сможет извлечь содержимое архива без каких-либо проблем.

В системе Linux не рекомендуется использовать команду 7zr для резервного копирования, поскольку в таких архивах 7-zip не сохраняется информация о владельце/группе файла архивы. Команду 7zr можно использовать для создания архива tarball (в котором сохраняется информация о владельце файла). Вы можете сделать это с помощью конвейера Unix следующим образом:

tar cvf - * | 7zr a -si somefiles.tar.7z

Символ дефиса после параметра f сообщает команде tar о том, что результат нужно посылать в стандартный выходной поток Unix - в stdout, а не в файл. Поскольку как мы используем конвейер, выходной поток команды tar будет направлен в команду 7zr, которая будет ожидать ввода данных из стандартного входного потока, поскольку указан параметр -si. Затем команда 7zr создаст архив с именем somefiles.tar, в котором будет находиться архив tarball, в котором, в свою очередь, будут находиться файлы. Если вы не знакомы с использованием конвейера, то вы можете в два этапа можете создать стандартный архив tarball, а затем сжать его с помощью команды 7zr:

tar -cvf somefiles.tar *
7zr a somefiles.tar.7z somefiles.tar

Извлечение данных

Извлечение файлов из этих различных архивов также осуществляет достаточно просто; ниже приведена краткая шпаргалка для извлечения файлов из различных архивов, созданных выше.

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

tar xvf somefiles.tar

Где параметр x означает eXtract (извлечение).

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

tar xvzf somefiles.tgz

Параметр z указывает команде tar о том, что для сжатия исходного архива была использована команда gzip. Вместо параметра z вы можете в зависимости от того, какой применялся алгоритм сжатия при создании архива, указать параметр j, J или Z.

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

7zr e somefiles.tar.7z

Заключение

В системе Linux предлагается широкий спектр команд архивирования и сжатия. Попробуйте поэкспериментировать с командами zip и xz; они работают очень похоже на другие команды, уже упомянутые здесь. Если у вас возникнут проблемы, то за дополнительной подсказкой вам следует обратиться к описанию на страницах man, например, man xz.