Как сделать формат tar

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

TAR, как формат, устроен макимально просто. Файлы в архиве располагаются один за другим, при этом метаданные каждого файла помещены перед его содержимым и, соответственно никак не зависят от других файлов, начала или конца архива. Это позволяет использовать tar для потоковой упаковки или распоковки. Потоковая упаковка и распаковка подразумевает собой отсутствие необходимости в промежуточной записи архива на носитель. Т.е. в случае, например с zip, вы должны сначала скачать архив, а потом его распаковать, а tar позволяет получить контент сразу. Подробнее об использовании таких пайплайнов в разделе Пайплайны.

Пока же начнем с простого действия - создадим tar архив

$ echo big_hippo > file_1
$ echo small_hippo > file_2
$ tar -c -f test.tar file_1 file_2

В примере выше 2 файла: file_1 и file_2 были созданы и запакованы в tar архив. Первый файл содержит текст "big_hippo", второй "small_hippo". Ключ "-c" или "--create" (допускается как длинная, так и короткая нотация) инструктирует tar создать архив, "-f" или "--file" задает имя для нового архива (без этого ключа tar выведет содержимое архива в консоль), а последовательность файлов в конце команды указывает, что именно нужно заархивировать.

В успешности создания архива можно убедиться с помощью утилиты file

$ file test.tar
test.tar: POSIX tar archive (GNU)

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

$ hexdump -C test.tar


Самая левая колонка hexdump нам показывает смещение в байтах относительно начала файла, выраженное тем не менее в шестнадцатеричных числах. Т.е. число 200 - это не 200, а 512, если перевести его в десятичную систему исчисления. Для удобства восприятия мы выделили красным - метаданные, зеленым - данные, а синим - пустые данные. Т.е. tar к каждому файлу добавляет в начало 512 байт метаданных, содержащих имя файла, режим доступа, UID и GID владельца, контрольную сумму и др. поля. Иными словами с каждым новым файлом размер получаемого архива увеличивается как минимум на 512 байт. Минимум, потому что несмотря на то, что содержимое первого файла закончилось еще на отметке 20a (522-ой байт), tar намеренно добавляет в конец порцию нулей (выделено синим), чтобы итоговый размер был кратен 512.

Что же это получается, архиватор - не архиватор? На самом деле, tar лишь следует духу unix - одна программа решает одну проблему. Если вам нужна компрессия, обратитесь к другой программе. Это означает, что tar лишь склеивает файлы вместе, а о сжатии нужно заботиться отдельно. К счатью, разработчики смилостивились над бедными пользователями и добавили возможность автоматически (при создании архива) вызывать сторонний компрессор для проведения операции сжатия. Такими компрессорами являются gzip, xz, lzip, lzma, lzop и другие. Т.е. вы сначала должны подумать, какой компрессор вы хотите использовать, а потом попросить tar при помощи опций командной строки, после упаковки передать архив компрессору. Для каждого компрессора свой ключ. Самы популярный - это, конечно gzip.

Давайте воспользуемся нашим первым примером и сделает всё то же самое, только добавим сжатие:

$ tar -c -z -f test.tar.gz file_1 file_2
$ file test.tar.gz
test.tar.gz: gzip compressed data, last modified: Mon Jul 9 20:20:55 2018, from Unix, original size 10240

Ключ -z инструктирует tar воспользоваться gzip для совершения компресии. Обратили внимание, что расшиение (суффикс) файла изменилось на tar.gz? Это памятка пользователю, что архив был создан с использованием компрессии, и не просто какой-то, а gzip. Другой функции двойное расширение не несет - можно и без него

$ tar -c -J -f test.tar.xz file_1 file_2
$ file test.tar.xz
test.tar.xz: XZ compressed data

Ключ "-J" используется для проведения компрессии с использованием алгоритма xz. На выходе получаем соответственно архив с расширением tar.xz. Ключ "-j" сжимает bzip2, а вот ключам "--lzma", "--lzip" и "--lzop" повезло меньше - они лишены коротких аналогов. За то, понятно с первого взгляда, какой компрессор будет использован

Но на этом сюрпризы tar не заканчиваются. Внимательный человек во время просмотра дампа hexdump, непременно заострит внимание на строке, содержащей слово "ustar". Действительно, оказывается tar - это обобщенное название можества схожих форматов архивов со своими преимуществами и недостатками и, внимание, зачастую НЕСОВМЕСТИМЫХ между собой. Попытаться понять с каким форматом работает ваш tar можно выполнив команду

И где-то в конце вероятно будет подсказка

*This* tar defaults to:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/lib/tar/rmt

Как видно, форматом по-умолчанию в данной реализации выбран gnu. Однако, как мы уже говорили ранее, такая подсказка может и не быть выведена. Все зависит от того из каких исходных текстов была собрана ваша реализация tar и с какими параметрами. Приведем список известных на сегодняшний день форматов tar:

Самым перспективным форматом tar явлется posix. Он снимает ограничения на размер файла в 8GB, также позволяет использовать неограниченный диапазон UID и GID пользователя. Уходят в прошлое и ограничение на длинну файла, а также добавляются несколько новых заголовков, которые позволяют сохранять больше информации об архивируемых файлах, например дата и время модификации файла. Так что если ваш парк машин выглядит достаточно современно, стоит задуматься о переводе формата posix в вашей инфраструктуре из разряда экспериментальных фич в стандарты.

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

Распаковка tar в папку

TAR всегда распаковывает в текущую папку. Если вы хотите распаковать tar в другую папку, то у вас всего два пути: сделать в эту папку "cd" до начала распаковки, или попросить tar при помощи ключа "-C" сделать "cd" за вас. Для успешного проведения операции папка должна существовать

$ mkdir /srv/files
$ cd /srv/files
$ tar -xvf ~/test.tar

$ mkdir /srv/files
$ tar -xvf test.tar -C /srv/files

Извлечь один файл

TAR позволяет извлекать одиночные файлы из архива, вы всего лишь должны указать в конце командной строки имя файла. Но тут есть одна странность, точнее то, что пользователи Windows не понимают. Имя файла - это не имя файла самого, а имя плюч весь путь от начала иерархии. Иными словами, если файл с именем "file_1" лежит прямо в корне иерархии, то проблем никаких, а вот если вообразить, что файл лежит в папке, скажем "test", то имя его "test/file_1". Это нужно, чтобы tar в момент распаковки смог правильно воссоздать структуру папок, ведь в архиве никаких папок нет, все файлы идут друг за другом - вспоминайте вывод hexdump. Приведем пример как, используя наш архив test.tar извлечь из него всего один файл file_1

$ tar -xvf test.tar file_1
file_1
$ file files_1
file_1: ASCII text

Теперь давайте создадим новый архив, но сначала положим наши два файла в папку

$ mkdir test
$ mv file_1 file_2 ./test/
$ tar -cvf test.tar test/
test/
test/file_1
test/file_2

И попробуем извлечь файл file_1

$ tar -xvf test.tar file_1
tar: file_1: Not found in archive
tar: Exiting with failure status due to previous errors

Мы получили явное предупреждение, что такого файла в архиве нет. Но так и должно быть, мы упаковали файл с путем и извлекать должны с путем

$ tar -xvf test.tar test/file_1
test/file_1

Предсказуемо tar создал папку test и распаковал наш файл в нее. Но что, если мы забыли правильный путь? Конечно, можно попросить tar показать нам список файлов

$ tar -tf test.tar
test/
test/file_1
test/file_2

Ключ "-t" или "--list" при указании имени архива через ключ "-f" или "--file" заставляет tar вывести список файлов. А если этот список большой и не удобный? Как нам распаковать один файл просто зная его имя? Ключ "--no-anchored" приходит на помощь. Он выключает интерпретацию путей

$ tar --no-anchored -xvf test.tar file_1
test/file_1

Файлы также можно извлекать и по маске. Например мы хотим извлечь все файлы, имена которых начинаются с букв "file_". Ключ --wildcards позволяет включать в имена файлов звездочки

$ tar --wildcards --no-anchored -xvf test.tar file_*
test/file_1
test/file_2

Ну и в завершение истории о распаковке представляем вам ключ "--strip" который позволяет отбросить родительские папки. Он может пригодиться, когда вы не хотите, чтобы tar воссоздавал иерархию папок

$ tar --strip=1 --wildcards --no-anchored -xvf test.tar file_*

Добавить файлы в tar архив

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

$ tar -tf test.tar
file_1
file_2
$ echo another_small_hippo > file_3
$ tar -rvf test.tar file_3
file_3
$ tar -tf test.tar
file_1
file_2
file_3

Пайплайны

Как мы уже упомянали в начале статьи, tar можно использовать для потоковой упаковки/распаковки. Классический пример - это tar через ssh. "А чем scp не угодил?" - спросите вы. А тем, что tar позволяет контент сжимать перед передачей, а scp нет. Скажем мы хотим передать нашу папку test на хост 192.168.1.200, используя ssh

$ tar -cz ./test | ssh 192.168.1.200 "tar -xzv -C $"

В данной примере мы сначала просим tar запаковать и сжать папку с использованием gz, потом передать ее на вход ssh, который затем через зашифрованный канал транслирует данные на другой хост, передавая их там местному tar для распаковки в папку, указанную вместо $. Идеально, не правда ли?

конвертировать Kernel Zip в Tar

Потратив часы, пытаясь найти способ конвертировать zip-файлы в файлы tar.md5, которые можно прошить с помощью ODIN. Я придумал решение, которое упоминается в этом руководстве. Большая часть облаков не позволяет загружать ODIN прошиваемые файлы tar.md5. Таким образом, в Интернете вы можете найти только zip-файлы с пользовательскими ПЗУ и восстановления. Необходимо преобразовать zip ядра в tar.md5, чтобы их можно было прошить.

В следующем руководстве есть инструмент, который можно использовать для преобразования файлов .zip в файлы tar. Я использовал этот инструмент, и он отлично работает. Остерегайтесь прошивать ядра — это не детская работа, ваш телефон может быть заблокирован, поэтому будьте осторожны. Если вы будете следовать этому руководству, не волнуйтесь. Я объяснил все подробно. Тем не менее, если у вас есть вопросы или путаница, не стесняйтесь спрашивать меня в комментариях.

Как конвертировать Kernel Zip в Tar.md5:

Ниже приведены некоторые предварительные условия, которые вам понадобятся для продолжения. Убедитесь, что вы знаете, как прошивать ROM и восстанавливать, это руководство не для начинающих. Вы должны иметь базовые знания Android и прошивки прошивки и пользовательских восстановлений. Даже если это ваш первый раз, не волнуйтесь. Сделайте так, как написано в руководстве, и спросите в комментариях, если у вас есть путаница.

Предпосылки:

  • Перед перепрошивкой сделай NANDROID резервное копирование вашего телефона. Так что, если при прошивке нового ядра возникают проблемы, вы можете восстановить резервную копию и вернуться к стабильному телефону.
  • Вам понадобится файл .zip ядра.
  • Разархивируйте инструмент как WinRAR.
  • Компьютер.
  • ODIN v3.10.7. (Загрузите ODIN отсюда.) Орудие труда. , (Вам придется установить драйверы Samsung на свой компьютер. Чтобы при подключении телефона к компьютеру он распознал его. Необходим для использования ODIN).

Замечания: Проверьте эти готовые файлы tar может быть прошит напрямую с помощью ODIN. Вы можете найти нужный из этой коллекции.

Пошаговое руководство по конвертации zip-файла в tar (.tar.md5)

Важная заметка: В основном файлы PIT также перепрограммируются в ПЗУ, что может привести к удалению всех данных, присутствующих в вашем телефоне.

Это все о том, как конвертировать ядро ​​zip в файл tar, Если у вас есть какие-либо вопросы или путаница, не стесняйтесь спрашивать меня в комментариях. Оставьте нам отзыв о том, как это руководство сработало для вас. В приведенном выше руководстве я также приложил несколько готовых tar-файлов, которые готовы к перепрошивке с использованием ODIN. Вы можете выбрать из них. Если вы найдете любое подходящее ядро ​​для вашего телефона. Вы можете спросить, нет ли у вас путаницы при выполнении этого руководства по преобразованию zip-файла ядра в tar-файл. Удачи.

Утилита командной строки tar используется для работы с архивами в операционных системах на базе UNIX. С ее помощью можно архивировать данные и оптимизировать использование дискового пространства.

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

Создать

Создание выполняется с ключом c. Синтаксис следующий:

tar -czvf archive.tar.gz /home/dmosk

* в данном примере будет создан архив archive.tar.gz домашней директории пользователя (/home/dmosk)
** где z — сжать архив в gzip (без этого параметра, tar не сжимает, а создает так называемый тарбол); c — ключ на создание архива; v — verbose режим, то есть с выводом на экран процесса (очень удобно для наблюдением за ходом работы, но в скриптах можно упустить); f — использовать файл (обязательно указываем, так как в большей степени работаем именно с файлами).

Распаковать

Распаковка выполняется с ключом x с синтаксисом:

tar -xvf archive.tar.gz

Примеры

Распаковка .gz файла:

tar -xvf archive.tar.gz

* при возникновении ошибки This does not look like a tar archive, можно воспользоваться командой gzip -d archive.tar.gz.

tar -xvjf archive.tar.bz2

* ключ j отвечает за работу с bz2.

Если система ругается на bzip2, значит нужно его установить:

yum install bzip2

apt-get install bzip2

pkg install bzip2

* соответственно, для CentOS (RPM based), Ubuntu (deb based), FreeBSD (BSD based).

Если видим ошибку tar: Unrecognized archive format, воспользуемся следующей командой:

bzip2 -d archive.tar.bz2

tar -xvzf archive.tar.gzip

* ключ z отвечает за работу с gzip.

Распаковывается, как gzip:

tar -xvzf archive.tgz

Распаковать в определенную папку

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 пропустит одну вложенную папку внутри архива.

Исключение файлов по маске

Если необходимо пропустить некоторые файлы, вводим команду с ключом --exclude:

tar --exclude='sess_*' -czvf archive.tar.gz /wwwsite

* в данном примере мы создадим архив archive.tar.gz, в котором не будет файлов, начинающихся на sess_.

Также можно исключить несколько файлов или папок, добавляя несколько опций exclude:

* в данном примере мы исключим папку recycle и файлы, которые заканчиваются на .tmp

Работа с архивами, разбитыми на части

Разбить архив на части может понадобиться по разным причинам — нехватка места на носителе, необходимость отправки файлов по почте и так далее.

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

tar -zcvf - /root | split -b 100M - root_home.tar.gz

* данная команда создаст архив каталога /root и разобьет его на части по 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

Описание ключей 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 не работает с zip-архивами. В системах UNIX для этого используем утилиты zip и unzip. Для начала, ставим нужные пакеты:

yum install zip unzip

apt-get install zip unzip

pkg install zip unzip

* соответственно, для RPM based, deb based, BSD based.

zip -r archive.zip /home/dmosk

* создает архив каталога /home/dmosk в файл archive.zip.

Windows

В системе на базе Windows встроенными средствами можно распаковать только ZIP-архивы. Для работы с разными архивами рекомендуется поставить архиватор, например 7-Zip.

× Предупреждение: Вы ввели верный пароль, но он не снимает ограничение на редактирование файла. Введите пароль с соответствующими правами доступа.

Создавайте архивы TAR.GZ из ваших файлов или конвертируйте существующие архивы в формат TAR.GZ с помощью бесплатного он-лайн архиватора. Вы можете как загрузить свой файл, так и указать ссылку на файл или архив. После этого начнется немедленное конвертирование файла в формат TAR.GZ.

Уже существующие архивы могут быть легко преобразованы в формат TAR.GZ. Мы конвертируем архивы из формата ZIP в TAR.GZ, TAR.BZ2 в TAR.GZ и т.д. Оцените работу конвертера!

Расширение Online-Convert для Firefox

Оставайтесь на связи:

Оцените инструмент 4.9 / 5

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

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