Linux создать многотомный архив

Обновлено: 08.07.2024

Как создать архив в linux. В этой статье рассмотрим популярные средства для архивирования файлов и папок. Зачем нужно архивирование? Для удобства хранения и перемещения файлов. С его помощью происходит объединение нескольких файлов или папок в один файл.

Следует понимать, что архивация и сжатие это не одно и тоже. Можно произвести архивацию без сжатия (уменьшения объема конечного файла) а можно сжать архив для экономии места на диске. Все зависит от задач.

Работа с архивами при помощи утилиты TAR. Стандартный архиватор Linux

Стандартная утилита для создания архивов в linux - "tar". Синтаксис команды такой:

  • c - создание нового архива
  • f - имя файла для архива
  • r - добавление файлов в конец архива
  • x - извлечение файлов из архива
  • t - вывод списка содержимого архива
  • v - вывод сведений о работе программы
  • -C - распаковать в указанную папку

Например. У меня есть папка "Test" и я хочу создать архив tar. Команда tar будет такой:

В результате получится файл архива "Test.tar"

Для того, что бы увидеть работу программы можно использовать опцию "v". Будет выведено какие файлы и папки добавлены в архив. Например:

Создание архива tar с опцией -v

В данном случае архив создается с полной структурой папок.

Как в linux архивировать папку по заданному пути

Часто нужно создать архив не заходя в директорию. Давайте рассмотрим пример как создать архив не сохраняя структуру а создать архив только нужной папки из дерева.

Например, у меня есть папка "test" и вложенные "test1/test2". Внутри каждой папки находится по одному файлу. Если использовать команду вида tar cf test.tar test/test1/test2 то будет архив tar со всеми папками и файлами включая и test и test1.

Чтобы сделать архив папки по определенному пути нужно использовать опцию --directory=КАТАЛОГ либо -C и в конце через пробел указываем нужную папку для архивации.

Пример использования linux tar с опцией "directory":

Создание linux tar архива папки с помощью опции --directory

Теперь пример с опцией "-С":

linux tar папки созданный при помощи опции -С

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

Теперь давайте рассмотрим как добавить файл или папку в уже созданный архив. Для этого нужно использовать опцию "r". Пример. Добавить файл "file.txt" в архив "Test.tar". Используем команду:

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

Будет отображено содержимое архива "Test".

Как распаковать tar архив в linux

Теперь давайте рассмотрим как распаковать или как еще говорится разархивировать архив tar. Для этого дайте команду:

Архив будет распакован в текущую папку. Как быть если нужно распаковать не весь архив а извлечь только нужный файл. Допустим я хочу извлечь файл "file.txt". Для этого нужно дать команду:

Для того, чтобы извлечь архив в другой каталог используйте атрибут "-C". Например требуется распаковать архив в папку "Driver" находящуюся в директории "Zhelezo". Выполню команду:

Думаю с архивированием и разархивированием файлов и папок в линукс без сжатия все понятно.

Создание архива в Linux с использованием сжатия

Переходим к созданию сжатых архивов. Рассмотрим два основных метода сжатия Gzip (быстрее работает) и Bzip2 (лучше сжимает).

Пример сжатия tar gz linux, методом Gzip (утилита сжатия и восстановления (декомпрессии) файлов, использующая алгоритм Deflate):

Рассмотрим, как сжать папку с файлами - "Test". Для сжатия gzip используем tar z и расширение .gz :

Пример сжатия Bzip2 (утилита для сжатия данных с помощью алгоритма Барроуза — Уилера.):

Для сжатия Bzip2 используем tar j и расширение .bz2 :

Получили два архива "Test.tar.bz2" и "Test.tar.gz".

Linux распаковать tar gz и tar bz2

Разархивировать tar gz в linux. Распаковать сжатые файлы можно способом описанным выше либо так же используя tar z и tar j . Например, чтобы распаковать gz файл (gzip), используем команду:

распаковать tar gz linux пример разархивирования сжатой папки с демонстрацией работы.

Для распаковки bzip команду:

Как разделить большой архив tar на несколько файлов определенного размера (linux многотомный архив)?

Для передачи по сети файла большого размера иногда необходимо разделить его на более мелкие части. В данном примере я расскажу как сделать это с помощью утилиты split . Работа с утилитой проста. Задаем ключ, затем указываем файл и префикс. Разберем на примере. Я "разобью" архив "Test.tar" на части по 10 килобайт:

Разделение архива на части по размеру

Размер задаётся целым числом и необязательной единицей изменения
(пример: 10K это 10*1024). Единицы изменения:
K, M, G, T, P, E, Z, Y (степень 1024) или KB, MB, … (степень 1000).

Можно разбить не по размеру а по частям указав количество. Например я разделю тестовый архив на 3 части. Для этого нужно использовать ключ -n . Пример:

Итак мы поняли как разделить архив и по размеру и обозначив желаемое количество частей. Теперь давайте посмотрим как собрать разделенный архив. Для этого будем использовать утилиту cat . Для объединения всех частей архива вводим команду:

Символ "*" после ".parta" обозначает, что нужно использовать все файлы с именем "parta". После выполнения команды файл будет объединен.

Создание и распаковка ZIP-архивов в linux

Переходим к работе с архивами zip в linux. Для работы нам потребуется утилита zip . По умолчанию она не установлена. Для инсталляции выполним команду:

Маска для работы будет такой.:

Основные опции утилиты zip:

  • -r - рекурсивно обходить каталоги;
  • -0 - только архивировать, без сжатия;
  • -9 - максимальная степень сжатия;

Полную справку можно получить введя в терминале команду man zip .

Для создания архива зип нужно указать команду zip затем имя будущего архива с расширением .zip , затем имя файла для архивации:

Если нужно добавить в архив сразу несколько файлов то перечислите их через пробел. Например:

zip linux, создание zip архива в линукс

Для архивирования папки используйте ключ -r . Например:

Утилита поддерживает уровни сжатия которые задаются с помощью префикса от -0 (без сжатия) до -9 максимальный уровень. Если нужно сделать архив папки с максимальным сжатием то можно использовать такую команду:

Создаем zip-архив с паролем в Linux

С помощью утилиты "zip" можно создавать архивы с паролем. Для этого используется опция -P . Например:

Так, что бы создать архив secure.zip в котором будет заархивирован файл "file.txt" с паролем "passwd" введите команду:

Для того, что бы задавая пароль никто его не увидел укажите ключ -e или --encrypt . Например. Чтобы создать зашифрованный архив файла "file.txt" с именем "secure.zip" укажите команду:

После выполнения команды будет выдан запрос на задание пароля и подтверждения:

Напомню, что при вводе пароля отображения символов не будет.

Создание zip архива с паролем в linux

Установка степени сжатия для zip linux архива. Для утилиты zip можно указать насколько сильно необходимо сжать архив. Можно указать значение от 0 до 9. Здесь 0 это отсутствие сжатия, 9 - максимально. По умолчанию то есть без указания дополнительных параметров, выставлено значение 6. Пример. Для архивации папки "folder" без сжатия команда будет такой:

Учитывайте, что чем выше укажете уровень сжатия тем выше нагрузка на систему и больше времени потребуется на операцию.

Распаковка zip-архива в Linux

Что бы распаковать zip в linux используйте команду unzip . Синтаксис такой: unzip имя_архива.zip. Например, что бы распаковать zip linux архив с именем "archive.zip" выполните:

Файлы будут распакованы в текущую директорию. Если требуется распаковать в другую папку то нужно использовать параметр -d . Например. Нужно распаковать архив "archive.zip" в папку с названием "1" находящуюся в папке "Документы". Для этого даем команду:

zip linux, Распаковка zip архива с паролем

Для распаковки зашифрованных архивов на которые был установлен пароль будет выдан запрос на ввод пароля а затем нужно подтвердить указав английскую букву "y".

Создание и распаковка архива tar.xz в Linux

Некоторые программы распространяются в этом формате. Как устанавливать программы в линукс читайте в этой статье.

Ещё один популярный формат архива в линукс .xz. Используется алгоритм сжатия LZMA2, такой же как и в 7z имеющий очень высокую степень сжатия. Расплачиваться за это придется нагрузкой на процессор и большее использование памяти по сравнению .gzip и .bzip2.

В этом разделе я расскажу как создавать и как распаковать tar.xz файл в Linux. Для работы потребуется поддержка утилиты сжатия XZ. Если её нет то установите командой:

Синтаксис для создания архива tar.xz такой:

  • c — создать архив
  • f — имя файла
  • J — указывает на создание архива xz
  • v или —verbose — можно указать для отображения добавленных в архив файлов

Если передаете аргументы tar с дефисами (например, tar -cf в отличие от tar cf), тогда опция -f должна быть последней , поскольку она указывает имя файла.

Многотомный архив tar 7zip


Неоднократно сталкивался с ситуациями, когда архив tar.gz, созданный в Linux (tar -czvf) , нормально в Linux открывающийся, в Windows либо не открывался либо все время говорил об ошибках конца архива и прочее. А я хотел, чтобы архивы сервера можно было бы спокойно просматривать на Windows. В итоге родился вариант: tar | 7za. Почему не просто tar? Мне не поддался tar в плане multi-volume (точнее, я не очень-то и хотел), да и не сжимает он все же сам. А почему тогда не просто 7za? А потому, что в man 7za белым по черному написано, что 7za не сохраняет прав доступа и владельцев файлов. Поэтому сначала tar, потом 7zip.

Ставим 7zip в CentOS:

Задача: создать многотомный архив (например, по 100 Мб) какой-либо папки на сервере.

tar cf - /var/www | 7za u -si -t7z -mx=5 -v100m backup.7z

Tar готовит архивы, передает из по конвейеру 7zip-у (обратите внимание, в Linux 7zip запускается командой 7za), который:

u - update (варианты a - add, d - delete, e - extract, l - list, t - test, x - extract with full path)

-si - читает StdIn от tar.

-t7z - создает архив в формате 7zip.

-mx5 - степень сжатия (от 0 до 9). 0 - без сжатия, зато очень быстро. Например, с -mx0 архив получился 546 Мб, с -mx5 - 251 Мб, а с -mx2 - 285 Мб.

-v100m - тома по 100 Мб.

Имя архива: backup.7z. Если томов архива будет несколько, они будут называться backup.7z.001, backup.7z. 002, backup.7z.00 3 и т.д.

7za поддерживает пароли на архивы (-pYOUR_PAWWD), шифрует список файлов архива от просмотра и др. Я этим не балуюсь, но вам может оказаться полезным.

Помните шутку про бедуинов, которые, когда их спрашивают, сколько стоит покататься на верблюде, отвечают - бесплатно! Но вот "за слезть на землю" могут попросить денег. Так и сейчас, запаковать-то мы запаковали, а как извлечь данные из архива?

Распаковать архив 7zip можно так:

7za x backup.7z.001
tar tf имя_распакованного_архива

Или одной командой:

7za x -so backup.7z.001 | tar xf -

Краткая памятка по работе с архиваторами (программами управления файловыми архивами) из консоли в Linux.

    В двух словах о самом формате tar

Например чтобы запаковать текущую папку в tar-архив напишем

где foo.tar имя которое будет присвоено полученному архиву, а "./" указание папки

А для распаковки этого архива будем использовать

-A, --catenate, --concatenate
склеить файлы tar в один архив

-c, --create
создать новый архив

-d, --diff, --compare
найти различия между архивом и файловой системой

--delete
удалить из архива (не применяется к магнитным лентам!)

-r, --append
добавить файлы в конец архива

-t, --list
показать содержимое архива

-u, --update
добавить только новые версии файлов файлов

-x, --extract, --get
извлечь файлы из архива

-j, --bzip2
используется для создания/распаковки .bz2 файлов

-z, --gzip, --ungzip
используется для создания/распаковки .gz файлов

-M, --multi-volume
создать/показать/распаковать многотомный архив

Другие не менее интересные опции этой очень важной команды можно найти в руководстве пользователя - man tar.

(«-» после -czvf говорит tar'у выводить в stdout, чтобы потом split мог его разбить на части(а «-» в split говорит ему брать из stdin)) В результате будут созданы файлы backup.tar.gzaa, backup.tar.gzab, backup.tar.gzac . размер каждого 1024 Мб. Именно последние две буквы в названии архива .tar.gzaa, .tar.gzab и т.д., указывают на то, что он разбит на части.

Склеить все части можно командой

Если все части архива находятся в одной папке, то команда для склеивания выглядит так:

в результате будут созданы файлы arch.7z.001 arch.7z.002 arch.7z.003 . размер каждого 100 Мб (опция -v100m).

Чтобы распаковать многотомный архив arch.7z.001, достаточно поместить все части архива в текущую папку и дать команду

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

В наши дни мы сталкиваемся с файлами архивов очень часто и на всех платформах: 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. Мы рассмотрели только консольные команды, так сказать, чтобы была понятна суть. В графическом интерфейсе все еще проще. Если остались вопросы - задавайте их в комментариях.

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