Перейти до змісту

Команда tar

Огляд

tar — це інструмент для обробки архівних файлів у GNU/Linux та інших операційних системах UNIX. Це розшифровується як «tape archive».

Зручне зберігання файлів на магнітній стрічці було початковим використанням архівів tar. Назва «tar» походить від цього використання. Незважаючи на назву утиліти, tar може спрямовувати свій вихід на доступні пристрої, файли чи інші програми (за допомогою каналів) і отримувати доступ до віддалених пристроїв або файлів (як архіви).

tar, який зараз використовується в сучасному GNU/Linux, спочатку походить від проекту GNU. Ви можете переглянути та завантажити всі версії tar на GNU's website.

Примітка

`tar` у різних дистрибутивах може мати різні параметри за замовчуванням. Будьте обережні при їх використанні.

```bash
# RockyLinux 8 and Fedora 41
Shell > tar --show-defaults
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/etc/rmt --rsh-command=/usr/bin/ssh
```

Використання tar

Використовуючи tar, зауважте, що він має два режими збереження:

  • Відносний режим (за замовчуванням): видалення початкового символу '/' з файлу. Навіть якщо ви додали файл із абсолютним шляхом, tar видалить початковий символ "/" у цьому режимі.
  • Абсолютний режим: збережіть початковий символ '/' і включіть його в назву файлу. Щоб увімкнути цей режим збереження, потрібно використати опцію -P. У цьому режимі ви повинні представити всі файли як абсолютні шляхи. З міркувань безпеки вам не слід використовувати цей режим збереження в більшості випадків, якщо немає спеціальних вимог сценарію.

Коли ви використовуєте tar, ви зустрінете такі суфікси, як .tar.gz, .tar.xz і .tar.bz2, які вказують на те, що ви спочатку створюєте архів (класифікуючи пов’язані файли як один файл), а потім стисніть файл за допомогою відповідного типу стиснення або алгоритму.

Тип або алгоритм стиснення може бути gzip, bzip2, xz, zstd або іншим.

tar дозволяє видобувати один файл або каталог із резервної копії, переглядати його вміст або перевіряти його цілісність.

Використання створення архіву та використання стиснення:

  • tar [option] [PATH] [DIR1] ... [FILE1] .... Наприклад, tar -czvf /tmp/Fullbackup-20241201.tar.gz /etc/ /var/log/

Використання для вилучення файлу з архіву:

  • tar [option] [PATH] -C [dir]. Наприклад, tar -xzvf /tmp/Fullbackup-20241201.tar.gz -C /tmp/D1

antic

Коли ви видобуваєте файли з архівних файлів, tar автоматично вибирає тип стиснення на основі доданого вручну суфікса. Наприклад, для файлів .tar.gz можна напряму використовувати tar -vxf без використання tar -zvxf. Ви повинні вибрати тип стиснення для створення архівних стиснутих файлів.

Примітка

У GNU/Linux більшість файлів не потребують розширення, за винятком робочого середовища (GUI). Причиною штучного додавання суфіксів є полегшення розпізнавання користувачами. Якщо системний адміністратор бачить, наприклад, розширення файлу `.tar.gz` або `.tgz`, він знає, як поводитися з файлом.

Робочі параметри або типи

типиопис
-AДодає всі файли в одному архіві в кінець іншого архіву. Застосовується лише до архівних нестиснутих файлів типу .tar
-cСтворює архів. Дуже часто використовується
-dПорівнює відмінності між заархівованими та відповідними незаархівованими файлами
-rДодає файли або каталоги в кінець архіву. Застосовується лише до архівних нестиснутих файлів типу .tar
-tПерелічує вміст архіву
-uДо архіву додає лише нові файли. Застосовується лише до архівних нестиснутих файлів типу .tar
-xВиписка з архіву. Дуже часто використовується
--deleteВидаляє файли або каталоги з архіву ".tar". Застосовується лише до архівних нестиснутих файлів типу .tar

Порада

Що стосується типів операцій, автор рекомендує залишити префікс «-» для збереження звичок користувача. Звичайно, це не обов'язково. Операційні параметри тут вказують на вашу основну функцію з tar. Іншими словами, вам потрібно вибрати один з перерахованих вище типів.

Поширені допоміжні опції

опціяопис
-zВикористовуйте gzip як тип стиснення. Застосовуються як створення архівів, так і вилучення з архівів
-vВідображає детальні деталі обробки
-fВказує ім’я файлу для архівування (включаючи суфікс файлу)
-jВикористовуйте bzip2 як тип стиснення. Застосовуються як створення архівів, так і вилучення з архівів
-JВикористовуйте "xz" як тип стиснення. Застосовуються як створення архівів, так і вилучення з архівів
-CЗберігає розташування після вилучення файлів з архіву
-PЗберігає в абсолютному режимі

Для інших допоміжних опцій, не згаданих, див. man 1 tar

Різниця версії

У деяких старіших версіях tar параметри називаються «ключами», що означає, що використання параметрів із префіксом «-» може призвести до того, що `tar` не працюватиме належним чином. На цьому етапі вам потрібно видалити префікс "-", щоб він працював належним чином.

Про стилі варіантів

tar надає три опційні стилі:

  1. Традиційний стиль:

  2. tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...].

  3. Використання стилю короткого варіанту:

  4. tar -A [OPTIONS] ARCHIVE ARCHIVE

  5. tar -c [-f ARCHIVE] [OPTIONS] [FILE...]
  6. tar -d [-f ARCHIVE] [OPTIONS] [FILE...]
  7. tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]
  8. tar -r [-f ARCHIVE] [OPTIONS] [FILE...]
  9. tar -u [-f ARCHIVE] [OPTIONS] [FILE...]
  10. tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]

  11. Використання стилю довгого варіанту:

  12. tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVE

  13. tar --create [--file ARCHIVE] [OPTIONS] [FILE...]
  14. tar {--diff|--compare} [--file ARCHIVE] [OPTIONS] [FILE...]
  15. tar --delete [--file ARCHIVE] [OPTIONS] [MEMBER...]
  16. tar --append [-f ARCHIVE] [OPTIONS] [FILE...]
  17. tar --list [-f ARCHIVE] [OPTIONS] [MEMBER...]
  18. tar --test-label [--file ARCHIVE] [OPTIONS] [LABEL...]
  19. tar --update [--file ARCHIVE] [OPTIONS] [FILE...]
  20. tar --update [-f ARCHIVE] [OPTIONS] [FILE...]
  21. tar {--extract|--get} [-f ARCHIVE] [OPTIONS] [MEMBER...]

Другий метод є більш поширеним і відповідає звичкам більшості користувачів GNU/Linux.

Ефективність компресії та частота використання

tar не має можливостей стиснення, тому його потрібно використовувати разом з іншими інструментами стиснення. Стиснення та декомпресія впливатиме на споживання ресурсів.

Ось рейтинг стиснення набору текстових файлів від найменшого до найбільш ефективного:

  • compress (.tar.Z) - Менш популярний
  • gzip (.tar.gz or .tgz) - Популярний
  • bzip2 (.tar.bz2 or .tb2 or .tbz) - Популярний
  • lzip (.tar.lz) - Менш популярний
  • xz (.tar.xz) - Популярний

Правила іменування для tar

Ось приклади іменування архівів tar:

Основна функція та допоміжні опціїФайлиСуфіксФункціональність
-cvfhomehome.tar/home у відносному режимі, нестиснена форма
-cvfP/etcetc.A.tar/etc в абсолютному режимі, без стиснення
-cvfzusrusr.tar.gz/usr у відносному режимі, стиснення gzip
-cvfjusrusr.tar.bz2/usr у відносному режимі, стиснення bzip2
-cvfPz/homehome.A.tar.gz/home в абсолютному режимі, стиснення gzip
-cvfPj/homehome.A.tar.bz2/home в абсолютному режимі, стиснення bzip2

Ви також можете додати дату до імені файлу.

Приклад використання

Тип -c

  1. Архівуйте та стискайте /etc/ у відносному режимі з суфіксом .tar.gz:
Shell > tar -czvf /tmp/etc-20241207.tar.gz /etc/

Через те, що tar за замовчуванням працює у відносному режимі, перший рядок виводу команди відображатиме наступне:

tar: Removing leading '/' from member names
  1. Архівуйте /var/log/ і виберіть тип xz для стиснення:
Shell > tar -cJvf /tmp/log-20241207.tar.xz /var/log/

Shell > du -sh /var/log/ ; ls -lh /tmp/log-20241207.tar.xz
18M     /var/log/
-rw-r--r-- 1 root root 744K Dec  7 14:40 /tmp/log-20241207.tar.xz
  1. Оцініть розмір файлу без створення архіву:
Shell > tar -cJf - /etc | wc -c
tar: Removing leading `/' from member names
3721884

Одиницею виведення команди wc -c є байти.

  1. Виріжте великі файли .tar.gz:
Shell > cd /tmp/ ; tar -czf - /etc/  | split -d -b 2M - etc-backup20241207.tar.gz.

Shell > ls -lh /tmp/
-rw-r--r-- 1 root root 2.0M Dec  7 20:46 etc-backup20241207.tar.gz.00
-rw-r--r-- 1 root root 2.0M Dec  7 20:46 etc-backup20241207.tar.gz.01
-rw-r--r-- 1 root root 2.0M Dec  7 20:46 etc-backup20241207.tar.gz.02
-rw-r--r-- 1 root root  70K Dec  7 20:46 etc-backup20241207.tar.gz.03

Перший «-» представляє вхідні параметри tar, тоді як другий «-» повідомляє tar перенаправити вихід на stdout.

Щоб витягнути ці вирізані невеликі файли, ви можете вказати таку операцію:

Shell > cd /tmp/ ; cat etc-backup20241207.tar.gz.* >> /tmp/etc-backup-20241207.tar.gz

Shell > cd /tmp/ ; tar -xvf etc-backup-20241207.tar.gz -C /tmp/dir1/

Тип -x

  1. Завантажте вихідний код Redis і розпакуйте його в каталог /usr/local/src/
Shell > wget -c https://github.com/redis/redis/archive/refs/tags/7.4.1.tar.gz

Shell > tar -xvf 7.4.1.tar.gz -C /usr/local/src/
  1. Розпакуйте лише один файл із zip-архіву
Shell > tar -xvf /tmp/etc-20241207.tar.gz etc/chrony.conf

Тип -A або -r

  1. Додайте один файл .tar до іншого файлу .tar:
Shell > tar -cvf /tmp/etc.tar /etc/

Shell > tar -cvf /tmp/log.tar /var/log/

Shell > tar -Avf /tmp/etc.tar /tmp/log.tar

Це означає, що всі файли в "log.tar" будуть додані в кінець "etc.tar".

  1. Додайте файли або каталоги до файлу .tar:
Shell > tar -rvf /tmp/log.tar /etc/chrony.conf
tar: Removing leading `/' from member names
/etc/chrony.conf
tar: Removing leading `/' from hard link targets

Shell > tar -rvf /tmp/log.tar /tmp/dir1

Важливо

Незалежно від того, чи використовуєте ви опцію «-A» чи «-r», враховуйте режим збереження відповідних архівних файлів.

Важливо

`-A` і `-r` не застосовуються до заархівованих стиснених файлів.

тип -t

  1. Перегляньте вміст архіву:
Shell > tar -tvf /tmp/log.tar

Shell > tar -tvf /tmp/etc-20241207.tar.gz | less

тип -d

  1. Порівняйте відмінності файлів:
Shell > cd / ; tar -dvf /tmp/etc.tar etc/chrony.conf
etc/chrony.conf

Shell > cd / ; tar -dvf /tmp/etc-20241207.tar.gz etc/

Для методів зберігання, які використовують відносний режим, при використанні типу -d змініть шлях до файлу на '/'.

тип -u

  1. Якщо існує кілька версій одного файлу, ви можете використовувати тип -u:
Shell > touch /tmp/tmpfile1

Shell > tar -rvf /tmp/log.tar /tmp/tmpfile1

Shell > echo "File Name" >> /tmp/tmpfile1

Shell > tar -uvf /tmp/log.tar /tmp/tmpfile1

Shell > tar -tvf /tmp/log.tar
...
-rw-r--r-- root/root         0 2024-12-07 18:53 tmp/tmpfile1
-rw-r--r-- root/root        10 2024-12-07 18:54 tmp/tmpfile1

Тип --delete

  1. Ви також можете використовувати --delete, щоб видалити файли всередині .tar файлу.
Shell > tar --delete -vf /tmp/log.tar tmp/tmpfile1

Shell > tar --delete -vf /tmp/etc.tar etc/motd.d/

При видаленні ви видаляєте з архіву всі файли з однаковою назвою.

Загальноприйнята термінологія

Деякі веб-сайти згадують два терміни:

  • tarfile - Відноситься до нестиснутих архівних файлів, таких як файли .tar
  • tarball - Відноситься до стислих архівних файлів, таких як .tar.gz і .tar.xz

Author: tianci li

Contributors: Ganna Zhyrnova