3.1 Урок 1
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
3 Потужність командного рядку |
Тема: |
3.1 Архівація файлів через командний рядок |
Урок: |
1 з 1 |
Вступ
Стиснення використовується для зменшення обсягу простору, який займає певний набір даних. Стиснення зазвичай використовується для зменшення обсягу місця, необхідного для зберігання файлу. Іншим поширеним використанням є зменшення кількості даних, що передаються через мережеве з’єднання.
Стиснення працює шляхом заміни повторюваних шаблонів у даних. Припустимо, у вас є роман. Деякі слова є надзвичайно поширеними, але мають кілька символів, наприклад слово “the”. Ви могли б значно зменшити розмір роману, якщо б замінили ці звичайні багатосимвольні слова та шаблони одним символом. Наприклад, замініть “the” на грецьку літеру, яка не використовується в інших місцях тексту. Алгоритми стиснення даних подібні до цього, але складніші.
Стиснення буває двох різновидів: без втрат і з втратами. Об’єкти, стиснуті за допомогою алгоритму без втрат, можна розпакувати назад у початковий вигляд. Дані, стиснуті за допомогою алгоритму з втратами, не можуть бути відновлені. Алгоритми з втратами часто використовуються для зображень, відео та аудіо, коли втрата якості непомітна для людей, не стосується контексту, або втрата виправдовується заощадженням простору чи пропускної здатності мережі.
Інструменти архівування використовуються для об’єднання файлів і каталогів в один файл. Деякі поширені види використання — резервне копіювання, пакетний вихідний код програмного забезпечення та збереження даних.
Архівування і стиснення зазвичай використовуються разом. Деякі інструменти архівування навіть стискають вміст за замовчуванням. Інші можуть стискати вміст за потреби. Щоб стиснути вміст, необхідно використовувати кілька інструментів архівування разом з окремими інструментами стиснення.
Найпоширенішим інструментом для архівування файлів у системах Linux є tar
. Більшість дистрибутивів Linux постачаються з версією tar
для GNU, тому в цьому уроці ми розглянемо саме його. tar
сам по собі керує лише архівуванням файлів, але не стискає їх.
У Linux є багато інструментів стиснення. Деякі поширені інструменти стиснення без втрат – це bzip2
, gzip
та xz
. Ви знайдете всі три у більшості систем. Ви можете зіткнутися зі старою або дуже мінімальною системою, де xz
або bzip
не встановлено. Якщо ви станете звичайним користувачем Linux, ви, ймовірно, зіткнетеся з файлами, стиснутими всіма трьома інструментами. Усі три використовують різні алгоритми, тому файл, стиснутий одним інструментом, не може бути розпакований іншим. Інструменти стиснення мають різні властивості. Якщо вам потрібен високий коефіцієнт стиснення, стиснення та розпакування файлу займе більше часу. Це пов’язано з тим, що для більш високого стиснення потрібно виконати більше роботи, щоб знайти більш складні шаблони. Усі ці інструменти стискають дані, але не можуть створювати архіви, що містять декілька файлів.
Окремі засоби стиснення зазвичай недоступні в системах Windows. Інструменти архівування та стиснення Windows зазвичай поєднуються разом. Пам’ятайте про це, якщо у вас є системи Linux та Windows, яким потрібно обмінюватися файлами.
Системи Linux також мають інструменти для роботи з файлами .zip
, які зазвичай використовуються в системах Windows. Вони називаються zip
і unzip
. Ці інструменти не встановлюються за замовчуванням у всіх системах, тому, якщо вам потрібно їх використовувати, можливо, доведеться їх встановити. На щастя, вони зазвичай знаходяться в сховищах пакунків дистрибутивів.
Інструменти для стиснення даних
Скільки місця на диску заощаджується при стисканні файлів, залежить від кількох факторів. Характер даних, які ви стискаєте, алгоритм, який використовується для стиснення даних, і рівень стиснення. Не всі алгоритми підтримують різні рівні стиснення.
Почнемо з налаштування деяких тестових файлів для стиснення:
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Тепер ми створимо три копії цього файлу:
$ cp bigfile bigfile2 $ cp bigfile bigfile3 $ cp bigfile bigfile4 $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile4
Тепер ми збираємося стиснути файли за допомогою кожного вищезгаданого інструменту стиснення:
$ bzip2 bigfile2 $ gzip bigfile3 $ xz bigfile4 $ ls -lh total 1.2M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 170K Jun 23 08:08 bigfile2.bz2 -rw-r--r-- 1 emma emma 179K Jun 23 08:08 bigfile3.gz -rw-r--r-- 1 emma emma 144K Jun 23 08:08 bigfile4.xz
Порівняйте розміри стиснутих файлів із нестисненим файлом під назвою bigfile
. Також зверніть увагу, як інструменти стиснення додали розширення до імен файлів і видалили нестиснені файли.
Використовуйте bunzip2
, gunzip
або unxz
, щоб розпакувати файли:
$ bunzip2 bigfile2.bz2 $ gunzip bigfile3.gz $ unxz bigfile4.xz $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile4
Зверніть увагу ще раз, що тепер вже стиснутий файл видаляється після його розпакування.
Деякі інструменти стиснення підтримують різні рівні стиснення. Більш високий рівень стиснення зазвичай вимагає більше пам’яті та циклів ЦП, але призводить до меншого стиснення файлу. Для нижчого рівня вірно протилежне. Нижче наведено демонстрацію з xz
та gzip
:
$ cp bigfile bigfile-gz1 $ cp bigfile bigfile-gz9 $ gzip -1 bigfile-gz1 $ gzip -9 bigfile-gz9 $ cp bigfile bigfile-xz1 $ cp bigfile bigfile-xz9 $ xz -1 bigfile bigfile-xz1 $ xz -9 bigfile bigfile-xz9 $ ls -lh bigfile bigfile-* * total 3.5M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 205K Jun 23 13:14 bigfile-gz1.gz -rw-r--r-- 1 emma emma 178K Jun 23 13:14 bigfile-gz9.gz -rw-r--r-- 1 emma emma 156K Jun 23 08:08 bigfile-xz1.xz -rw-r--r-- 1 emma emma 143K Jun 23 08:08 bigfile-xz9.xz
Немає необхідності розпаковувати файл щоразу, коли ви його використовуєте. Інструменти стиснення зазвичай мають спеціальні версії звичайних інструментів, які використовуються для читання текстових файлів. Наприклад, gzip
має версію cat
, grep
, diff
, less
, more
та ще декілька. Для gzip
інструменти мають префікс z
, тоді як префікс bz
існує для bzip2
, а xz
існує для xz
. Нижче наведено приклад використання zcat
для читання відображення файлу, стиснутого за допомогою gzip
:
$ cp /etc/hosts ./ $ gzip hosts $ zcat hosts.gz 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Інструменти для архівації файлів
Програма tar
, мабуть, є інструментом архівування, який найбільш широко використовується в системах Linux. Якщо вам цікаво, чому така назва, як він є, це як абревіатура від “tape archive”. Файли, створені за допомогою tar
, часто називають tar balls. Дуже часто програми, що розповсюджуються як вихідний код, знаходяться в tar-архівах.
Версія GNU tar
, з якою постачаються дистрибутиви Linux, має багато варіантів. Цей урок охоплює найбільш часто використовувану підмножину.
Почнемо зі створення архіву файлів, які використовуються для стиснення:
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
Параметр c
вказує tar
створити новий архівний файл, а параметр f
дозволяє задати ім’я файлу, який потрібно створити. Аргументом, що йде безпосередньо за параметрами, завжди буде ім’я файлу, з яким потрібно працювати. Решта аргументів – це шляхи до будь-яких файлів або каталогів, які ви хочете додати, переглянути або витягти з файлу. У прикладі ми додаємо каталог compression
і весь його вміст до архіву.
Щоб переглянути вміст tar-архіву, використовуйте параметр t
для tar
:
$ tar -tf 3.1.tar compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4
Зверніть увагу на те, як перед параметрами ставиться -
. На відміну від більшості програм, з tar
, -
не потрібний під час вказування параметрів, хоча це не завдає шкоди, якщо використовується.
Note
|
Ви можете використовувати параметр |
Тепер розпакуємо файл:
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Припустимо, вам потрібен лише один файл з архіву. Якщо це так, ви можете вказати його після імені файлу архіву. За потреби можна вказати декілька файлів:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ ls 3.1.tar $ tar xvf 3.1.tar compression/hosts.gz compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4 $ ls 3.1.tar compression $ ls compression hosts.gz
За винятком абсолютних шляхів (шляхів, що починаються з /
), файли tar
зберігають весь шлях до файлів під час їх створення. Оскільки файл 3.1.tar
був створений з одним каталогом, цей каталог буде створено відносно вашого поточного робочого каталогу під час розпакування. Наступний приклад повинен прояснити це:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ cd ../compression $ tar cf ../tar/3.1-nodir.tar * $ cd ../archiving $ mkdir untar $ cd untar $ tar -xf ../3.1-nodir.tar $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz
Tip
|
Якщо ви хочете використовувати абсолютний шлях у файлі |
Програма tar
також може керувати стисненням і декомпресією архівів на льоту. tar
робить це, викликаючи один із інструментів стиснення, які розглядалися раніше в цьому розділі. Це так само просто, як додати відповідний параметр до алгоритму стиснення. Найпоширенішими є j
, J
та z
для bzip2
, xz
та gzip
відповідно. Нижче наведено приклади використання вищезгаданих алгоритмів:
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz $ tar -czf gzip.tar.gz bigfile bigfile2 bigfile3 $ tar -cjf bzip2.tar.bz2 bigfile bigfile2 bigfile3 $ tar -cJf xz.tar.xz bigfile bigfile2 bigfile3 $ ls -l | grep tar -rw-r--r-- 1 emma emma 450202 Jun 27 05:56 bzip2.tar.bz2 -rw-r--r-- 1 emma emma 548656 Jun 27 05:55 gzip.tar.gz -rw-r--r-- 1 emma emma 147068 Jun 27 05:56 xz.tar.xz
Зверніть увагу, як у прикладі файли .tar
мають різні розміри. Це свідчить про те, що вони були успішно стиснуті. Якщо ви створюєте стиснені архіви .tar
, ви завжди повинні додавати друге розширення файлу, що позначає використаний вами алгоритм. Це .xz
, .bz
і .gz
для xz
, bzip2
і gzip
відповідно. Іноді використовуються скорочені розширення, такі як .tgz
.
Можна додавати файли до вже існуючих нестиснутих tar-архівів. Для цього використовуйте параметр u
. Якщо ви спробуєте виконати додавання до стисненого архіву, ви отримаєте помилку.
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz bzip2.tar.bz2 hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz gzip.tar.gz xz.tar.xz $ tar cf plain.tar bigfile bigfile2 bigfile3 $ tar tf plain.tar bigfile bigfile2 bigfile3 $ tar uf plain.tar bigfile4 $ tar tf plain.tar bigfile bigfile2 bigfile3 bigfile4 $ tar uzf gzip.tar.gz bigfile4 tar: Cannot update compressed archives Try 'tar --help' or 'tar --usage' for more information.
Керування файлами ZIP
Комп’ютери з операційною системою Windows часто не мають застосунків для обробки tar-архівів або багатьох інструментів стиснення, які зазвичай зустрічаються в системах Linux. Якщо вам потрібно взаємодіяти з системами Windows, ви можете використовувати ZIP-файли. ZIP-файл – це архівний файл, подібний до стисненого файлу tar.
Програми zip
та unzip
можна використовувати для роботи з файлами ZIP в системах Linux. У наведеному нижче прикладі є все, що вам потрібно для того, щоб розпочати їх використання. Спочатку створюємо набір файлів:
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
Тепер ми використаємо zip
, щоб запакувати ці файли в ZIP-файл:
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Нарешті, ми знову розпакуємо ZIP-файл:
$ ls zipfile.zip $ unzip zipfile.zip Archive: zipfile.zip creating: dir/ extracting: dir/file1 extracting: dir/file2 $ find . ./zipfile.zip ./dir ./dir/file1 ./dir/file2
Під час додавання каталогів до файлів ZIP, параметр -r
змушує zip
включати до архіву вміст каталогу. Без цього параметра у вас був би порожній каталог у файлі ZIP.
Вправи до посібника
-
Відповідно до розширень, які з наведених нижче інструментів були використані для створення цих файлів?
Ім’я файлу tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
Визначте за розширеннями які з цих файлів є архівами, а які стиснутими?
Ім’я файлу Архівний Стиснутий file.tar
file.tar.bz2
file.zip
file.xz
-
Як би ви додали файл до
tar
файлу , стисненого за допомогоюgzip
? -
Який параметр tar наказує tar включати символ
/
до абсолютних шляхів? -
Чи підтримує
zip
різні рівні стиснення?
Дослідницькі вправи
-
Під час розпакування файлів
tar
підтримує шаблони в списку файлів? -
Як ви можете переконатися, що розпакований файл ідентичний файлу до його стиснення?
-
Що станеться, якщо ви спробуєте витягти файл з архіву
tar
, який вже існує у вашій файловій системі? -
Як би ви розпакували файл
archive.tgz
без використання параметраtar
z
?
Підсумки
Системи Linux мають кілька доступних інструментів стиснення та архівування. Цей урок охопив найпоширеніші з них. Найпоширенішим інструментом архівування є tar
. Якщо необхідна взаємодія з системами Windows, zip
та unzip
можуть створювати та розпаковувати ZIP-файли.
Команда tar
має кілька параметрів, які варто запам’ятати. Це x
для вилучення, c
для створення, t
для перегляду вмісту та u
для додавання або заміни файлів. Параметр v
містить список файлів, які обробляються tar
під час створення або розпакування архіву.
Типовий репозиторій дистрибутиву Linux має багато інструментів стиснення. Найпоширенішими є gzip
, bzip2
та xz
. Алгоритми стиснення часто підтримують різні рівні, які дозволяють оптимізувати швидкість або розмір файлу. Файли можна розпакувати за допомогою gunzip
, bunzip2
та unxz
.
Інструменти стиснення зазвичай мають програми, які поводяться як звичайні інструменти для текстових файлів, з тією різницею, що вони працюють зі стиснутими файлами. Деякі з них – це zcat
, bzcat
та xzcat
. Інструменти стиснення зазвичай постачаються з програмами з функціональними можливостями grep
, more
, less
, diff
та cmp
.
Команди, які використовуються у вправах:
bunzip2
-
Розпаковує стиснутий файл
bzip2
. bzcat
-
Виводить вміст стисненого файлу
bzip
. bzip2
-
Стискає файли за допомогою алгоритму та формату
bzip2
. gunzip
-
Розпаковує стиснений файл
gzip
. gzip
-
Стискає файли за допомогою алгоритму та форматування
gzip
. tar
-
Створює, оновлює, виводить перелік та витягує архіви
tar
. unxz
-
Розпаковує стиснутий файл
xz
. unzip
-
Розпаковує та витягує вміст із файлу ZIP.
xz
Стискає файли за допомогою алгоритму та форматування xz
.
zcat
-
Виводить вміст стисненого файлу
gzip
. zip
-
Створює та стискає ZIP-архіви.
Відповіді до вправ посібника
-
Відповідно до розширень, які з наведених нижче інструментів були використані для створення цих файлів?
Ім’я файлу tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
Визначте за розширеннями які з цих файлів є архівами, а які стиснутими?
Ім’я файлу Архівний Стиснутий file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
Як би ви додали файл до
tar
файлу , стисненого за допомогоюgzip
?Ви повинні розпакувати файл за допомогою
gunzip
, додати файл за допомогоюtar uf
, а потім стиснути його за допомогоюgzip
-
Який параметр tar наказує tar включати символ
/
до абсолютних шляхів?Параметр
-P
. Зі сторінки посібника:-P, --absolute-names Don't strip leading slashes from file names when creating archives
-
Чи підтримує
zip
різні рівні стиснення?Так. Ви можете використовувати
-#
, замінюючи#
числом від 0-9. Наводимо витяг з man-сторінки:-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) Регулюйте швидкість стиснення за допомогою вказаної цифри #, де -0 означає відсутність стиснення (зберігати всі файли), -1 вказує на найвищу швидкість стиснення (менше стиснення), а -9 вказує на найнижчу швидкість стиснення (оптимальне стиснення, ігнорує список суфіксів ). Рівень стиснення за замовчуванням -6. Хоча цей параметр все ще працює, планується, що цей параметр керуватиме швидкістю стиснення для всіх методів стиснення. Наразі контролюється лише дефляція.
Відповіді до дослідницьких вправ
-
Під час розпакування файлів
tar
підтримує шаблони в списку файлів?Так, якщо використовувати параметр
--wildcards
.--wildcards
потрібно розмістити відразу після файлуtar
, якщо використовуються параметри в такому стилі. Наприклад:$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
Як ви можете переконатися, що розпакований файл ідентичний файлу до його стиснення?
Вам не потрібно нічого робити з інструментами, розглянутими в цьому уроці. Усі три інструменти мають контрольну суму у своєму форматі файлу, яка перевіряється під час їх розпакування.
-
Що станеться, якщо ви спробуєте витягти файл з архіву
tar
, який уже існує у вашій файловій системі?Файл у вашій файловій системі перезаписується версією, яка є у файлі
tar
. -
Як би ви розпакували файл
archive.tgz
без використання параметраtar
z
?Спочатку треба розпакувати його за допомогою
gunzip
.$ gunzip archive.tgz $ tar xf archive.tar