Цель урока: Получить глубокое и практическое понимание процесса создания резервных копий и переноса файлов с помощью архиватора tar и утилит сжатия. Мы научимся создавать архивы, просматривать их содержимое, извлекать файлы, а также освоим различные алгоритмы сжатия (gzip, bzip2, xz) для оптимизации размера архивов.
Часть 1: Теория. Архив vs Сжатие - в чем разница?
Для новичка эти два понятия часто смешиваются, но в мире Linux они строго разделены. Понимание этой разницы - ключ к правильному использованию инструментов.
-
Архивирование: Это процесс "склеивания" множества файлов и каталогов в один-единственный файл, который называется архивом. При этом сохраняется вся структура каталогов и метаданные файлов (права доступа, владельцы, даты). Утилита, которая это делает, - tar (Tape Archive). Изначально она была создана для записи данных на магнитные ленты, но сегодня это стандарт де-факто для архивации в Linux. Сам по себе tar не сжимает данные, он только объединяет их. Архив, созданный tar, часто называют "тарболом" (tarball).
-
Сжатие: Это процесс обработки одного файла с помощью математического алгоритма с целью уменьшения его размера. Алгоритм находит в файле повторяющиеся последовательности данных и заменяет их более короткими ссылками. Утилиты, которые это делают, - gzip, bzip2, xz. Они работают только с одним файлом.
Золотая формула Linux: Чтобы заархивировать и сжать целый каталог, мы сначала архивируем его с помощью tar в один большой файл, а затем сжимаем этот один файл с помощью, например, gzip.
К счастью, современная команда tar умеет делать оба этих действия за один проход, вызывая утилиты сжатия "под капотом".
Часть 2: Практика. Основные операции с tar
Синтаксис tar может показаться поначалу пугающим из-за множества опций, но на практике 99% времени используются одни и те же комбинации.
Ключевые опции (режимы работы):
-
-c (create): Создать новый архив.
-
-x (extract): Извлечь файлы из архива.
-
-t (list): Показать список содержимого архива, не извлекая его.
Вспомогательные опции (модификаторы):
-
-f (file): Указывает, что мы работаем с файлом на диске, а не с лентой. Эта опция используется почти всегда и за ней сразу следует имя архива.
-
-v (verbose): Подробный режим. Показывать имена файлов в процессе обработки. Очень полезно для контроля.
-
-z (gzip): Использовать сжатие gzip. Файлы обычно получают расширение .tar.gz или .tgz.
-
-j (bzip2): Использовать сжатие bzip2. Сжимает лучше, но медленнее. Расширение .tar.bz2.
-
-J (xz): Использовать сжатие xz. Самое сильное и самое медленное сжатие. Расширение .tar.xz.
Мнемоника для запоминания:
-
Создать архив: Create Verbose File -> cvf.
-
Извлечь архив: Extract Verbose File -> xvf.
-
Добавить сжатие gzip: просто добавьте букву z -> czvf и xzvf.
Подготовка к экспериментам:
Давайте создадим структуру каталогов для наших тестов.
cd ~
mkdir -p project/{src,assets,docs}
touch project/src/main.c
touch project/assets/logo.png
touch project/docs/readme.txt
Теперь у нас есть каталог project с вложенной структурой, которую мы будем архивировать.
Пример 1: Создание простого архива (без сжатия)
# tar -cvf [имя_архива] [что_архивировать]
tar -cvf project.tar project/

-
-c: создать.
-
-v: подробно (вы увидите список добавляемых файлов).
-
-f project.tar: в файл с именем project.tar.
-
project/: что именно мы архивируем.
В результате у вас появится один файл project.tar.
Пример 2: Создание архива со сжатием Gzip (самый частый сценарий)
# tar -czvf [имя_архива] [что_архивировать]
tar -czvf project.tar.gz project/
Теперь у вас есть файл project.tar.gz. Сравните его размер с project.tar ls -lh
, и вы увидите, что он значительно меньше.
Пример 3: Просмотр содержимого архива
Представьте, что вы скачали архив и хотите узнать, что внутри, прежде чем его распаковывать.
# tar -tvf [имя_архива]
tar -tvf project.tar.gz

-
-t: list.
-
-v: verbose (покажет права, владельца, размер, как в ls -l).
-
-f: file.
tar сам поймет, что архив сжат, и покажет вам список файлов.
Пример 4: Извлечение (распаковка) архива
Теперь давайте извлечем наш архив. Сначала удалим оригинальный каталог, чтобы увидеть процесс "с чистого листа".
rm -rf project/
# tar -xzvf [имя_архива]
tar -xzvf project.tar.gz
-
-x: extract.
-
-z: архив сжат gzip.
-
-v: подробно (вы увидите список извлекаемых файлов).
-
-f: из файла.
После выполнения этой команды у вас снова появится каталог project со всем его содержимым.
Часть 3: Продвинутые техники и полезные опции
1. Извлечение одного файла или каталога
Вам не всегда нужно распаковывать весь архив. Можно извлечь только то, что нужно.
# Извлечь только файл readme.txt из архива
tar -xzvf project.tar.gz project/docs/readme.txt

2. Добавление файла в существующий архив (-r)
ВНИМАНИЕ: Эта опция не работает для сжатых архивов (.tar.gz). Она работает только для простых .tar архивов.
touch new_file.txt
# tar -rvf [имя_архива] [что_добавить]
tar -rvf project.tar new_file.txt
3. Исключение файлов и каталогов (--exclude)
Очень полезно при создании бэкапов, чтобы не включать в архив ненужные файлы кэша, временные файлы и т.д.
# Заархивировать домашний каталог, но исключить папку Downloads
# tar -czvf my_home.tar.gz --exclude='Downloads' ~
# Можно использовать шаблоны и указывать несколько исключений
# tar -czvf project.tar.gz --exclude='*.log' --exclude='tmp/' project/
4. Архивирование из стандартного ввода и вывод в стандартный вывод
Это очень мощная техника для копирования целых деревьев каталогов одной командой, сохраняя все права.
# Копируем каталог project/ в /tmp/project_copy/
mkdir -p /tmp/project_copy
tar -c -f - -C project . | tar -x -f - -C /tmp/project_copy
Разбор магии:
-
tar -c -f - -C project .
: Создать (-c) архив, вывести его в стандартный вывод (-f -), перед этим сменив каталог на project (-C project), и заархивировать всё в нем (.). -
|
: Передаем поток с архивом дальше. -
tar -x -f - -C /tmp/project_copy
: Извлечь (-x) архив из стандартного ввода (-f -), предварительно сменив каталог на /tmp/project_copy (-C ...).
Часть 4: Заключение
Мы подробно разобрали tar, и теперь вы умеете не просто создавать и распаковывать архивы, но и делать это осмысленно. Вы понимаете разницу между архивацией и сжатием, знаете, как выбрать нужный алгоритм сжатия и как использовать продвинутые опции для исключения файлов или просмотра содержимого. Навык работы с tar - это один из фундаментальных навыков администратора Linux, который вы будете использовать постоянно для создания резервных копий, переноса сайтов и развертывания приложений.
На следующем, 21-м уроке, мы перейдем к одной из самых волшебных тем в автоматизации - планировщику задач cron. Мы научимся заставлять наши скрипты (например, скрипт для архивации) запускаться автоматически по расписанию: каждую ночь, раз в неделю или в любое другое заданное вами время. Это и есть настоящая автоматизация, когда сервер работает на вас 24/7 без вашего участия.
Перейти к просмотру - УРОК №21.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com