Red Hat System Administration I 8.2

Глава 13. Архивация и передача файлов

Аннотация

Цель Архивация и копирование файлов из одной системы в другую
Задачи
  • Архивация файлов и каталогов в сжатый файл с помощью команды tar; извлечение содержимого существующего архива tar

  • Безопасная передача файлов в удаленную систему и из нее с помощью SSH

  • Синхронизация содержимого локального файла или каталога с копией на удаленном сервере

Разделы
  • Управление сжатыми tar-архивами (и упражнение)

  • Безопасная передача файлов между системами (и упражнение)

  • Безопасная синхронизация файлов между системами (и упражнение)

Лабораторная работа

Архивация и передача файлов

Управление сжатыми tar-архивами

Задачи

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

Команда tar

Архивация и сжатие файлов применяются при создании резервных копий и передаче данных по сети. Одной из самых старых и наиболее широко применяемых команд для создания резервных архивов и работы с ними является команда tar.

С помощью команды tar пользователи могут собирать большие наборы файлов в один файл (архив). Архив tar — это структурированная последовательность файловых данных, смешанных с метаданными каждого файла, и индекс для извлечения отдельных файлов. Архив может быть упакован со сжатием gzip, bzip2 или xz.

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

Опции команды tar

Опции команды tar разделены на операции (действие, которое необходимо выполнить): общие опции и опции сжатия. В таблице ниже приведены часто используемые опции, длинная версия опций и их описание.

Таблица 13.1. Обзор операций tar

Опция Описание
-c, --create

Создание нового архива.

-x, --extract

Извлечение содержимого из существующего архива.

-t, --list

Отображение списка содержимого архива.


Таблица 13.2. Общие опции команды tar

Опция Описание
-v, --verbose

Подробные сведения. Показывает, какие файлы архивируются или извлекаются.

-f, --file=

Имя файла. За этой опцией должно следовать имя используемого или создаваемого архива.

-p, --preserve-permissions

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


Таблица 13.3. Обзор опций сжатия tar

Опция Описание
-z, --gzip

Использование сжатия gzip (.tar.gz).

-j, --bzip2

Использование сжатия bzip2 (.tar.bz2). bzip2 обычно обеспечивает более высокую степень сжатия, чем gzip.

-J, --xz

Использование сжатия xz (.tar.xz). xz обычно обеспечивает более высокую степень сжатия, чем bzip2.


Применение опций команды tar

Команда tar ожидает одну из следующих трех опций.

  • Используйте опцию -c или --create для создания архива.

  • Используйте опцию -t или --list для отображения содержимого архива.

  • Используйте опцию -x или --extract для извлечения содержимого архива.

Другие часто используемые опции:

  • Используйте опцию -f или --file= с именем файла в качестве аргумента для указания архива, с которым необходимо работать.

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

Примечание

Команда tar на самом деле поддерживает и третий, старый вариант стиля со стандартными опциями из одной буквы без - в начале. Такой вариант все еще часто встречается, и вы можете увидеть этот синтаксис в инструкциях и командах других людей. Команда info tar 'old options' предоставляет информацию о том, чем эти опции отличаются от обычных коротких опций.

На данный момент не обращайте внимания на старые опции и сосредоточьтесь на стандартном синтаксисе коротких и длинных опций.

Архивация файлов и каталогов

При создании нового архива сначала используется опция c, за ней следует опция f, затем один пробел, затем имя файла создаваемого архива и, наконец, список файлов и каталогов, которые должны быть добавлены в архив. Архив создается в текущем каталоге, если не указано иное.

Предупреждение

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

Следующая команда создает архив с именем archive.tar и содержимым, состоящим из файлов file1, file2 и file3, в домашнем каталоге пользователя.

[user@host ~]$ tar -cf archive.tar file1 file2 file3
[user@host ~]$ ls archive.tar
archive.tar

Приведенную выше команду tar также можно выполнить с использованием длинной версии опций.

[user@host ~]$ tar --file=archive.tar --create file1 file2 file3

Примечание

Если файлы архивируются по абсолютным именам путей, по умолчанию ведущий символ / в пути удаляется из имени файла. Удаление ведущего / из пути помогает избежать перезаписи важных файлов при извлечении архива. Команда tar извлекает файлы относительно текущего рабочего каталога.

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

Чтобы создать tar-архив /root/etc.tar с каталогом /etc в качестве содержимого от имени пользователя root, выполните следующую команду:

[root@host ~]# tar -cf /root/etc.tar /etc
tar: Removing leading `/' from member names
[root@host ~]# 

Важно

Некоторые расширенные разрешения, которые не рассматривались в данном курсе, например ACL и контекст SELinux, не сохраняются автоматически в архиве tar. Используйте опцию --xattrs при создании архива для сохранения этих расширенных атрибутов в tar-архиве.

Отображение содержимого архива

Опция t команды tar отображает список содержимого архива (от англ. «table of contents», поэтому и t). Используйте опцию f с именем нужного архива. Пример:

[root@host ~]# tar -tf /root/etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...

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

Как правило, содержимое tar-архива следует извлекать в пустой каталог во избежание перезаписи существующих файлов. Если содержимое извлекается пользователем root, команда tar сохраняет исходных владельцев файлов (пользователя и группу). Если обычный пользователь извлекает файлы с помощью tar, владельцем файлов становится пользователь, извлекающий их из архива.

Чтобы восстановить файлы из архива /root/etc.tar в каталог /root/etcbackup:

[root@host ~]# mkdir /root/etcbackup
[root@host ~]# cd /root/etcbackup
[root@host etcbackup]# tar -tf /root/etc.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
[root@host etcbackup]# tar -xf /root/etc.tar

По умолчанию при извлечении файлов из архива происходит вычитание пользовательской маски из разрешений. Для сохранения разрешений архивированного файла используйте опцию p при извлечении содержимого архива.

В этом примере содержимое архива /root/myscripts.tar извлекается в каталог /root/scripts с сохранением разрешений для извлеченных файлов.

[root@host ~]# mkdir /root/scripts
[root@host ~]# cd /root/scripts
[root@host scripts]# tar -xpf /root/myscripts.tar

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

Команда tar поддерживает три метода сжатия. Есть три разных метода сжатия, поддерживаемых командой tar. gzip — это самый быстрый и старый метод сжатия, доступный во многих дистрибутивах и на многих платформах. Сжатие bzip2 обычно приводит к получению файлов архива меньшего размера по сравнению с gzip и используется не так часто, как gzip, а метод xz является относительно новым, но обычно обеспечивает самую высокую степень сжатия.

Примечание

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

Рекомендуется использовать один каталог верхнего уровня, который может содержать другие каталоги и файлы, для упрощения извлечения файлов в организованном виде.

Используйте одну из следующих опций для создания сжатого tar-архива:

  • -z или --gzip для сжатия gzip (filename.tar.gz или filename.tgz);

  • -j или --bzip2 для сжатия bzip2 (filename.tar.bz2);

  • -J или -xz для сжатия xz (filename.tar.xz).

Чтобы создать сжатый архив gzip с именем /root/etcbackup.tar.gz и содержимым каталога /etc на хосте:

[root@host ~]# tar -czf /root/etcbackup.tar.gz /etc
tar: Removing leading `/' from member names

Чтобы создать сжатый архив bzip2 с именем /root/logbackup.tar.bz2 и содержимым каталога /var/log на хосте:

[root@host ~]$ tar -cjf /root/logbackup.tar.bz2 /var/log
tar: Removing leading `/' from member names

Чтобы создать сжатый архив xz с именем /root/sshconfig.tar.xz и содержимым каталога /etc/ssh на хосте:

[root@host ~]$ tar -cJf /root/sshconfig.tar.xz /etc/ssh
tar: Removing leading `/' from member names

После создания архива проверьте его содержимое с помощью опций tf. При отображении списка содержимого сжатого архива использовать опцию для агента сжатия не обязательно. Например, для отображения содержимого, архивированного в файле /root/etcbackup.tar.gz, в котором используется сжатие gzip, используйте следующую команду:

[root@host ~]# tar -tf /root/etcbackup.tar.gz /etc
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...

Извлечение содержимого из сжатого архива

При извлечении содержимого из сжатого tar-архива сначала необходимо определить место извлечения, а затем создать целевой каталог и перейти в него. Команда tar определяет используемый способ сжатия, и для успешного извлечения содержимого из архива обычно не требуется указывать ту же опцию сжатия, которая использовалась при создании архива. Для команды tar можно указать метод распаковки. В этом случае необходимо использовать правильную опцию для типа распаковки, иначе tar выдаст ошибку о том, что тип распаковки, указанный в опции, не соответствует типу распаковки, заданному для файла.

Чтобы извлечь содержимое из сжатого архива gzip с именем /root/etcbackup.tar.gz в каталог /tmp/etcbackup:

[root@host ~]# mkdir /tmp/etcbackup
[root@host ~]# cd /tmp/etcbackup
[root@host etcbackup]# tar -tf /root/etcbackup.tar.gz
etc/
etc/fstab
etc/crypttab
etc/mtab
...output omitted...
[root@host etcbackup]# tar -xzf /root/etcbackup.tar.gz

Чтобы извлечь содержимое из сжатого архива bzip2 с именем /root/logbackup.tar.bz2 в каталог /tmp/logbackup:

[root@host ~]# mkdir /tmp/logbackup
[root@host ~]# cd /tmp/logbackup
[root@host logbackup]# tar -tf /root/logbackup.tar.bz2
var/log/
var/log/lastlog
var/log/README
var/log/private/
var/log/wtmp
var/log/btmp
...output omitted...
[root@host logbackup]# tar -xjf /root/logbackup.tar.bz2

Чтобы извлечь содержимое из сжатого архива xz с именем /root/sshbackup.tar.xz в каталог /tmp/sshbackup:

[root@host ~]$ mkdir /tmp/sshbackup
[root@host ~]# cd /tmp/sshbackup
[root@host logbackup]# tar -tf /root/sshbackup.tar.xz
etc/ssh/
etc/ssh/moduli
etc/ssh/ssh_config
etc/ssh/ssh_config.d/
etc/ssh/ssh_config.d/05-redhat.conf
etc/ssh/sshd_config
...output omitted...
[root@host sshbackup]# tar -xJf /root/sshbackup.tar.xz

Отображение содержимого сжатого tar-архива осуществляется так же, как и несжатого tar-архива.

Примечание

Кроме того, команды gzip, bzip2 и xz можно использовать независимо для сжатия отдельных файлов. Например, команда gzip etc.tar создает сжатый файл etc.tar.gz, команда bzip2 abc.tar — abc.tar.bz2, а команда xz myarchive.tar — myarchive.tar.xz.

Соответствующие команды распаковки: gunzip, bunzip2 и unxz. Например, команда gunzip /tmp/etc.tar.gz создает несжатый tar-файл etc.tar, команда bunzip2 abc.tar.bz2 — abc.tar, а команда unxz myarchive.tar.xz — myarchive.tar.

Ссылки

Man-страницы tar(1), gzip(1), gunzip(1), bzip2(1), bunzip2(1), xz(1), unxz(1)