Упаковка и сжатие файлов

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) мы научимся упаковывать и сжимать файлы и директории с использованием общих команд Linux, таких как tar, gzip и zip. Эти инструменты являются важными для управления файлами и директориями в системах Linux, позволяя вам эффективно хранить и передавать данные. Мы начнем с базовых операций и постепенно перейдем к более сложным задачам, подробно объясняя каждый шаг.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/CompressionandArchivingGroup(["Compression and Archiving"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/SystemInformationandMonitoringGroup -.-> linux/du("File Space Estimating") linux/CompressionandArchivingGroup -.-> linux/tar("Archiving") linux/CompressionandArchivingGroup -.-> linux/zip("Compressing") linux/CompressionandArchivingGroup -.-> linux/gzip("Gzip") linux/CompressionandArchivingGroup -.-> linux/unzip("Decompressing") subgraph Lab Skills linux/ls -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/touch -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/cd -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/mkdir -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/du -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/tar -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/zip -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/gzip -.-> lab-385413{{"Упаковка и сжатие файлов"}} linux/unzip -.-> lab-385413{{"Упаковка и сжатие файлов"}} end

Создание примерной структуры директорий

Начнем с создания примерной структуры директорий, с которой будем работать. Это поможет нам понять, как работают упаковка и сжатие файлов для различных типов файлов и директорий.

Откройте терминал и введите следующие команды:

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

Разберем, что делают эти команды:

  1. cd ~/project: Эта команда изменяет текущую директорию на папку project в вашем домашнем каталоге.
  2. mkdir -p test_dir/{subdir1,subdir2}: Эта команда создает новую директорию с именем test_dir и две поддиректории внутри нее: subdir1 и subdir2. Опция -p позволяет команде mkdir создавать родительские директории по мере необходимости.
  3. Команды 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: Эта опция сообщает tar создать новый архив.
  • -v: Это сокращение от "verbose" (подробный). Она заставляет tar выводить имена файлов, которые он добавляет в архив. Это необязательно, но полезно, чтобы увидеть, что происходит.
  • -f: За этой опцией следует имя файла архива, который мы хотим создать.
  • test_archive.tar: Это имя, которое мы даем нашему новому архивному файлу. Расширение .tar является обычным для архивов tar.
  • test_dir: Это директория, которую мы упаковываем в архив.

После выполнения этой команды вы должны увидеть список файлов, которые добавляются в архив.

Чтобы просмотреть содержимое архива без его извлечения, вы можете использовать:

tar -tvf test_archive.tar

Эта команда выводит (-t) содержимое архива, подробно (-v), из файла (-f) с именем test_archive.tar.

Извлечение файлов из архива tar

Перед тем, как мы сжмем наш архив tar, давайте научимся извлекать файлы из него. Это важный навык при работе с архивами tar.

Для извлечения содержимого файла test_archive.tar:

mkdir extracted_tar
tar -xvf test_archive.tar -C extracted_tar

Разберем эту команду:

  • mkdir extracted_tar: Эта команда создает новую директорию с именем extracted_tar, где мы поместим содержимое нашего архива.
  • tar: Команда, которую мы используем для извлечения архива.
  • -x: Эта опция сообщает tar извлечь файлы из архива.
  • -v: Это делает операцию подробной, показывая нам каждый файл при его извлечении.
  • -f: Эта опция указывает имя файла архива, над которым будет выполняться операция. При извлечении файлов за ней должно следовать имя или путь к файлу tar для извлечения.
  • -C extracted_tar: Эта опция сообщает tar перейти в директорию extracted_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, которое эквивалентно.

Понимание различия между упаковкой и сжатием

Теперь, когда мы выполнили как упаковку, так и сжатие, давайте разберем разницу между этими операциями и сравним размеры файлов.

  1. Упаковка (Архивация):

    • Цель: Объединить несколько файлов и директорий в один файл.
    • Что она делает: Группирует файлы вместе, добавляя некоторую метадату.
    • Пример инструмента: tar (Tape Archive - Архивация на ленте)
    • Результат: Общий размер архива часто немного больше суммы размеров всех файлов в нем.
  2. Сжатие:

    • Цель: Уменьшить размер файла или архива.
    • Что оно делает: Применяет алгоритмы для удаления избыточности в данных, делая файл меньше.
    • Примеры инструментов: gzip, bzip2, xz
    • Результат: Сжатый файл меньше исходного, но требует распаковки перед использованием.

Сравним размеры нашей исходной директории, архива tar и сжатого файла tar.gz:

## Size of the original directory
echo "Size of the original directory:"
du -sh test_dir

## Size of the tar archive (we'll recreate it for this comparison)
tar -cvf test_archive_compare.tar test_dir
echo "Size of the tar archive:"
ls -lh test_archive_compare.tar

## Size of the compressed tar.gz file
echo "Size of the compressed tar.gz file:"
ls -lh test_archive.tar.gz

Вы заметите, что:

  1. Архив tar немного больше исходной директории. Это происходит потому, что tar добавляет некоторую метадату в архив, такую как имена файлов, разрешения и структуры директорий.
  2. Сжатый файл tar.gz значительно меньше как исходной директории, так и архива tar.

Увеличение размера после упаковки является нормальным и ожидаемым. Формат tar добавляет небольшое количество накладных расходов для хранения метаданных файлов, которые необходимы для правильного восстановления структуры директорий при распаковке. Эти накладные расходы обычно незначительны для больших директорий, но могут быть заметны для очень маленьких файлов или директорий.

Сжатие, с другой стороны, значительно уменьшает размер файла, идентифицируя и устраняя избыточность в данных. Это особенно эффективно для текстовых файлов или файлов с повторяющимся содержимым.

Создание сжатого архива за один шаг

Хотя полезно понимать отдельные этапы создания архива tar и его последующего сжатия, на практике эти этапы часто объединяются. Команда tar имеет встроенную опцию для сжатия архива с использованием gzip при его создании.

Создадим сжатый архив tar нашей директории 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: Эта опция сообщает tar извлечь файлы из архива.
  • -z: Эта опция нужна, так как мы работаем с файлом, сжатым с помощью gzip.
  • -v: Это делает операцию подробной, показывая нам каждый файл при его извлечении.
  • -f: После этой опции следует имя файла архива, из которого мы хотим извлечь файлы.
  • -C extracted: Эта опция сообщает tar перейти в директорию extracted перед извлечением файлов.

После выполнения этой команды вы должны увидеть список извлекаемых файлов.

Для проверки извлечения вы можете использовать:

tree extracted

Или, если команда tree недоступна:

ls -R extracted

Это покажет вам структуру директорий и файлы, которые были в архиве.

Использование zip для кросс-платформенной совместимости

В то время как tar и gzip широко распространены в системах Linux и Unix-подобных системах, формат zip часто используется для лучшей совместимости с системами Windows. Создадим zip-архив нашей директории test_dir:

cd ~/project
zip -r test_archive.zip test_dir

Вот что делает эта команда:

  • zip: Команда для создания zip-архива.
  • -r: Эта опция сообщает zip работать рекурсивно, включая все файлы и поддиректории.
  • test_archive.zip: Это имя, которое мы даем нашему zip-файлу.
  • test_dir: Это директория, которую мы добавляем в zip-архив.

Для распаковки этого архива вы можете использовать:

unzip -d unzipped_files test_archive.zip

Опция -d указывает директорию, в которую нужно распаковать архив. Если директория unzipped_files не существует, unzip создаст ее.

Zip-файлы имеют преимущество в том, что они легко распознаются и используются на практически всех операционных системах, что делает их хорошим выбором для обмена файлами с пользователями на разных платформах.

Резюме

В этом практическом занятии мы изучили несколько важных методов упаковки и сжатия файлов, широко используемых в Linux:

  1. Мы создали примерную структуру директорий для работы, показав, как организовать файлы и директории.
  2. Мы использовали tar для упаковки файлов без сжатия, что полезно для объединения нескольких файлов и директорий в один пакет.
  3. Мы научились извлекать файлы из архива tar, что является важным навыком при работе с упакованными файлами.
  4. Мы использовали gzip для сжатия файлов, что может значительно уменьшить размер файлов для хранения или передачи.
  5. Мы узнали разницу между упаковкой и сжатием, поняв их различные цели и области применения.
  6. Мы научились объединять tar и gzip для создания сжатых архивов за один шаг, что является распространенной операцией в системах Linux.
  7. Мы практиковали извлечение файлов из сжатых архивов, что также является важным навыком при работе с упакованными и сжатыми файлами.
  8. Наконец, мы использовали zip для создания архивов с лучшей кросс-платформенной совместимостью, особенно полезных при обмене файлами с пользователями Windows.

Эти навыки являются обязательными для эффективного управления файлами в Linux, особенно при работе с большими объемами данных или при передаче файлов между системами. Помните, что сжатие может значительно уменьшить размер файлов, делая хранение и передачу намного более эффективными.

По мере продолжения работы с Linux вы обнаружите, что эти команды незаменимы для управления вашими файлами и директориями. Практикуйте эти операции, чтобы стать профи в методах упаковки и сжатия файлов.