Таблица 17.8. Параметры команды find
Параметр
Описание
-depth
Требует от find обработать сначала файлы в каталогах и только потом каталоги. Этот параметр автоматически применяется с операцией -delete
-maxdepth число_уровней
Устанавливает максимальное число уровней, на которое команда find может опускаться в дереве каталогов, выполняя проверки и операции
-mindepth число_уровней
Устанавливает минимальное число уровней, на которое команда find должна опуститься в дереве каталогов перед выполнением проверок и операций
-mount
Требует от find не выполнять обход каталогов, в которые смонтированы другие файловые системы
-noleaf
Требует от find не оптимизировать поиск, опираясь на предположение, что поиск ведется в Unix-подобной файловой системе. Этот параметр необходимо использовать при обходе файловых систем DOS/Windows CD-ROM
18. Архивация и резервное копирование
Одной из основных задач администратора компьютерных систем является обеспечение безопасности данных, а одним из способов решения этой задачи — своевременное создание резервных копий системных файлов. Даже если вы не являетесь системным администратором, вам все равно пригодится умение создавать копии и перемещать большие коллекции файлов из одного места в другое и с одного устройства на другое.
В этой главе мы рассмотрим несколько программ, часто используемых для управления коллекциями файлов, в том числе:
Программы сжатия:
• gzip — сжимает и распаковывает файлы.
• bzip2 — программа поблочного сжатия файлов.
Программы архивирования:
• tar — утилита архивирования на ленту.
• zip — упаковывает и сжимает файлы.
И программа синхронизации файлов:
• rsync — выполняет синхронизацию файлов и каталогов с удаленной системой.
Сжатие файлов
На протяжении всей истории развития вычислительных технологий не прекращались попытки размещения большего числа данных в меньшем объеме, будь то память, устройства хранения или полоса пропускания сети. Многие устройства и технологии, прочно вошедшие в обиход, такие как переносные плееры, телевидение высокой четкости или широкополосный доступ в Интернет, обязаны своим существованием эффективным технологиям сжатия данных.
Сжатие данных — это процесс устранения избыточных данных. Давайте рассмотрим воображаемый пример. Допустим, у нас есть файл, хранящий изображение абсолютно черного квадрата размером 100 на 100 пикселей. В терминах хранения данных (если предположить, что каждый пиксель представлен 24 битами, или 3 байтами) изображение занимает 30 000 байт: 100 х 100 х 3 = 30 000.
Изображение, состоящее из пикселей одного цвета, содержит массу избыточных данных. Будь мы умнее, мы могли бы закодировать данные в виде простого описания того факта, что изображение представлено блоком из 30 000 пикселей черного цвета. То есть вместо хранения блока данных с 30 000 нулей (черный цвет в файлах изображений обычно представлен нулевым значением) мы могли бы сжать данные до числа 30 000 с последующим нулем, описывающим цвет. Такая схема сжатия, она называется кодированием длин серий (run-length encoding), является одной из простейших технологий сжатия. Современные технологии не в пример сложнее и эффективнее, но главная цель осталась прежней — избавиться от избыточных данных.
Алгоритмы сжатия (математические методики, применяемые для осуществления сжатия) делятся на две основные категории: без потерь (lossless) и с потерями (lossy). Сжатие без потерь гарантирует сохранность всех данных, содержащихся в оригинале. То есть после восстановления файла из сжатой версии восстановленный файл будет иметь в точности то же содержимое, что и несжатый оригинал. Сжатие с потерями, с другой стороны, удаляет некоторые данные во время сжатия, чтобы обеспечить более высокую степень сжатия. Восстановленный файл в этом случае не будет совпадать с оригинальной версией, скорее он будет близкой аппроксимацией оригинала. Примерами сжатия с потерями могут служить формат JPEG (для изображений) и MP3 (для музыкальных произведений). В дальнейшем обсуждении мы будем рассматривать только сжатие без потерь, поскольку большинство данных в компьютерах потерь не допускает.
gzip — сжатие и распаковывание файлов
Программа gzip используется для сжатия одного или нескольких файлов. Во время работы она замещает оригинальный файл его сжатой версией. Соответствующая программа gunzip используется для восстановления сжатых файлов до исходного состояния. Например:
[[email protected] ~]$ ls -l /etc > foo.txt
[[email protected] ~]$ ls -l foo.*
-rw-r--r-- 1 me me 15738 2012-10-14 07:15 foo.txt
[[email protected] ~]$ gzip foo.txt
[[email protected] ~]$ ls -l foo.*
-rw-r--r-- 1 me me 3230 2012-10-14 07:15 foo.txt.gz
[[email protected] ~]$ gunzip foo.txt
[[email protected] ~]$ ls -l foo.*
-rw-r--r-- 1 me me 15738 2012-10-14 07:15 foo.txt
В этом примере мы создали текстовый файл с именем foo.txt, записав в него список содержимого каталога /etc. Далее мы запустили программу gzip, которая заменила оригинальный файл сжатой версией с именем foo.txt.gz. В списке содержимого каталога, который был получен с использованием шаблона foo.*, можно видеть, что исходный файл действительно был замещен сжатой версией, и эта сжатая версия получилась почти в пять раз меньше оригинала. Можно также заметить, что сжатый файл имеет такие же разрешения и время, что и оригинал.
Далее мы запустили программу gunzip, чтобы распаковать файл. После этого, как видите, сжатая версия была замещена оригиналом, и снова с теми же разрешениями и временем.
Программа gzip имеет множество параметров, часть которых описана в табл. 18.1.
Таблица 18.1. Параметры команды gzip
Параметр
Описание
-c
Выводит результат на стандартный вывод и сохраняет оригинальные файлы. Аналогичный эффект дают параметры --stdout и --to-stdout
-d
Распаковывает файл. С этим параметром gzip действует как gunzip. Аналогичный эффект дают параметры --decompress и --uncompress
-f
Принудительное (force) сжатие, даже если сжатая версия оригинального файла уже существует. Аналогичный эффект дает параметр --force
-h
Выводит информацию о порядке использования. Аналогичный эффект дает параметр --help
-l
Выводит список статистик для каждого сжатого файла. Аналогичный эффект дает параметр --list
-t
Проверяет целостность сжатого файла. Аналогичный эффект дает параметр --test
-v
Выводит в процессе работы сообщения с информацией о ходе сжатия. Аналогичный эффект дает параметр --verbose
-число
Устанавливает степень сжатия. Числом может быть любое целочисленное значение в диапазоне от 1 (высокая скорость работы, низкая степень сжатия) до 9 (низкая скорость работы, высокая степень сжатия). Значения 1 и 9 можно также заменить параметрами --fast и --best соответственно. По умолчанию используется значение 6
Вернемся к нашему примеру:
[[email protected] ~]$ gzip foo.txt
[[email protected] ~]$ gzip -tv foo.txt.gz
foo.txt.gz: OK
[[email protected] ~]$ gzip -d foo.txt.gz
Здесь мы заменили файл foo.txt его сжатой версией с именем foo.txt.gz. Затем проверили целостность сжатой версии, передав параметры -t и -v. В заключение мы распаковали файл, вернув его исходное состояние.
gzip можно также использовать несколько необычным способом, через стандартные ввод и вывод:
[[email protected] ~]$ ls -l /etc | gzip > foo.txt.gz
Эта команда создает сжатую версию списка с содержимым каталога.
Программа gunzip, которая распаковывает файлы, сжатые с помощью gzip, предполагает, что имена файлов оканчиваются расширением .gz, поэтому его можно не указывать при условии, что имя файла в команде не соответствует существующему несжатому файлу: