Само название происходит отT ape AR chive,Потому что он был разработан для записи последовательных данных на ленточные устройства.,его иногда еще называют tarball。
По умолчанию tar Только файлы Архив без сжатия, но используя определенные части, мы можем использовать разные методы сжатия для получения сжатого вывода, tar Утилиты обычно включены по умолчанию в большинство дистрибутивов Linux, а также с помощью различных инструментов и утилит в другие операционные системы, включая Windows и macOS) поддерживает сам формат.
В этой статье мы познакомимся с командой tar.
Итак, начнем…
Чтобы создать простой несжатый архив, команда tar имеет следующий синтаксис:
$ tar cvf <tar-file-name> <files-to-archive>
Флаг c здесь обозначает создателя, v подробный вывод и указан f. tar Имя файла архива.
В соответствии с соглашением об указании расширения имени файла .tar.tar файл, подлежащий тарированию, может быть указан с использованием подстановочных знаков или одного или нескольких имен файлов/путей.
Например, у меня в каталоге есть три файла:
$ ls -l
total 12
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
$
Я хочу создать tar, содержащий Архив всех трех файлов, я могу сделать это:
$ tar cvf archive.tar *
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar
-rw-r--r-- 1 wljslmz wljslmz 10240 Sep 12 20:15 archive.tar
$
Я также могу указать в Архив только определенные файлы, например:
$ tar cvf archive1.tar file1.txt file2.txt
file1.txt
file2.txt
$ ls -l archive1.tar
-rw-r--r-- 1 wljslmz wljslmz 10240 Sep 12 20:15 archive1.tar
$
tar может не только файлы Архив,Их также можно сжать для экономии места.,Решение популярного формата сжатия дагунзип.,в целомда Представлено расширением.gzназад.tarили какtgz。
Мы можем использовать флаг z, чтобы указать файлы, которые нам нужно сжать с помощью Gunzip, вот пример:
$ tar cvzf archive.tar.gz file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz
-rw-r--r-- 1 wljslmz wljslmz 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 wljslmz wljslmz 188 Sep 12 20:21 archive.tar.gz
$
Вы можете заметить, что размер двух файлов Архива сильно различается.,Хотя все они содержат одни и те же три файла,этотда Благодаря использованию сжатия используя флаг z.
tar поддерживает несколько других форматов сжатия,один из нихдаbz2илиbzip2в расширенииtar.bz2илииногда выражается какtbz2,Это может дать вам меньший размер Архива.,Но, в свою очередь, это будет потреблять больше процессора.,Поэтому процесс сжатия/распаковки может быть медленнее, чем у gzАрхив.
пример:
$ tar cvjf archive.tar.bz2 file*
file1.txt
file2.txt
file3.txt
$ ls -l archive.tar archive.tar.gz archive.tar.bz2
-rw-r--r-- 1 wljslmz wljslmz 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 wljslmz wljslmz 212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 wljslmz wljslmz 188 Sep 12 20:21 archive.tar.gz
$ file archive.tar*
archive.tar: POSIX tar archive (GNU)
archive.tar.bz2: bzip2 compressed data, block size = 900k
archive.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240
$
Используя опцию x, вы можете просто извлечь tar Архив (сжатый или несжатый),Следующий пример иллюстрирует его использование:
$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 wljslmz wljslmz 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
$
Это работает для сжатого gz Архива:
$ tar xvf archive.tar.gz
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 wljslmz wljslmz 188 Sep 19 18:27 archive.tar.gz
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
$
Даже для bz2 сжатый Архив:
$ tar xvf archive.tar.bz2
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 wljslmz wljslmz 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
$
перечислить tar Архив для содержимого, вы можете использовать флаг t, как показано ниже:
$ tar tvf archive.tar.bz2
-rw-r--r-- wljslmz/wljslmz 13 2021-09-12 20:08 file1.txt
-rw-r--r-- wljslmz/wljslmz 19 2021-09-12 20:08 file2.txt
-rw-r--r-- wljslmz/wljslmz 24 2021-09-12 20:08 file3.txt
$
Из tar или tar.gz или tar.bz2 можно извлечь только один файл, указав имя файла как archive:
$ tar xvf archive.tar.bz2 file1.txt
file1.txt
$ ls -l
total 8
-rw-r--r-- 1 wljslmz wljslmz 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
$
Аналогичным образом вы можете указать несколько имен файлов, разделенных пробелами, чтобы извлечь их все одновременно.
$ tar xvf archive.tar.bz2 file1.txt file3.txt
file1.txt
file3.txt
$ ls -l
total 12
-rw-r--r-- 1 wljslmz wljslmz 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
$
Чтобы извлечь один или несколько ШАБЛОНОВ файлов с использованием подстановочных знаков, используйте флаг --wildcards:
$ tar xvf archive.tar.bz2 --wildcards "file*"
file1.txt
file2.txt
file3.txt
$ ls -l
total 16
-rw-r--r-- 1 wljslmz wljslmz 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
$
Новые файлы можно добавить/присоединить к существующему несжатому архиву, используя r или --append для обозначения нового имени файла или шаблона подстановочных знаков (помните, что это работает только с несжатыми файлами .tar, а не со сжатым форматом tar.gz или tar.bz2):
$ tar rvf archive.tar file-new*
file-new.txt
file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- wljslmz/wljslmz 13 2021-09-12 20:08 file1.txt
-rw-r--r-- wljslmz/wljslmz 19 2021-09-12 20:08 file2.txt
-rw-r--r-- wljslmz/wljslmz 24 2021-09-12 20:08 file3.txt
-rw-r--r-- wljslmz/wljslmz 15 2021-09-19 18:59 file2.txt
-rw-r--r-- wljslmz/wljslmz 10 2021-09-19 18:58 file4.txt
-rw-r--r-- wljslmz/wljslmz 9 2021-09-19 19:10 file-new.txt
-rw-r--r-- wljslmz/wljslmz 9 2021-09-19 19:10 file-new2.txt
$
Вы можете заметить, что archive.tar снова отображается в списке, показывая два недавно добавленных файла.
Вы можете использовать флаг --delete, как показано ниже, из tar Удалить определенные файлы в Архив (сравнить файлы до удаления и после удаления) tar список):
$ tar tvf archive.tar
-rw-r--r-- wljslmz/wljslmz 13 2021-09-12 20:08 file1.txt
-rw-r--r-- wljslmz/wljslmz 19 2021-09-12 20:08 file2.txt
-rw-r--r-- wljslmz/wljslmz 24 2021-09-12 20:08 file3.txt
-rw-r--r-- wljslmz/wljslmz 15 2021-09-19 18:59 file2.txt
-rw-r--r-- wljslmz/wljslmz 10 2021-09-19 18:58 file4.txt
-rw-r--r-- wljslmz/wljslmz 9 2021-09-19 19:10 file-new.txt
-rw-r--r-- wljslmz/wljslmz 9 2021-09-19 19:10 file-new2.txt
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ tar tvf archive.tar
-rw-r--r-- wljslmz/wljslmz 13 2021-09-12 20:08 file1.txt
-rw-r--r-- wljslmz/wljslmz 19 2021-09-12 20:08 file2.txt
-rw-r--r-- wljslmz/wljslmz 24 2021-09-12 20:08 file3.txt
-rw-r--r-- wljslmz/wljslmz 15 2021-09-19 18:59 file2.txt
-rw-r--r-- wljslmz/wljslmz 10 2021-09-19 18:58 file4.txt
$
Опять же, это работает только с несжатыми файлами. tarball,Для сжатия Архивформат не удастся。
Создав несжатый файл tar, вы можете проверить содержимое Архива, используя следующий флаг W:
$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$
Это нельзя использовать с флагом сжатия, хотя вы можете заархивировать созданный файл позже с помощью gzip или других инструментов.
Если вы хотите tarball содержаниеразвязать Заархивировать в определенную папку бездатекущий каталог,Пожалуйста, используйте флаг -C с путем к каталогу,Как показано ниже:
$ tar xvf archive.tar -C new-directory/
file1.txt
file2.txt
file3.txt
file2.txt
file4.txt
$ ls -l new-directory/
total 16
-rw-r--r-- 1 wljslmz wljslmz 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 15 Sep 19 18:59 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 24 Sep 12 20:08 file3.txt
-rw-r--r-- 1 wljslmz wljslmz 10 Sep 19 18:58 file4.txt
$
Вы можете использовать --diff или dflag найти tar Любые изменения между файлами в файловой системе и файлами в файловой системе.,этотдапример,Этот пример сравнения запускается один раз, когда файлы внутри и снаружи tar одинаковы. После обновления файла,Запустите его еще раз, чтобы увидеть разницу в результатах.
$ tar dvf archive.tar file4.txt
file4.txt
$
$ echo newline > file4.txt
$
$ tar dvf archive.tar file4.txt
file4.txt
file4.txt: Mod time differs
file4.txt: Size differs
$
При создании tar-архива может возникнуть необходимость исключить определенные файлы, это можно сделать с помощью флага --exclude.
$ tar --exclude="dir/file2.txt" --exclude="dir/file-new*.txt" -cvzf archive.tar.gz dir/
dir/
dir/file1.txt
dir/file3.txt
$ ls -l dir
total 24
-rw-r--r-- 1 wljslmz wljslmz 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 wljslmz wljslmz 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 wljslmz wljslmz 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 wljslmz wljslmz 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 wljslmz wljslmz 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 wljslmz wljslmz 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x wljslmz/wljslmz 0 2021-09-19 19:30 dir/
-rw-r--r-- wljslmz/wljslmz 5 2021-09-19 19:27 dir/file1.txt
-rw-r--r-- wljslmz/wljslmz 8 2021-09-19 19:27 dir/file3.txt
$
Как видно из приведенного выше вывода, мы можем указать флаг --exclude несколько раз, чтобы указать несколько имен файлов или шаблонов в условии AND. Обратите внимание, что из шести файлов в каталоге dir в приведенном выше примере только два файла подходят для включения в archive.at.gz.
Мы можем получить сжатие, используя следующую команду tar Архивсодержаниеизразмер:
$ tar tvf archive.tar.gz
-rw-r--r-- wljslmz/wljslmz 13 2021-09-12 20:08 file1.txt
-rw-r--r-- wljslmz/wljslmz 19 2021-09-12 20:08 file2.txt
-rw-r--r-- wljslmz/wljslmz 24 2021-09-12 20:08 file3.txt
$ tar -xzf archive.tar.gz --to-stdout|wc -c
56
$
bz2Архив похож:
$ tar tvf archive.tar.bz2
-rw-r--r-- wljslmz/wljslmz 13 2021-09-12 20:08 file1.txt
-rw-r--r-- wljslmz/wljslmz 19 2021-09-12 20:08 file2.txt
-rw-r--r-- wljslmz/wljslmz 24 2021-09-12 20:08 file3.txt
$ tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$
По умолчанию Команда tar сохраняет права доступа к файлам и каталогам, которые она архивирует, хотя вы можете явно указать те же права. Флаг using-p или --preserve-permissions выглядит следующим образом:
$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$
tar уже давно Полезная утилита для Unix/Linux систем,В основном используется для задач архивирования и резервного копирования.,через некоторое время,Утилита разработала множество опций,Его можно использовать для решения задач от простых до сложных.,помещениеда Вы знаете, что он предлагает。
В этой статье объясняются некоторые основные операции, которые можно выполнить с помощью команды tar, и показано, как она может помочь вам в выполнении повседневных задач системного администрирования.