Команда 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 надає три опційні стилі:
-
Традиційний стиль:
-
tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]. -
Використання стилю короткого варіанту:
-
tar -A [OPTIONS] ARCHIVE ARCHIVE tar -c [-f ARCHIVE] [OPTIONS] [FILE...]tar -d [-f ARCHIVE] [OPTIONS] [FILE...]tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]tar -r [-f ARCHIVE] [OPTIONS] [FILE...]tar -u [-f ARCHIVE] [OPTIONS] [FILE...]-
tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...] -
Використання стилю довгого варіанту:
-
tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVE tar --create [--file ARCHIVE] [OPTIONS] [FILE...]tar {--diff|--compare} [--file ARCHIVE] [OPTIONS] [FILE...]tar --delete [--file ARCHIVE] [OPTIONS] [MEMBER...]tar --append [-f ARCHIVE] [OPTIONS] [FILE...]tar --list [-f ARCHIVE] [OPTIONS] [MEMBER...]tar --test-label [--file ARCHIVE] [OPTIONS] [LABEL...]tar --update [--file ARCHIVE] [OPTIONS] [FILE...]tar --update [-f ARCHIVE] [OPTIONS] [FILE...]tar {--extract|--get} [-f ARCHIVE] [OPTIONS] [MEMBER...]
Другий метод є більш поширеним і відповідає звичкам більшості користувачів GNU/Linux.
Ефективність компресії та частота використання¶
tar не має можливостей стиснення, тому його потрібно використовувати разом з іншими інструментами стиснення. Стиснення та декомпресія впливатиме на споживання ресурсів.
Ось рейтинг стиснення набору текстових файлів від найменшого до найбільш ефективного:
- compress (
.tar.Z) - Менш популярний - gzip (
.tar.gzor.tgz) - Популярний - bzip2 (
.tar.bz2or.tb2or.tbz) - Популярний - lzip (
.tar.lz) - Менш популярний - xz (
.tar.xz) - Популярний
Правила іменування для tar¶
Ось приклади іменування архівів tar:
| Основна функція та допоміжні опції | Файли | Суфікс | Функціональність |
|---|---|---|---|
-cvf |
home |
home.tar |
/home у відносному режимі, нестиснена форма |
-cvfP |
/etc |
etc.A.tar |
/etc в абсолютному режимі, без стиснення |
-cvfz |
usr |
usr.tar.gz |
/usr у відносному режимі, стиснення gzip |
-cvfj |
usr |
usr.tar.bz2 |
/usr у відносному режимі, стиснення bzip2 |
-cvfPz |
/home |
home.A.tar.gz |
/home в абсолютному режимі, стиснення gzip |
-cvfPj |
/home |
home.A.tar.bz2 |
/home в абсолютному режимі, стиснення bzip2 |
Ви також можете додати дату до імені файлу.
Приклад використання¶
Тип -c¶
- Архівуйте та стискайте /etc/ у відносному режимі з суфіксом
.tar.gz:
Shell > tar -czvf /tmp/etc-20241207.tar.gz /etc/
Через те, що tar за замовчуванням працює у відносному режимі, перший рядок виводу команди відображатиме наступне:
tar: Removing leading '/' from member names
- Архівуйте /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
- Оцініть розмір файлу без створення архіву:
Shell > tar -cJf - /etc | wc -c
tar: Removing leading `/' from member names
3721884
Одиницею виведення команди wc -c є байти.
- Виріжте великі файли
.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¶
- Завантажте вихідний код 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/
- Розпакуйте лише один файл із zip-архіву
Shell > tar -xvf /tmp/etc-20241207.tar.gz etc/chrony.conf
Тип -A або -r¶
- Додайте один файл
.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".
- Додайте файли або каталоги до файлу
.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¶
- Перегляньте вміст архіву:
Shell > tar -tvf /tmp/log.tar
Shell > tar -tvf /tmp/etc-20241207.tar.gz | less
тип -d¶
- Порівняйте відмінності файлів:
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¶
- Якщо існує кілька версій одного файлу, ви можете використовувати тип
-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¶
- Ви також можете використовувати
--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