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

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

Сама назва походить від Tape ARchive, оскільки вона була розроблена для запису послідовних даних на стрічкові пристрої. Іноді його також називають tarball.

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

У цій статті ми розглянемо деякі поширені приклади та використання команди tar і її підтримуваних позначок.

Отже, почнемо…

Створіть архів tar

Щоб створити простий нестиснений архів, синтаксис команди tar такий:

$ tar cvf <tar-file-name> <files-to-archive>

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

Як приклад, у моєму каталозі є три файли:

$ ls -l
total 12
-rw-r--r-- 1 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 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 abhisheknair abhisheknair 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 abhisheknair abhisheknair 10240 Sep 12 20:15 archive1.tar
$

Створити стислий архів (GZ)

tar дозволяє не тільки архівувати файли, але й стискати їх для економії місця. Одним із популярних форматів стиснення є gunzip, зазвичай представлений розширенням .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 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   188 Sep 12 20:21 archive.tar.gz
$

Ви можете помітити, що розмір обох архівних файлів суттєво відрізняється, навіть якщо обидва містять однакові три файли. Це пов’язано з використанням стиснення за допомогою прапора z.

  Як змінити розташування DoorDash

Створити стислий архів (BZ2)

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 abhisheknair abhisheknair 10240 Sep 12 20:15 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair   212 Sep 12 20:25 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair   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
$

Розпакуйте всі файли

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

$ tar xvf archive.tar
file1.txt
file2.txt
file3.txt
$ ls -l
total 24
-rw-r--r-- 1 abhisheknair abhisheknair 10240 Sep 19 18:25 archive.tar
-rw-r--r-- 1 abhisheknair abhisheknair    13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair    19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair    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 abhisheknair abhisheknair 188 Sep 19 18:27 archive.tar.gz
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  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 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Перелік вмісту tar

Щоб отримати список вмісту архіву tar, ви можете використати позначку t, як показано нижче:

$ tar tvf archive.tar.bz2
-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 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 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  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 abhisheknair abhisheknair 212 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  24 Sep 12 20:08 file3.txt
$

Розпакуйте за допомогою символу підстановки

Щоб видобути один або кілька файлів за допомогою символу підстановки PATTERN, використовуйте прапорець –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 Sep 19 18:31 archive.tar.bz2
-rw-r--r-- 1 abhisheknair abhisheknair  13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair  19 Sep 12 20:08 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair  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-- 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 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 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 знову показує два щойно доданих файли.

  3 розумні способи змінити дату виставлення рахунку Netflix

Видалити файли з архіву

Видалити певні файли з архіву 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 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 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
$ tar --delete -f archive.tar file-new.txt file-new2.txt
$ 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 2021-09-12 20:08 file3.txt
-rw-r--r-- abhisheknair/abhisheknair 15 2021-09-19 18:59 file2.txt
-rw-r--r-- abhisheknair/abhisheknair 10 2021-09-19 18:58 file4.txt
$

Знову ж таки, це працює лише для нестиснутих архівів і не працюватиме для стислих форматів архівів.

Створіть за допомогою перевірки

Під час створення нестиснутих файлів tar ви можете перевірити вміст архіву за допомогою прапорця W як:

$ tar cvfW archive.tar file*.txt
file1.txt
file2.txt
file3.txt
Verify file1.txt
Verify file2.txt
Verify file3.txt
$

Це не можна використовувати з прапорцями стиснення, хоча ви можете стиснути створений файл tar пізніше за допомогою gzip або інших інструментів.

Видобути tar у папку

Якщо ви хочете видобути вміст архіву до певної папки замість поточного каталогу, використовуйте прапорець -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 abhisheknair abhisheknair 13 Sep 12 20:08 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 15 Sep 19 18:59 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 24 Sep 12 20:08 file3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 10 Sep 19 18:58 file4.txt
$

Використовуйте прапорець diff

Ви можете використовувати –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: 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 abhisheknair abhisheknair 9 Sep 19 19:10 file-new.txt
-rw-r--r-- 1 abhisheknair abhisheknair 9 Sep 19 19:10 file-new2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:20 file-new3.txt
-rw-r--r-- 1 abhisheknair abhisheknair 5 Sep 19 19:27 file1.txt
-rw-r--r-- 1 abhisheknair abhisheknair 6 Sep 19 19:27 file2.txt
-rw-r--r-- 1 abhisheknair abhisheknair 8 Sep 19 19:27 file3.txt
$ tar tvf archive.tar.gz
drwxr-xr-x abhisheknair/abhisheknair 0 2021-09-19 19:30 dir/
-rw-r--r-- abhisheknair/abhisheknair 5 2021-09-19 19:27 dir/file1.txt
-rw-r--r-- abhisheknair/abhisheknair 8 2021-09-19 19:27 dir/file3.txt
$

Як ви можете помітити з наведених вище результатів, ми можемо вказати прапорець –exclude кілька разів, щоб указати декілька імен файлів або шаблонів в умові І. Зауважте, що з шести файлів у каталозі у наведеному вище прикладі лише два файли задовольняли умови для включення до archive.at.gz.

  Керувати завданнями легко за допомогою цих 11 інструментів

Переглянути розмір вмісту tar

Ми можемо отримати розмір вмісту стисненого архіву tar за допомогою команди нижче:

$ tar tvf archive.tar.gz
-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 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-- 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 2021-09-12 20:08 file3.txt
$ tar -xjf archive.tar.bz2 --to-stdout|wc -c
56
$

Зберегти дозволи

За замовчуванням команда tar зберігає дозволи для файлів і каталогів, які вона архівує, хоча ви можете явно вказати те саме за допомогою прапорця -p або –preserve-permissions, як показано нижче:

$ tar cvpzf archive.tar.gz *.txt
file1.txt
file2.txt
file3.txt
$

Резюме 👨‍💻

tar є корисною утилітою в системах Unix/Linux протягом тривалого часу, і в основному використовувалася для завдань архівування та резервного копіювання. З часом ця утиліта розширювалася багатьма опціями. Його можна використовувати для простих і складних завдань, якщо ви знаєте його функції. У цій статті описано деякі основні операції, які можна виконувати за допомогою команди tar, і показано, як вона може допомогти вам у щоденних завданнях системного адміністрування.

Зверніться до його сторінки довідки man tar або скористайтеся командою tar –help або tar –usage, щоб отримати додаткові відомості.