tar, як і find, - це одна з найстаріших утиліт UNIX®, тому її синтаксис кілька специфічний. Ось він:
tar [опції] [файли...]
Ось список деяких з опцій. Зверніть увагу, що всі вони мають еквівалентний довгий запис, але вам знадобиться звернутися до сторінці керівництва tar(1), бо тут ми їх перераховувати не будемо.
![]() | Примітка |
---|---|
Тепер в tar не використовується початкове тире ( |
x
: використовується для отримання файлів з існуючого архіву.
v
: докладний режим. Выводить список файлів, доданих чи витягнутих з архіву. У поєднанні з опцією t
(див. вище) виводить список файлів в довгому форматі замість короткого.
f <ім'я_файлу>
: створює архів з ім'ям ім'я_файлу
, витягує з архіву з ім'ям ім'я_файлу
чи виводить список файлів архіву ім'я_файлу
. Якщо цей параметр відсутній, файлом за умовчанням буде /dev/rmt0
, який зазвичай є спеціальним файлом, що пов'язаний зі стримером. Якщо ім'ям файла є -
(тире), введення чи введення даних (залежно від того, створюється архів чи виконується добування з нього) буде асоційовано зі стандартним входом чи виходом.
z
: повідомляє tar'у, що створюваний архів має бути стиснутий за допомогою gzip, або, що архів, з якого виконується добування, упакований gzip'ом.
j
: еквівалент z
, але для стискання використовується програма bzip2.
p
: при вилученні файлів з архіву зберігає всі файлові атрибути, включаючи власника, час останнього доступу і так далі. Дуже корисна для дампів файлової системи.
r
: додає в існуючий архів файли, список яких вказаний у командному рядку. Зверніть увагу, що архів, в який ви хочете додати файли, має бути не стиснутим!
A
: додає архіви, вказані в командному рядку, до архіву, вказаному опцією f
. За аналогією з опцією r
, щоб це спрацювало, архіви мають бути не стиснутими.
Існує ще безліч інших опцій, тому для одержання повного списку ви можете звернутися до сторінці керівництва tar(1). Погляньте, наприклад, на опцію d
.
Давайте розглянемо приклад. Припустимо, потрібно створити архів з усіма зображеннями каталогу /shared/images
, стиснути його bzip2'ом, назвати images.tar.bz2
і помістити свій домашній каталог /home
. Для цього наберіть наступне:
# # Примітка: ви повинні бути в каталозі, файли # якого ви хочете додати до архіву! # $ cd /shared $ tar cjf ~/images.tar.bz2 images/
Як бачите, тут ми використовували три опції: c
повідомила tar'у, що нам потрібно створити архів, j
упакувала його за допомогою bzip2, а f ~/images.tar.bz2
створила в нашому домашньому каталозі архів з ім'ям images.tar.bz2
. Тепер у нас може виникнути бажання перевірити цілісність архіву. Для цього ми можемо вивести список його файлів:
# # Повертаємося назад у домашній каталог # $ cd $ tar tjvf images.tar.bz2
Тут ми повідомили tar'у вивести список (t
) файлів архіву images.tar.bz2
(f images.tar.bz2
), і попередили його про те, що цей архів був стиснутий за допомогою bzip2 (j
), а також про те, що нам потрібно отримати список у довгому форматі (v
). Тепер, припустимо, що ви видалили каталог з зображеннями. На щастя у вас залишився недоторканний архів, і тепер ви хочете розпакувати його в оригінальне місце розташування у /shared
. Але, якщо ви не хочете порушити роботу команди find при пошуку нових зображень, потрібно зберегти всі атрибути файлів:
# # перехід до каталогу, в який ви хочете виконати вилучення # $ cd /shared $ tar jxpf ~/images.tar.bz2
Тепер давайте припустимо, що нам потрібно отримати з архіву лише каталог images/cars
. Тоді ви можете набрати наступне:
$ tar jxf ~/images.tar.bz2 images/cars
Якщо ви спробуєте зробити резервну копію спеціальних файлів, програма tar помістить їх у архів “як є”, не виконуючи дампу їх вмісту. Тому ви можете спокійно помістити в архів файл /dev/mem
. Також tar коректно працює з посиланнями, тож не хвилюйтеся щодо цього. З приводу символічних посилань погляньте на опцію h
на сторінці керівництва
.
Ми вже говорили про ці дві програми, коли розглядали tar. На відміну від WinZip® для Windows®, архівування і стиснення здійснюється двома різними утилітами: tar для архівації і дві програми для стиснення bzip2 і gzip, розглядом яких ми зараз і займемося. Ви також можете скористатися іншими утилітами стиснення даних, такими як zip, arj чи rar, які також існують для GNU/Linux (але дуже рідко використовуються).
Для початку слід зазначити, що bzip2 був написаний для заміни gzip. Його коефіцієнт стиснення зазвичай набагато вище, але з іншої сторони для його роботи потрібно більше ресурсів. Попри це, gzip все ще використовується для сумісності зі старими системами.
Обидві команди мають схожий синтаксис:
gzip [опції] [файл(и)]
Якщо ім'я файла не зазначено, і gzip, і bzip2 чекатимуть на дані зі стандартного входу і відправляти результат на стандартний вихід. Тому ви можете використовувати обидві програми в каналах. Вони також мають набір загальних опцій:
-1
, ..., -9
: встановлення коефіцієнту стиснення. Чим більше кількість, тим краще стиснення, але й повільнішій сам процес.
-d
: розпакування файлів. Це еквівалентно використанню утиліт gunzip чи bunzip2.
-c
: скидання на стандартний вихід результатів стиснення/розпакування файлів, вказаних у вигляді параметрів.
Тепер наведемо кілька прикладів. Припустимо, ви хочете упакувати всі файли у поточному каталозі, назви яких закінчуються на .txt
, використовуючи програму bzip2 з максимальним коефіцієнтом стиснення. Ви можете зробити це так:
$ bzip2 - 9 *.txt
Тепер ви хочете поділитися своїми зображеннями с кимось, але у нього не має bzip2, а є лише gzip. Вам немає потреби розпаковувати архів, а потім знову упаковувати його. Ви можете просто розпакувати його на стандартний вихід, а потім, скориставшись каналом, упакувати стандартний вихід і перенаправити результат в новий архів: Приміром, так:
bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz
Ви могли викликати bzcat замість bzip2 -dc. Це аналог програми gzip, але називається вона zcat, а не gzcat. Також у вашому розпорядженні є bzless для bzip2-файлів і zless для gzip, якщо ви хочете переглядати упаковані файли безпосередньо, без попереднього розпакування. Як вправи знайдіть і спробуйте команди, необхідні для перегляду стиснутих файлів без їх розпакування і без використання утиліт bzless чи zless.