diff options
Diffstat (limited to 'LINUX/TAR.md')
| -rw-r--r-- | LINUX/TAR.md | 314 |
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 + +===================================== +  Обновлено: 24.07.2024  Опубликовано: 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 |
