Введение
В ходе этой лабораторной работы мы научимся упаковывать и сжимать файлы и каталоги, используя стандартные команды Linux, такие как tar, gzip и zip. Эти инструменты являются базовыми для управления данными в системах Linux, позволяя эффективно хранить и передавать информацию. Мы начнем с простых операций и постепенно перейдем к более сложным задачам, подробно разбирая каждый шаг.
Создание тестовой структуры каталогов
Начнем с создания образца структуры каталогов. Это поможет нам наглядно увидеть, как упаковка и сжатие работают с различными типами файлов и папок.
Откройте терминал и введите следующие команды:
cd ~/project
mkdir -p test_dir/{subdir1,subdir2}
echo "This is file 1" > test_dir/file1.txt
echo "This is file 2" > test_dir/file2.txt
echo "This is in subdir1" > test_dir/subdir1/subfile1.txt
echo "This is in subdir2" > test_dir/subdir2/subfile2.txt
Разберем, что именно делают эти команды:
cd ~/project: Переход в каталогproject, расположенный в вашей домашней директории.mkdir -p test_dir/{subdir1,subdir2}: Создание нового каталогаtest_dirи двух подкаталогов внутри него:subdir1иsubdir2. Флаг-pпозволяет создавать родительские каталоги по мере необходимости.- Команды
echoсоздают текстовые файлы с тестовым содержимым в разных частях нашей новой структуры.
Теперь проверим созданную структуру:
tree test_dir
Если вы не видите древовидную структуру или получили ошибку "command not found", не беспокойтесь. Утилита tree может быть не установлена в вашей системе. Вместо нее можно использовать команду ls -R test_dir, которая выведет аналогичный (хотя и менее наглядный) список файлов.
Упаковка файлов с помощью tar
Теперь, когда у нас есть тестовые данные, изучим процесс упаковки файлов с помощью команды tar. Название tar происходит от "tape archive" (ленточный архив), так как изначально она использовалась для записи архивов на магнитные ленты. Сегодня она повсеместно применяется для объединения множества файлов и папок в один файл-контейнер.
Упакуем наш каталог test_dir:
cd ~/project
tar -cvf test_archive.tar test_dir
Разберем параметры этой команды:
tar: Сама команда для работы с архивами.-c: Этот флаг (create) указывает на создание нового архива.-v: Флаг "verbose" (подробный). Он заставляет tar выводить в терминал имена файлов, добавляемых в архив. Это полезно для визуального контроля процесса.-f: После этого флага обязательно указывается имя файла архива, который мы хотим создать.test_archive.tar: Имя нашего нового архивного файла. Расширение.tarявляется общепринятым стандартом для таких архивов.test_dir: Каталог, который мы упаковываем.
После выполнения команды вы увидите список файлов, добавленных в архив.
Чтобы просмотреть содержимое архива без его распаковки, используйте:
tar -tvf test_archive.tar
Эта команда выводит список (-t) содержимого архива в подробном виде (-v) из указанного файла (-f).
Извлечение файлов из архива tar
Прежде чем переходить к сжатию, научимся извлекать файлы из созданного архива. Это критически важный навык при работе с данными в Linux.
Для извлечения содержимого test_archive.tar выполните:
mkdir extracted_tar
tar -xvf test_archive.tar -C extracted_tar
Разберем детали:
mkdir extracted_tar: Создание папкиextracted_tar, куда мы поместим извлеченные данные.tar: Команда для работы с архивом.-x: Этот флаг (extract) указывает на извлечение файлов.-v: Подробный вывод процесса извлечения.-f: Указывает на файл архива, с которым производится операция.-C extracted_tar: Этот флаг (change directory) приказывает tar перейти в указанный каталог перед началом извлечения.
После запуска вы увидите список извлекаемых файлов.
Проверьте результат извлечения:
tree extracted_tar
Или, если tree недоступна:
ls -R extracted_tar
Вы увидите ту же структуру каталогов и файлов, которая была изначально упакована.
Сжатие файлов с помощью gzip
Теперь, когда мы создали tar-архив, давайте уменьшим его размер с помощью утилиты gzip:
gzip test_archive.tar
Эта команда сожмет файл test_archive.tar и переименует его в test_archive.tar.gz. Исходный несжатый файл test_archive.tar будет заменен сжатой версией.
Чтобы проверить размер сжатого файла, используйте следующую команду:
ls -lh test_archive.tar.gz
Флаги -lh отобразят размер файла в удобном для чтения формате (КБ, МБ и т.д.).
Стоит отметить, что хотя расширение .tar.gz является наиболее распространенным, вы также можете встретить расширение .tgz, которое является его полным эквивалентом.
Разница между упаковкой и сжатием
Теперь, когда мы выполнили и упаковку, и сжатие, важно понять концептуальную разницу между ними и сравнить размеры файлов.
Упаковка (Архивация):
- Цель: Объединить множество файлов и папок в один файл.
- Суть: Группировка файлов с добавлением метаданных.
- Инструмент:
tar(Tape Archive). - Результат: Общий размер архива часто немного больше суммы размеров всех входящих в него файлов.
Сжатие:
- Цель: Уменьшить физический размер файла или архива.
- Суть: Применение алгоритмов для устранения избыточности данных.
- Инструменты:
gzip,bzip2,xz. - Результат: Сжатый файл меньше оригинала, но требует распаковки перед использованием.
Сравним размеры исходного каталога, tar-архива и сжатого файла tar.gz:
## Размер исходного каталога (фактический размер содержимого файлов)
echo "Size of the original directory (file content):"
find test_dir -type f -exec ls -l {} \; | awk '{total += $5} END {print total " bytes"}'
## Размер tar-архива (пересоздадим его для сравнения)
tar -cvf test_archive_compare.tar test_dir
echo "Size of the tar archive:"
ls -lh test_archive_compare.tar
## Размер сжатого файла tar.gz
echo "Size of the compressed tar.gz file:"
ls -lh test_archive.tar.gz
## Для справки: использование дискового пространства (включая блоки/сектора)
echo "Disk usage of the original directory:"
du -sh test_dir
Вы заметите следующее:
- tar-архив немного больше суммы размеров исходных файлов. Это происходит потому, что
tarдобавляет служебную информацию: имена файлов, права доступа, временные метки и структуру каталогов. - Сжатый файл tar.gz значительно меньше и оригиналов, и tar-архива.
- Показатель использования диска (
du) может отличаться от фактического размера файлов, так как он учитывает особенности распределения блоков в файловой системе.
Увеличение размера после упаковки — это нормальное явление. Формат tar добавляет небольшой объем накладных расходов для хранения метаданных, необходимых для точного восстановления структуры папок. Для больших каталогов это незаметно, но на очень маленьких файлах разница видна.
Сжатие же, напротив, существенно уменьшает размер, находя и устраняя повторы в данных. Это особенно эффективно для текстовых файлов.
Создание сжатого архива за один шаг
Хотя полезно понимать разделение на этапы упаковки и сжатия, на практике эти действия обычно объединяют. Команда tar имеет встроенную опцию для сжатия архива с помощью gzip прямо в процессе его создания.
Создадим сжатый архив каталога test_dir одной командой:
cd ~/project
tar -czvf test_combined.tar.gz test_dir
Эта команда похожа на предыдущие, но с важным дополнением:
-z: Этот флаг указывает tar сжать архив с помощью gzip.
Полученный файл test_combined.tar.gz идентичен тому, что мы делали в два этапа, но процесс стал быстрее и удобнее.
Для просмотра содержимого такого архива без распаковки:
tar -tzvf test_combined.tar.gz
Флаг -z здесь сообщает tar, что мы работаем с файлом, сжатым через gzip.
Извлечение файлов из сжатого архива
Теперь научимся распаковывать сжатые архивы. Извлечем содержимое файла test_combined.tar.gz:
mkdir extracted
tar -xzvf test_combined.tar.gz -C extracted
Разбор команды:
mkdir extracted: Создание целевого каталогаextracted.tar: Команда архивации.-x: Извлечение файлов.-z: Обязательный флаг, так как архив сжат с помощью gzip.-v: Подробный вывод процесса.-f: Указание имени исходного файла.-C extracted: Переход в папкуextractedперед извлечением.
После выполнения вы увидите список извлеченных файлов.
Проверьте результат:
tree extracted
Или:
ls -R extracted
Использование zip для кроссплатформенной совместимости
Хотя tar и gzip являются стандартом в Linux и Unix-системах, формат zip часто используется для лучшей совместимости с Windows. Создадим zip-архив нашего каталога:
cd ~/project
zip -r test_archive.zip test_dir
Что делает эта команда:
zip: Команда для создания zip-архива.-r: Флаг рекурсивной обработки (recursive), чтобы включить все вложенные файлы и подкаталоги.test_archive.zip: Имя создаваемого файла.test_dir: Исходный каталог.
Чтобы распаковать такой архив, используйте:
unzip -d unzipped_files test_archive.zip
Флаг -d указывает каталог для распаковки. Если папка unzipped_files не существует, unzip создаст ее автоматически.
Преимущество zip-файлов в том, что они легко открываются практически в любой операционной системе без установки дополнительного ПО, что делает их отличным выбором для обмена данными.
Резюме
В ходе этой лабораторной работы мы изучили ключевые методы упаковки и сжатия файлов в Linux:
- Создали тестовую структуру каталогов для понимания принципов организации данных.
- Использовали
tarдля упаковки файлов без сжатия, что полезно для объединения данных в один контейнер. - Научились извлекать файлы из tar-архивов.
- Применили
gzipдля сжатия, что позволяет существенно экономить место при хранении и передаче. - Разобрали принципиальную разницу между архивацией и сжатием, их цели и сценарии использования.
- Научились комбинировать
tarиgzipдля создания сжатых архивов одной командой. - Отработали навык извлечения данных из сжатых архивов.
- Использовали
zipдля обеспечения совместимости с другими операционными системами, такими как Windows.
Эти навыки критически важны для эффективного администрирования Linux, особенно при работе с большими объемами данных или переносе файлов между серверами. Помните, что правильное использование сжатия делает хранение и передачу данных гораздо эффективнее.
Продолжая работу с Linux, вы обнаружите, что эти команды станут вашими незаменимыми помощниками. Практикуйтесь чаще, чтобы довести владение этими инструментами до автоматизма.



