summaryrefslogtreecommitdiff
path: root/LINUX/TAR.md
diff options
context:
space:
mode:
Diffstat (limited to 'LINUX/TAR.md')
-rw-r--r--LINUX/TAR.md314
1 files changed, 314 insertions, 0 deletions
diff --git a/LINUX/TAR.md b/LINUX/TAR.md
new file mode 100644
index 0000000..7bb98c5
--- /dev/null
+++ b/LINUX/TAR.md
@@ -0,0 +1,314 @@
+1️⃣ **Распаковка tar**
+Для распаковки архива в формате **.tar** в текущую директорию выполните команду:
+
+`tar xvf archive.tar
+
+2️⃣ **Распаковка tar.bz2, tar.bzip2, tbz2, tb2, tbz**
+
+`tar xvjf archive.tar.bz2
+
+3️⃣ **Распаковка tar.xz, txz**
+
+`tar xvJf archive.tar.xz
+
+4️⃣ **Распаковка tar.gz, tgz**
+
+`tar xvzf archive.tar.gz
+
+5️⃣ **Распаковка tar.lzma**
+
+`tar --lzma -xvf archive.tar.lzma
+
+🤔 **Пояснение опций**
+
+x — распаковать архив.
+v — Verbose-режим (вывод на экран дополнительной информации во время распаковки).
+f — выполнить распаковку архива из файла.
+j — вызвать bzip2 для распаковки архива.
+z — вызвать gzip
+J — вызвать xz
+
+Чтобы распаковать архив в определенную директорию используется опция -C или --directory, например:
+
+`tar xvf archive.tar -C /to/directory
+
+=====================================
+ ![Обновлено](https://www.dmosk.ru/img/public/time.jpg "Дата обновления") Обновлено: 24.07.2024  ![Опубликовано](https://www.dmosk.ru/img/public/time.jpg "Дата публикации") Опубликовано: 18.11.2016
+### Создать
+
+Создание выполняется с ключом **c**. Синтаксис следующий:
+
+tar -c<опции> <новый архивный файл> <что сжимаем>
+
+Пример создания:
+
+tar -czvf archive.tar.gz /home/dmosk
+
+_* в данном примере будет создан архив **archive.tar.gz** домашней директории пользователя (**/home/dmosk**)
+** где **z** — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); **c** — ключ на создание архива; **v** — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); **f** — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами)._
+
+### Распаковать
+
+Распаковка выполняется с ключом **x** с синтаксисом:
+
+tar -x<опции> <архивный файл> 
+
+Пример распаковки:
+
+tar -xvf archive.tar.gz 
+
+## Форматы
+
+Утилита tar позволяет работать с архивами различных форматов. Рассмотрим их кратко.
+
+### gz
+
+Сжатие:
+
+tar -cf archive.tar.gz /files
+
+Распаковка .gz файла:
+
+tar -xf archive.tar.gz 
+
+_* при возникновении ошибки **This does not look like a tar archive**, можно воспользоваться командой **gzip -d archive.tar.gz**._
+
+### bz2
+
+tar -xvjf archive.tar.bz2
+
+_* ключ j отвечает за работу с bz2._
+
+Если система ругается на bzip2, значит нужно его установить:
+
+apt-get install bzip2
+
+Если видим ошибку **tar: Unrecognized archive format**, воспользуемся следующей командой:
+
+bzip2 -d archive.tar.bz2
+
+### gzip
+
+tar -xvzf archive.tar.gzip
+
+_* ключ z отвечает за работу с gzip._
+
+### tgz
+
+TGZ — tar-архив, сжатый с помощью утилиты gzip. По сути, это тот же tar.gz, и работа с ним ведется такими же командами. Рассмотрим примеры работы с данным форматом.
+
+Для создания архива tgz выполняем:
+
+tar -czf archive.tgz /files
+
+Распаковывается, как gzip:
+
+tar -xzf archive.tgz
+
+### xz
+
+Это формат сжатия данных с помощью алгоритма LZMA. Для работы с ним устанавливаем:
+
+apt install xz-utils
+
+_* на Debian / Ubuntu._ 
+
+yum install xz
+
+_* на Rocky Linux / CentOS._
+
+Теперь можно пользоваться.
+
+Создать архив:
+
+tar -cpJf archive.tar.xz /home/user
+
+Распаковка:
+
+tar -xpJf archive.tar.xz
+
+## Описание ключей tar
+
+### Команды для действия
+
+|Ключ|Описание|
+|---|---|
+|-A|Добавление файлов в архив.|
+|-c|Создание нового архивного файла.|
+|-d|Показать отличающиеся данные между каталогом-исходником и содержимым архива.|
+|--delete|Удалить файлы внутри архива.|
+|-r|Добавить файлы в конец архива.|
+|-t|Показать содержимое архива.|
+|-u|Добавить файлы, которых нет в архиве.|
+|-x|Извлечь файлы из архива.|
+
+_* нельзя использовать несколько вышеперечисленных ключей в одной команде._
+
+### Дополнительные опции
+
+|Ключ|Описание|
+|---|---|
+|--atime-preserve|Оставить прежнюю метку времени доступа для файла.|
+|-b N|Задать размер блока N x 512.|
+|-C|Смена каталога. По умолчанию, используется тот, в котором мы находимся.|
+|--checkpoint|Показать имена папок при чтении архивного файла.|
+|-G|Использование старого формата инкрементального резервирования при отображении или извлечения.|
+|-g|Использование нового формата инкрементального резервирования при отображении или извлечения.|
+|-h|Не дублировать символьные ссылки. Только файлы, на которые указывают эти симлинки.|
+|-i|Игнорировать блоки нулей.|
+|-j|Использование bzip2.|
+|--ignore-failed-read|Игнорировать не читаемые файлы.|
+|-k|При распаковке, существующие файлы не заменяются соответствующими файлами из архива.|
+|-L N|Смена магнитной ленты после N*1024 байт.|
+|-m|При извлечении игнорировать время модификации объекта.|
+|-M|Многотомные архивы.|
+|-N DATE|Сохранять только более новые файлы относительно DATE|
+|-O|Направление извлекаемого на стандартный вывод.|
+|-p|Извлечение защищенной информации.|
+|-P|Не отбрасывает начальный слэш (/) из имен.|
+|-s|Сортировка файлов при извлечении.|
+|--preserve|Аналогично -ps|
+|--remove-files|Удалить исходные файлы после добавления в архив.|
+|--same-owner|Сохранить владельца при извлечении.|
+|--totals|Вывод байт при создании архива.|
+|-v|Протоколирование действий — отображение списка объектов, над которыми происходит действие.|
+|-V NAME|Создание архива на томе с меткой NAME.|
+|--version|Показать версию tar.|
+|-w|Требовать подтверждения для каждого действия.|
+|-W|Проверка архива после записи.|
+|--exclude FILE|Исключить файл FILE.|
+|-X FILE|Исключить файлы FILE.|
+|-Z|Фильтрует архив с помощью compress.|
+|-z|Использование gzip.|
+
+* актуальный список опций можно получить командой **man tar**.
+
+## Примеры
+
+Рассмотрим некоторые сценарии использования tar.
+
+### Распаковать в определенную папку
+
+tar -C /home/user -xvf archive.tar.gz
+
+_* ключ **-C** используется для указания папки, куда необходимо распаковать файлы из архива._
+
+### Распаковка без вложенной папки
+
+Такой способ можно использовать для распаковки в заранее подготовленный каталог. Будет некий эффект переименовывания каталога или аналог «Распаковать здесь»:
+
+tar -C /home/admin/mytar -xvf admin.tar.gz --strip-components 1
+
+_* каталог **/home/admin/mytar** заранее должен быть создан; **--strip-components 1** пропустит одну вложенную папку внутри архива._
+
+### Указать конкретный файл или каталог для распаковки
+
+Если у нас большой архив, но извлечь нужно конкретный файл или каталог, то можно указать его через пробел после указания файла с архивом. Синтаксис:
+
+tar zxf <путь до архива> <что извлечь>
+
+Рассмотрим пример. Напомним, что можно посмотреть содержимое архива с помощью опции t:
+
+tar tf /backup/samba.tar.gz
+
+Теперь можно распаковать архив:
+
+tar -zxf /backup/samba.tar.gz mail
+
+_* предположим, что внутри архива **samba.tar.gz** есть что-то и каталог **mail**. Извлечем мы только последний._
+
+### Исключение файлов по маске
+
+Если необходимо пропустить некоторые файлы, вводим команду с ключом --exclude:
+
+tar --exclude='sess_*' -czvf archive.tar.gz /wwwsite
+
+_* в данном примере мы создадим архив **archive.tar.gz**, в котором не будет файлов, начинающихся на **sess_**._
+
+Также можно исключить несколько файлов или папок, добавляя несколько опций exclude:
+
+tar --exclude='/data/recycle' --exclude='*.tmp' -zcf /backup/samba/2021-08-29.tar.gz /data/
+
+_* в данном примере мы исключим папку **recycle** и файлы, которые заканчиваются на **.tmp**_
+
+### Работа с архивами, разбитыми на части
+
+Разбить архив на части может понадобиться по разным причинам — нехватка места на носителе, необходимость отправки файлов по почте и так далее.
+
+Чтобы создать архив, разбитый на части, вводим команду:
+
+tar -zcvf - /root | split -b 100M - root_home.tar.gz
+
+_* данная команда создаст архив каталога **/root** и разобьет его на части по **100 Мб**._
+
+> Если у нас уже есть архив, который нужно разбить, команда будет такой:
+>
+> split -b 100M root_home.tar.gz root_home.tar.gz
+>
+> _* в данном примере архив **root_home.tar.gz** будет разбит на части, состояние из файлов по 100 Мб._
+
+В итоге мы получим, примерно, такую картину:
+
+root_home.tar.gzaa  root_home.tar.gzac  root_home.tar.gzae
+root_home.tar.gzag  root_home.tar.gzai  root_home.tar.gzab
+root_home.tar.gzad  root_home.tar.gzaf  root_home.tar.gzah
+
+Чтобы собрать архив и разархивировать его, вводим команду:
+
+cat root_home.tar.gz* | tar -zxv
+
+> Если мы хотим только собрать разбитый архив, вводим:
+>
+> cat root_home.tar.gz* > root_home.tar.gz
+
+### Создание tar из отдельных файлов с последующим его архивированием
+
+Мы можем собрать файл tar, добавляя по очереди в него файлы, после чего создать сжатый архив. Предположим, у нас 3 файла: file1, file2, file3.
+
+Сначала создадим tar-файл с первым файлом внутри:
+
+tar -cf ./my_archive.tar ./file1
+
+Следующими двумя командами мы добавим в архив файлы file2 и file3:
+
+tar -rf ./my_archive.tar ./file2
+
+tar -rf ./my_archive.tar ./file3
+
+Сожмем содержимое tar-файла:
+
+gzip < ./my_archive.tar > ./my_archive.tar.gz
+
+Файл tar можно удалить:
+
+rm -f my_archive.tar
+
+### Рекурсивная распаковка
+
+Предположим, что у нас есть архив, в котором есть еще архив. И еще и еще много раз. Чтобы не заниматься ручной распаковкой, можно использовать команду с while:
+
+while [ -f *.tar.gz ]; do filename="$(ls -1 *.tar.gz | head -n 1)"; tar -xvf $filename && rm $filename; done;
+
+Обратите внимание, что данная команда удалит исходный файл архива, а также будет искать архив по маске, поэтому в каталог, где выполняем команду не стоит копировать другие архивы.
+
+## ZIP
+
+Tar не работает с zip-архивами. В системах UNIX для этого используем утилиты zip и unzip. Для начала, ставим нужные пакеты:
+
+yum install zip unzip
+
+apt-get install zip unzip
+
+pkg install zip unzip
+
+_* соответственно, для RPM based, deb based, BSD based._
+
+Создание ZIP:
+
+zip -r archive.zip /home/dmosk
+
+_* создает архив каталога **/home/dmosk** в файл **archive.zip**._
+
+Распаковка ZIP:
+
+unzip archive.zip \ No newline at end of file