15 примеров команд tar для системных администраторов и разработчиков

Примечание. Следующая статья поможет вам: 15 примеров команд tar для системных администраторов и разработчиков

tar — один из популярных форматов архивирования файлов, доступных в системах на базе Unix и Linux.

Само название происходит от Тобезьяна дополненная реальностьchive, так как он был разработан для последовательной записи данных на ленточные устройства. Иногда его также называют tarball.

По умолчанию tar архивирует только файлы без сжатия, но используя некоторые части. Мы можем использовать различные методы сжатия для получения сжатого вывода. Утилита tar обычно включена в большинство дистрибутивов Linux по умолчанию, а сам формат поддерживается в других операционных системах, включая Windows и macOS, с помощью различных инструментов и утилит.

В этой статье мы рассмотрим некоторые распространенные примеры и использование команды tar и поддерживаемых ею флагов.

Итак, приступим…

Создать tar-архив

Синтаксис команды tar для создания простого несжатого архива следующий:

$ tar cvf

Здесь флаги c означают создание, v — подробный вывод, а f — указание имени файла архива tar. По соглашению укажите имя файла tar с расширением .tar. Файлы для архивирования можно указать с помощью подстановочных знаков или в виде одного или нескольких имен/путей файлов.

Например, у меня есть три файла в моем каталоге:

$ ls -l total 12 -rw-r–r– 1 abhisheknair abhisheknair 13 сен 12 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 19 сен 12 20:08 file2.txt -rw -r–r– 1 abhisheknair abhisheknair 24 сен 12 20:08 file3.txt $

И я хочу создать tar-архив, содержащий все три файла, это можно сделать так:

$ tar cvf архив.tar * файл1.txt файл2.txt файл3.txt $ ls -l архив.tar -rw-r–r– 1 abhisheknair abhisheknair 10240 12 сентября 20:15 архив.tar $

Я также могу указать только определенные файлы для архивирования, например:

$ tar cvf архив1.tar файл1.txt файл2.txt файл1.txt файл2.txt $ ls -l архив1.tar -rw-r–r– 1 abhisheknair abhisheknair 10240 12 сентября 20:15 архив1.tar $

Создать сжатый архив (GZ)

tar позволяет не только архивировать файлы, но и сжимать их для экономии места. Одним из популярных форматов сжатия является gunzip, обычно представленный расширением .gz после .tar или как tgz. Мы можем использовать флаг z, чтобы указать, что файлы должны быть сжаты с помощью gunzip. Вот пример:

$ tar cvzf архив.tar.gz файл* файл1.txt файл2.txt файл3.txt $ ls -l архив.tar архив.tar.gz -rw-r–r– 1 abhisheknair abhisheknair 10240 12 сент. 20:15 архив .tar -rw-r–r– 1 abhisheknair abhisheknair 188 сен 12 20:21 archive.tar.gz $

Вы можете заметить, что размер обоих архивных файлов существенно различается, хотя оба содержат одни и те же три файла. Это связано с использованием сжатия с использованием флага z.

Создать сжатый архив (BZ2)

tar поддерживает несколько других форматов сжатия. Одним из них является bz2 или bzip2, который представлен расширением tar.bz2 или иногда как tbz2. Это может дать вам меньший размер архива, но, в свою очередь, потребляет больше ресурсов ЦП, поэтому процесс сжатия/распаковки может быть медленнее, чем архив gz.

Пример:

$ tar cvjf архив.tar.bz2 файл* файл1.txt файл2.txt файл3.txt $ ls -l архив.tar архив.tar.gz архив.tar.bz2 -rw-r–r– 1 abhisheknair abhisheknair 10240 сен 12 20:15 archive.tar -rw-r–r– 1 abhisheknair abhisheknair 212 12 сен 20:25 archive.tar.bz2 -rw-r–r– 1 abhisheknair abhisheknair 188 12 сен 20:21 архив. tar.gz $ file archive.tar* archive.tar: POSIX-архив tar (GNU) archive.tar.bz2: сжатые данные bzip2, размер блока = 900 КБ archive.tar.gz: сжатые данные gzip из Unix, исходный размер по модулю 2 ^32 10240 $

Распаковать все файлы

Архив tar (сжатый или несжатый) можно извлечь, просто используя опцию x. Ниже приведены примеры, поясняющие его использование:

$ tar xvf архив.tar файл1.txt файл2.txt файл3.txt $ ls -l всего 24 -rw-r–r– 1 abhisheknair abhisheknair 10240 19 сентября 18:25 архив.tar -rw-r–r- – 1 abhisheknair abhisheknair 13 сент. 12 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 19 сент. :08 файл3.txt $

Это работает для сжатого gz-архива следующим образом:

$ tar xvf архив.tar.gz файл1.txt файл2.txt файл3.txt $ ls -l всего 16 -rw-r–r– 1 abhisheknair abhisheknair 188 сен 19 18:27 archive.tar.gz -rw-r –r– 1 abhisheknair abhisheknair 13 сент. 12 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 19 сент. 24 сен 12 20:08 file3.txt $

Или даже для сжатого архива bz2 как:

$ tar xvf архив.tar.bz2 файл1.txt файл2.txt файл3.txt $ ls -l всего 16 -rw-r–r– 1 abhisheknair abhisheknair 212 сен 19 18:31 archive.tar.bz2 -rw-r –r– 1 abhisheknair abhisheknair 13 сент. 12 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 19 сент. 24 сен 12 20:08 file3.txt $

Список содержимого tar

Чтобы просмотреть содержимое tar-архива, вы можете использовать флаг t, как показано ниже:

$ tar tvf archive.tar.bz2 -rw-r–r– abhisheknair/abhisheknair 13 12.09.2021 20:08 file1.txt -rw-r–r– abhisheknair/abhisheknair 19 12.09.2021 20:08 file2.txt -rw-r–r– abhisheknair/abhisheknair 24 2021-09-12 20:08 file3.txt $

Распаковать определенные файлы

Только один файл можно извлечь из архива tar, tar.gz или tar.bz2, указав имя файла как:

$ tar xvf archive.tar.bz2 file1.txt file1.txt $ ls -l total 8 -rw-r–r– 1 abhisheknair abhisheknair 212 сен 19 18:31 archive.tar.bz2 -rw-r–r — 1 abhisheknair abhisheknair 13 сен 12 20:08 file1.txt $

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

$ tar xvf архив.tar.bz2 файл1.txt файл3.txt файл1.txt файл3.txt $ ls -l всего 12 -rw-r–r– 1 abhisheknair abhisheknair 212 сен 19 18:31 архив.tar.bz2 – rw-r–r– 1 abhisheknair abhisheknair 13 сен 12 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 24 сен 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 abhisheknair abhisheknair 212 сен 19 18:31 архив. tar.bz2 -rw-r–r– 1 abhisheknair abhisheknair 13 сен 12 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 19 сен 12 20:08 file2.txt -rw-r- -r– 1 abhisheknair abhisheknair 24 сен 12 20:08 file3.txt $

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

Новые файлы могут быть добавлены/добавлены к существующим несжатым архивам с помощью флага r или –append с новыми именами файлов или шаблоном подстановки (помните, что это работает только с несжатыми файлами .tar, а не со сжатыми форматами tar.gz или tar.bz2):

$ tar rvf archive.tar файл-новый* файл-new.txt файл-new2.txt $ tar tvf archive.tar -rw-r–r– abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r–r– абхишекнаир/abhisheknair 19 12 сентября 2021 г. 20:08 file2.txt -rw-r–r– абхишекнаир/abhisheknair 24 12 сентября 2021 г. 20:08 file3.txt -rw -r–r– abhisheknair/абхишекнаир 15 19.09.2021 18:59 file2.txt -rw-r–r– abhisheknair/абхишекнаир 10 19.09.2021 18:58 file4.txt -rw-r –r– abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new.txt -rw-r–r– abhisheknair/abhisheknair 9 2021-09-19 19:10 file-new2.txt $

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

Удалить файлы из архива

Удаление определенных файлов из архива tar возможно с использованием флага –delete, как показано ниже (сравните список tar до и после удаления файлов):

$ tar tvf archive.tar -rw-r–r– abhisheknair/abhisheknair 13 2021-09-12 20:08 file1.txt -rw-r–r– abhisheknair/abhisheknair 19 2021-09-12 20: 08 file2.txt -rw-r–r– abhisheknair/abhisheknair 24 12.09.2021 20:08 file3.txt -rw-r–r– abhisheknair/abhisheknair 15 19-09-2021 18:59 file2 .txt -rw-r–r– abhisheknair/abhisheknair 10 19.09.2021 18:58 file4.txt -rw-r–r– abhisheknair/abhisheknair 9 19.09.2021 19:10 file-new .txt -rw-r–r– abhisheknair/abhisheknair 9 2021-09-19 19:10 файл-new2.txt $ tar –delete -f archive.tar файл-new.txt файл-new2.txt $ tar tvf archive.tar -rw-r–r– abhisheknair/abhisheknair 13 12 сентября 2021 г. 20:08 file1.txt -rw-r–r– abhisheknair/abhisheknair 19 12 сентября 2021 г. 20:08 file2 .txt -rw-r–r– abhisheknair/abhisheknair 24 12.09.2021 20:08 file3.txt -rw-r–r– abhisheknair/abhisheknair 15 19-09-2021 18:59 file2.txt -rw-r–r– abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt $

Опять же, это работает только для несжатых архивов и не работает для форматов сжатых архивов.

Создать с проверкой

При создании несжатых файлов tar вы можете проверить содержимое архива, используя флаг W, как:

$ tar cvfW архив.tar файл*.txt файл1.txt файл2.txt файл3.txt Проверить файл1.txt Проверить файл2.txt Проверить файл3.txt $

Это нельзя использовать с флагами сжатия, хотя вы можете сжать созданный файл tar позже, используя gzip или другие инструменты.

Извлечь tar в папку

Если вы хотите извлечь содержимое архива в определенную папку, а не в текущий каталог, используйте флаг -C с путем к каталогу, как показано ниже:

$ tar xvf архив.tar -C новый-каталог/ файл1.txt файл2.txt файл3.txt файл2.txt файл4.txt $ ls -l новый-каталог/ всего 16 -rw-r–r– 1 abhisheknair abhisheknair 13 12 сен 20:08 file1.txt -rw-r–r– 1 abhisheknair abhisheknair 15 19 сен 18:59 file2.txt -rw-r–r– 1 abhisheknair abhisheknair 24 сен 12 20:08 file3.txt -rw-r–r– 1 abhisheknair abhisheknair 10 сен 19 18:58 file4.txt $

Использовать флаг различий

Вы можете использовать флаг –diff или d, чтобы найти любые изменения между файлами в архиве tar и файлами в файловой системе. Вот пример, который запускает diff один раз, когда файл внутри tar и снаружи был одинаковым. После обновления файла он был запущен еще раз, чтобы показать разницу в выводе.

$ tar dvf archive.tar file4.txt file4.txt $ $ echo newline > file4.txt $ $ tar dvf archive.tar file4.txt file4.txt file4.txt: время модификации отличается file4.txt: отличается размер $

Исключить файлы

Исключение определенных файлов может быть требованием при создании 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 abhisheknair abhisheknair 9 сен 19 19:10 file-new.txt -rw-r–r– 1 abhisheknair abhisheknair 9 сен 19 19:10 file-new2. txt -rw-r–r– 1 abhisheknair abhisheknair 5 сен 19 19:20 file-new3.txt -rw-r–r– 1 abhisheknair abhisheknair 5 сен 19 19:27 file1.txt -rw-r- -r– 1 abhisheknair abhisheknair 6 сен 19 19:27 file2.txt -rw-r–r– 1 abhisheknair abhisheknair 8 сен 19 19:27 file3.txt $ tar tvf archive.tar.gz drwxr-xr-x abhisheknair/abhisheknair 0 19.09.2021 19:30 dir/ -rw-r–r– abhisheknair/abhisheknair 5 19.09.2021 19:27 dir/file1.txt -rw-r–r– abhisheknair /abhisheknair 8 2021-09-19 19:27 dir/file3.txt $

Как вы можете заметить из приведенного выше вывода, мы можем указать флаг –exclude несколько раз, чтобы указать несколько имен файлов или шаблонов в условии AND. Обратите внимание, что из шести файлов в каталоге в приведенном выше примере только два файла удовлетворяли условию включения в archive.at.gz.

Просмотр размера содержимого tar

Мы можем получить размер содержимого сжатого tar-архива, используя следующую команду:

$ tar tvf archive.tar.gz -rw-r–r– abhisheknair/abhisheknair 13 12.09.2021 20:08 file1.txt -rw-r–r– abhisheknair/abhisheknair 19 12.09.2021 20:08 file2.txt -rw-r–r– abhisheknair/abhisheknair 24 12 сентября 2021 г. 20:08 file3.txt $ tar -xzf archive.tar.gz –to-stdout|wc -c 56 $

Аналогично для архива bz2:

$ tar tvf archive.tar.bz2 -rw-r–r– abhisheknair/abhisheknair 13 12.09.2021 20:08 file1.txt -rw-r–r– abhisheknair/abhisheknair 19 12.09.2021 20:08 file2.txt -rw-r–r– abhisheknair/abhisheknair 24 12 сентября 2021 г. 20:08 file3.txt $ tar -xjf archive.tar.bz2 –to-stdout|wc -c 56 $

Сохранить разрешения

По умолчанию команда tar сохраняет разрешения файлов и каталогов, которые она архивирует, хотя вы можете явно указать то же самое, используя флаг -p или –preserve-permissions, как показано ниже:

$ tar cvpzf архив.tar.gz *.txt файл1.txt файл2.txt файл3.txt $

Резюме 👨‍💻

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

Обратитесь к справочной странице man tar или используйте команду tar –help или tar –usage для получения дополнительной информации.

Related Articles

Back to top button