Утилита tar в Linux предназначена для объединения (упаковки) нескольких файлов в один, т. е. для создания архивов. Она обладает хорошим функционалом для работы с архивами, умеет эффективно перемещать файлы (архивы или tar-файлы) с одного устройства на другое (включая ленточные устройства), сохраняя при этом атрибуты файлов и структуру файловой системы. Всё это позволяет использовать утилиту в качестве полноценного инструмента для организации резервного копирования. Конечно, для этих целей существуют и другие, специализированные утилиты. Как например dump, однако системным администраторам полезно уметь обращаться также и с tar.
Особенности использования утилиты tar
Как уже отмечалось, утилита объединяет несколько каталогов и файлов в один tar-файл, который потом можно сжать при помощи, например gzip, compress или bzip2. Это очень удобно, когда необходимо и данные зарезервировать и дополнительное место освободить на диске. Утилита часто применяется, когда нужно создать кратковременные резервные копии данных.
Среди версий tar, которые не относятся к GNU, подавляющее большинство таких, которые не поддерживают длину имён файлов больше, чем 100 символов, а также не умеют работать с несколькими лентами, поэтому перед использованием конкретной имеющейся в распоряжении версии утилиты необходимо внимательно ознакомиться с официальной технической документацией (команда man tar) для выяснения подобных деталей. Также, не все версии tar по-умолчанию обрабатывают символьные ссылки — от версии к версии для этого используются различные ключи, о чём можно также узнать из документации. Утилита очень хорошо подходит для быстрого копирования дерева каталогов.
Синтаксис и опции команды tar
У утилиты tar следующий синтаксис:
tar [опции] название_архива файлы_для_архива
Например, с помощью команды:
$ tar -cf etc.tar /etc
можно сделать копию каталога /etc в архив etc.tar. Приведённый пример демонстрирует распространённый случай резервного копирования с помощью команды tar. Здесь опция -c означает создание (create) архива, -f – вывод результатов в файл. Во второй части команды, которая принимает на свой вход выходной поток от tar -cf опция -x (extract) указывает tar, что нужно извлекать содержимое архива, -p – сохранять информацию о режимах доступа к файлам. Есть ещё опция -b, позволяющая задавать коэффициент объединения блоков, который полезен при записи на ленточные устройства. Это в некоторых случаях позволяет добиться большей производительности. Оптимальным считается значение 20, однако, поэкспериментировав, можно найти и лучший вариант для конкретных условий. Опция -v позволяет выводить подробную информацию о ходе работы команды.
Синтаксис для распаковки:
tar [опции] архив
Например команда
$ tar xfv archive.tar
Распакует archive.tar в текущую директорию, что бы задать директорию куда нужно распаковать архив используйте ключ -с. Например
$ tar xfv archive.tar -с /var
Ниже представлен основной список ключей команды tar
-A, —catenate, —concatenate присоединение tar-файловк архиву
-c, —create создание нового архива
-d, —diff, —compare поиск различий между архивом и файловой системой
—delete удаление из архива (не на магнитных лентах!)
-r, —append добавление файлов в конец архива
-t, —list вывод списка содержимого архива
—test-label проверка метки тома архива и выход
-u, —update добавление в архив только более новых файлов
-x, —extract, —get извлечение файлов из архива
Обратите внимание, что при запуске команды, перед ключами не обязательно ставить знак дефиса
tar примеры
Как уже упоминалось, для создания сжатых архивов сначала создаётся сам архив командой tar, а затем этот архив сжимается с помощью gzip. Но можно всё это сделать и одной командой tar:
$ tar -cvzf archive.tgz *
В результате будет создан сжатый архив gzip archive.tgz, сжатие которого будет выполнено с помощью gzip и благодаря опции z. Символ «*» указывает, что в архив попадёт всё, что находится в текущем каталоге. Здесь же будет создан и целевой архив archive.tgz. Вместо опции z можно указывать и другие — Z, J, j, которые задают соответствующие алгоритмы сжатия — LZV, xz и bzip2.
На всякий случай, перед созданием резервных копий лучше перейти в корневой каталог «/» — утилита убирает начальный символ «/» из имён/путей файлов, из-за чего в последствии информация из архивов может быть восстановлена не совсем правильно.
В случае с резервным копированием (на ленточный носитель) можно использовать следующие команды:
$ cd / $ tar -cpf /dev/st0 --label="Backup at `date '+%d-%B-%Y'`." -C /home
Как видно, здесь в качестве имени архива используется /dev/st0 – ленточное устройство. Поэтому для идентификации архивов полезно воспользоваться опцией —label, задающей описание конкретного архива. В обратных кавычках подставляется маска для даты/времени создания архива. Опцией -C (или —directory) задаётся директория, подлежащая резервированию. Для выполнения добавочного архивирования, т. е. когда необходимо зарезервировать только изменившиеся с момента предыдущей архивации файлов, следует воспользоваться опцией -N:
$ cd / $ tar -cpNf /dev/st0 --label="Backup at `date '+%d-%B-%Y'`." -C /home
После создания резервной копии не лишним будет проверить с помощью опции -d, что архив цел:
$ cd / $ tar -dvf /dev/st0
Для резервирования всей системы можно использовать такую команду:
$ cd / $ tar -cpf /sysarchive/system-at-`date '+%d-%B-%Y'`.tar -C / --exclude=proc --exclude=mnt --exclude=archive --exclude=cache --exclude=*/lost+found .
Здесь с помощью опций —exclude указывается, какие каталоги необходимо исключить из процедуры архивирования, а символ точки «.» в конце команды говорит о том, что нужно обрабатывать все каталоги и файлы, находящиеся в директории, указанной опцией -C. Следует заметить, что в данном примере, в отличие от предыдущих, в качестве целевого архива задан непосредственно tar-файл, а не ленточное устройство.