Аннотация
Архивация файлов и каталогов в сжатый файл с помощью команды tar; извлечение содержимого существующего архива tar
Безопасная передача файлов в удаленную систему и из нее с помощью SSH
Синхронизация содержимого локального файла или каталога с копией на удаленном сервере
Управление сжатыми tar-архивами (и упражнение)
Безопасная передача файлов между системами (и упражнение)
Безопасная синхронизация файлов между системами (и упражнение)
Архивация и передача файлов
После завершения этого раздела вы сможете заархивировать файлы и каталоги в сжатый файл с помощью команды tar и извлечь содержимое существующего tar-архива.
Архивация и сжатие файлов применяются при создании резервных копий и передаче данных по сети. Одной из самых старых и наиболее широко применяемых команд для создания резервных архивов и работы с ними является команда tar.
С помощью команды tar пользователи могут собирать большие наборы файлов в один файл (архив). Архив tar — это структурированная последовательность файловых данных, смешанных с метаданными каждого файла, и индекс для извлечения отдельных файлов. Архив может быть упакован со сжатием gzip, bzip2 или xz.
gzip
bzip2
xz
Команда 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).
.tar.gz
-j
--bzip2
Использование сжатия bzip2 (.tar.bz2). bzip2 обычно обеспечивает более высокую степень сжатия, чем gzip.
.tar.bz2
-J
--xz
Использование сжатия xz (.tar.xz). xz обычно обеспечивает более высокую степень сжатия, чем bzip2.
.tar.xz
Команда tar ожидает одну из следующих трех опций.
Используйте опцию -c или --create для создания архива.
Используйте опцию -t или --list для отображения содержимого архива.
Используйте опцию -x или --extract для извлечения содержимого архива.
Другие часто используемые опции:
Используйте опцию -f или --file= с именем файла в качестве аргумента для указания архива, с которым необходимо работать.
Используйте опцию -v или --verbose для повышения детализации, чтобы видеть, какие файлы добавляются в архив или извлекаются из него.
Команда tar на самом деле поддерживает и третий, старый вариант стиля со стандартными опциями из одной буквы без - в начале. Такой вариант все еще часто встречается, и вы можете увидеть этот синтаксис в инструкциях и командах других людей. Команда info tar 'old options' предоставляет информацию о том, чем эти опции отличаются от обычных коротких опций.
-
На данный момент не обращайте внимания на старые опции и сосредоточьтесь на стандартном синтаксисе коротких и длинных опций.
При создании нового архива сначала используется опция c, за ней следует опция f, затем один пробел, затем имя файла создаваемого архива и, наконец, список файлов и каталогов, которые должны быть добавлены в архив. Архив создается в текущем каталоге, если не указано иное.
c
f
Перед созданием tar-архива убедитесь, что в каталоге нет другого архива с таким же именем. Команда tar перезаписывает существующий архив без предупреждения.
Следующая команда создает архив с именем archive.tar и содержимым, состоящим из файлов file1, file2 и file3, в домашнем каталоге пользователя.
archive.tar
file1
file2
file3
[user@host ~]$ tar -cf archive.tar file1 file2 file3 [user@host ~]$ ls archive.tar archive.tar
[user@host ~]$
Приведенную выше команду tar также можно выполнить с использованием длинной версии опций.
[user@host ~]$ tar --file=archive.tar --create file1 file2 file3
Если файлы архивируются по абсолютным именам путей, по умолчанию ведущий символ / в пути удаляется из имени файла. Удаление ведущего / из пути помогает избежать перезаписи важных файлов при извлечении архива. Команда tar извлекает файлы относительно текущего рабочего каталога.
/
Для архивации выбранных файлов с помощью tar необходимо, чтобы у пользователя, выполняющего команду tar, было разрешение на чтение этих файлов. Например, для создания нового архива с папкой /etc и всем ее содержимым требуются права root, так как только пользователю root разрешено чтение всех файлов в каталоге /etc. Непривилегированный пользователь может создать архив каталога /etc, но в этот архив не будут включены файлы, на чтение которых у пользователя нет разрешения, а также каталоги, для которых у пользователя нет разрешений на чтение и выполнение.
/etc
root
Чтобы создать tar-архив /root/etc.tar с каталогом /etc в качестве содержимого от имени пользователя root, выполните следующую команду:
/root/etc.tar
[root@host ~]# tar -cf /root/etc.tar /etc tar: Removing leading `/' from member names [root@host ~]#
[root@host ~]#
Некоторые расширенные разрешения, которые не рассматривались в данном курсе, например ACL и контекст SELinux, не сохраняются автоматически в архиве tar. Используйте опцию --xattrs при создании архива для сохранения этих расширенных атрибутов в tar-архиве.
--xattrs
Опция t команды tar отображает список содержимого архива (от англ. «table of contents», поэтому и t). Используйте опцию f с именем нужного архива. Пример:
t
[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/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
[root@host etcbackup]#
По умолчанию при извлечении файлов из архива происходит вычитание пользовательской маски из разрешений. Для сохранения разрешений архивированного файла используйте опцию p при извлечении содержимого архива.
p
В этом примере содержимое архива /root/myscripts.tar извлекается в каталог /root/scripts с сохранением разрешений для извлеченных файлов.
/root/myscripts.tar
/root/scripts
[root@host ~]# mkdir /root/scripts [root@host ~]# cd /root/scripts [root@host scripts]# tar -xpf /root/myscripts.tar
[root@host scripts]#
Команда tar поддерживает три метода сжатия. Есть три разных метода сжатия, поддерживаемых командой tar. gzip — это самый быстрый и старый метод сжатия, доступный во многих дистрибутивах и на многих платформах. Сжатие bzip2 обычно приводит к получению файлов архива меньшего размера по сравнению с gzip и используется не так часто, как gzip, а метод xz является относительно новым, но обычно обеспечивает самую высокую степень сжатия.
Эффективность алгоритма сжатия зависит от типа данных, подвергаемых сжатию. Обработка файлов данных, которые уже были сжаты, таких как сжатые форматы изображений или файлы RPM, обычно приводит к получению меньшей степени сжатия.
Рекомендуется использовать один каталог верхнего уровня, который может содержать другие каталоги и файлы, для упрощения извлечения файлов в организованном виде.
Используйте одну из следующих опций для создания сжатого tar-архива:
-z или --gzip для сжатия gzip (filename.tar.gz или filename.tgz);
filename.tar.gz
filename.tgz
-j или --bzip2 для сжатия bzip2 (filename.tar.bz2);
filename.tar.bz2
-J или -xz для сжатия xz (filename.tar.xz).
-xz
filename.tar.xz
Чтобы создать сжатый архив gzip с именем /root/etcbackup.tar.gz и содержимым каталога /etc на хосте:
/root/etcbackup.tar.gz
хосте
[root@host ~]# tar -czf /root/etcbackup.tar.gz /etc tar: Removing leading `/' from member names
tar -czf /root/etcbackup.tar.gz /etc
Чтобы создать сжатый архив bzip2 с именем /root/logbackup.tar.bz2 и содержимым каталога /var/log на хосте:
/root/logbackup.tar.bz2
/var/log
[root@host ~]$ tar -cjf /root/logbackup.tar.bz2 /var/log tar: Removing leading `/' from member names
[root@host ~]$
tar -cjf /root/logbackup.tar.bz2 /var/log
Чтобы создать сжатый архив xz с именем /root/sshconfig.tar.xz и содержимым каталога /etc/ssh на хосте:
/root/sshconfig.tar.xz
/etc/ssh
[root@host ~]$ tar -cJf /root/sshconfig.tar.xz /etc/ssh tar: Removing leading `/' from member names
tar -cJf /root/sshconfig.tar.xz /etc/ssh
После создания архива проверьте его содержимое с помощью опций tf. При отображении списка содержимого сжатого архива использовать опцию для агента сжатия не обязательно. Например, для отображения содержимого, архивированного в файле /root/etcbackup.tar.gz, в котором используется сжатие gzip, используйте следующую команду:
tf
[root@host ~]# tar -tf /root/etcbackup.tar.gz /etc etc/ etc/fstab etc/crypttab etc/mtab ...output omitted...
tar -tf /root/etcbackup.tar.gz /etc
При извлечении содержимого из сжатого tar-архива сначала необходимо определить место извлечения, а затем создать целевой каталог и перейти в него. Команда tar определяет используемый способ сжатия, и для успешного извлечения содержимого из архива обычно не требуется указывать ту же опцию сжатия, которая использовалась при создании архива. Для команды tar можно указать метод распаковки. В этом случае необходимо использовать правильную опцию для типа распаковки, иначе tar выдаст ошибку о том, что тип распаковки, указанный в опции, не соответствует типу распаковки, заданному для файла.
Чтобы извлечь содержимое из сжатого архива gzip с именем /root/etcbackup.tar.gz в каталог /tmp/etcbackup:
/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
mkdir /tmp/etcbackup
cd /tmp/etcbackup
tar -tf /root/etcbackup.tar.gz
tar -xzf /root/etcbackup.tar.gz
Чтобы извлечь содержимое из сжатого архива bzip2 с именем /root/logbackup.tar.bz2 в каталог /tmp/logbackup:
/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
mkdir /tmp/logbackup
cd /tmp/logbackup
[root@host logbackup]#
tar -tf /root/logbackup.tar.bz2
tar -xjf /root/logbackup.tar.bz2
Чтобы извлечь содержимое из сжатого архива xz с именем /root/sshbackup.tar.xz в каталог /tmp/sshbackup:
/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
mkdir /tmp/sshbackup
cd /tmp/sshbackup
tar -tf /root/sshbackup.tar.xz
[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.
etc.tar.gz
abc.tar.bz2
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.
etc.tar
abc.tar
myarchive.tar
Man-страницы tar(1), gzip(1), gunzip(1), bzip2(1), bunzip2(1), xz(1), unxz(1)
tar
gunzip
bunzip2
unxz