Главная >> Терминал >> Архивирование файлов в Linux

Архивирование файлов в Linux

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

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


Содержание статьи

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

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

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

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

Tar

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 /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, а потом сжать его утилитой для сжатия, только здесь мы получаем больше контроля над процессом сжатия:

gzip archive.tar

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

gunzip archive.tar.gz

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

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

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

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

Опции shar:

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

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

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

shar file_name.extension > filename.shar

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

./filename.shar

Ar

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

Опции Ar:

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

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

ar cr libmath.a substraction.o division.o

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

ar x libmath.a

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

Cpio

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

Опции утилиты:

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

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

ls

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

Чаще всего применяется 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.

Bzip

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

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

 bzip2 file

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

Lzma

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

Xz

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

Zip

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

Синтаксис утилиты:

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

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

Опции утилиты:

  • -d удалить файл из архива
  • -r - рекурсивно обходить каталоги
  • -0 - только архивировать, без сжатия
  • -9 - наилучший степень сжатия
  • -F - исправить zip файл
  • -e - шифровать файлы

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

zip -r /path/to/files/*

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

unzip archive.zip

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

Выводы

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

20 комментариев к “Архивирование файлов в Linux”

  1. На Linux перешел недавно и во многом пока чуток туплю(
    Спасибо автору за отличный пост выше!
    Если можно, кто нибудь посоветуйте оболочку для архиваторов аля винрар или чтонить в этом роде, но для Linux.
    Через терминал поставил p7zip-full и p7zip-rar, но все архивы создаются дефолтами и не могу задать ни степень сжатия ни сменить некоторые опции для упаковки 🙁

    Ответить
  2. Ребята подскажите как распаковать зип архив в папку /var/www/example.com ? просто так в ту директорию ничего не перетащить и собственно конечную папку пришлось через терминал создавать с чем я справился но вот с распаковкой туда архива prestashop_1_6_1_5.zip у меня ничего не выходит

    Ответить
  3. выше из ситуации следующим способом: Распаковал архив в удобном месте и применил команду sudo cp -rp /откуда/скопировать/* /куда/скопировать
    Звёздочка означает что нужно скопировать всё содержимое директории.

    Ответить
  4. Как сделать с помощью ZIP архивацию файла в конкретную директорию?
    Например мне нужно за архивировать файл что находится /opt/1.sh и что бы он за архивировался в папку /home/

    Ответить
  5. >Чтобы создать архив используйте такую команду:
    >tar -cvf archive.tar.gz /path/to/files
    Почему расширение tar.gz, должно быть по идее .tar?

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

    Ответить
  6. У Вас написано про опции zip/unzip
    -d удалить файл из архива

    проверяем:
    unzip -h
    -d extract files into exdir по-моему это совсем не удаление

    PS у меня Ubuntu

    Ответить
  7. Вдогонку
    zip -h
    -d delete entries in zipfile
    Получается, что вы тоже правы, но тем не менее желательно уточнить к какой команде (zip/unzip) относится приведенная в статье опция - d

    Ответить
  8. дд, linux-redhat
    есть папка с архивами (7z и Zip), необходимо написать баш файл в котором циклом пройтись по всем архивам и вытащить список содержимого архива в отдельный файл,
    например есть /tmp/arc1.7z в котором 3 файла 1.txt, 2.txt, 3.txt.
    нужен конечный файл arc1.txt в котором список этих файлов..

    этот код не работает, что не так делаю?
    getlist1="7za l"
    getlist2=">"
    input=${1}
    output=${2}
    glist() {
    echo "Get list:"
    for file in ${input}*.7z; do
    filelist=${output}`basename ${file}`.txt
    ${getlist1} ${file} ${getlist2} ${filelist}
    echo "File saved:" ${filelist}
    done
    }
    glist

    Ответить
  9. Спасибо за подробную статью.
    Хотел бы попросить добавить в раздел об утилите Zip, что нужно прописать сначала имя файла, который будет у нас в качестве созданного архива, а уже потом какие файлы мы хотим заархивировать.

    Ответить
    • cd folder: попытка переместиться в каталог с названием folder
      2>/dev/null: 2> - это вывод ошибок в указанное место. В данном случае в /dev/null или по другому "пустое устройство" и ошибки просто уничтожаются.
      && сразу после выполнения вывести путь до текущей директории.
      || pwd если выше написанное не сработало, то просто выводится путь до текущей директории.

      Ответить
  10. tar -cvf archive.tar /path/to/files
    Автор ты хоть опиши что да как в какой папке ты находишся что ты архивируешь и где этот архив должен появится

    Ответить

Оставьте комментарий