Передача файлов в Red Hat Enterprise Linux

Red Hat Enterprise LinuxBeginner
Практиковаться сейчас

Введение

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

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

Создание и перечисление архивов tar

В этом шаге вы узнаете, как создавать и перечислять архивы tar. Утилита tar — мощный инструмент командной строки, используемый для архивирования файлов и каталогов. Она часто применяется для резервного копирования и передачи файлов.

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

  • -c или --create: Создает новый архив.
  • -t или --list: Перечисляет содержимое архива.
  • -x или --extract: Извлекает файлы из архива.

Кроме того, tar часто использует общие опции для изменения своего поведения:

  • -v или --verbose: Отображает файлы, обрабатываемые во время архивирования или извлечения.
  • -f или --file: Указывает имя файла архива. Эта опция должна следовать за именем файла архива.

Начнем с создания некоторых образцовых файлов, которые мы будем архивировать. Перейдите в каталог ~/project, который является вашим каталогом по умолчанию.

cd ~/project

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

mkdir my_files
echo "Это содержимое файла1." > my_files/file1.txt
echo "Это содержимое файла2." > my_files/file2.txt
echo "Это содержимое файла3." > my_files/file3.txt
ls my_files

Вы должны увидеть три файла в списке:

file1.txt  file2.txt  file3.txt

Теперь создадим архив tar каталога my_files. Мы назовем архив my_archive.tar.

tar -cvf my_archive.tar my_files

Вывод покажет файлы, добавляемые в архив:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Вы можете убедиться, что файл архива my_archive.tar был создан в текущем каталоге:

ls

Вы должны увидеть my_archive.tar в списке вместе с my_files:

my_archive.tar  my_files

Далее, давайте перечислим содержимое файла my_archive.tar с помощью опций -t (перечисление) и -f (файл).

tar -tf my_archive.tar

Вывод покажет содержимое архива:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Если вы хотите увидеть более подробную информацию, такую как права доступа к файлам, владение и размер, вы можете добавить опцию -v (подробно):

tar -tvf my_archive.tar

Вывод будет похож на этот, предоставляя более подробную информацию о каждом архивированном элементе:

drwxr-xr-x labex/labex        0 2023-10-27 10:00 my_files/
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file1.txt
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file2.txt
-rw-r--r-- labex/labex       22 2023-10-27 10:00 my_files/file3.txt

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

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

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

Основная опция для извлечения файлов — -x или --extract. Также обычно используется -f для указания файла архива и -v для подробного вывода, чтобы увидеть, какие файлы извлекаются.

Перед извлечением рекомендуется извлекать архивы в пустой каталог, чтобы избежать перезаписи существующих файлов или их смешивания с другим содержимым. Давайте создадим новый каталог extracted_files в вашем каталоге ~/project.

cd ~/project
mkdir extracted_files

Теперь перейдите в каталог extracted_files. Это гарантирует, что содержимое архива будет извлечено сюда.

cd extracted_files

Теперь давайте извлечем содержимое my_archive.tar (которое находится в родительском каталоге ~/project) в текущий каталог extracted_files.

tar -xvf ../my_archive.tar

Вывод покажет извлекаемые файлы:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

После извлечения вы можете перечислить содержимое текущего каталога (~/project/extracted_files), чтобы убедиться, что каталог my_files и его содержимое были успешно извлечены.

ls

Вы должны увидеть каталог my_files:

my_files

Теперь давайте проверим содержимое каталога my_files внутри extracted_files:

ls my_files

Вы должны увидеть исходные файлы:

file1.txt  file2.txt  file3.txt

Вы также можете просмотреть содержимое одного из извлеченных файлов, чтобы подтвердить его целостность:

cat my_files/file1.txt

Вывод должен быть:

This is file1 content.

При извлечении файлов команда tar использует текущий umask, чтобы установить права доступа для извлеченных файлов. Однако, если вы хотите сохранить исходные права доступа к файлам, как они были в архиве, вы можете использовать опцию -p или --preserve-permissions. Это особенно полезно при работе с исполняемыми скриптами или конфигурационными файлами, где конкретные права доступа имеют решающее значение. Для пользователя root эта опция часто включена по умолчанию. Для обычных пользователей рекомендуется включать её, если сохранение прав доступа важно.

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

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

В этом шаге вы узнаете, как создавать сжатые архивы tar. Хотя сам tar только объединяет файлы, он может интегрироваться с утилитами сжатия, такими как gzip, bzip2 и xz, чтобы создавать более компактные архивные файлы. Это важно для экономии дискового пространства и сокращения времени передачи.

Команда tar предоставляет специфические опции для различных алгоритмов сжатия:

  • -z или --gzip: Использует сжатие gzip, что приводит к суффиксу .tar.gz или .tgz. Это наиболее распространённый и быстрый метод сжатия.
  • -j или --bzip2: Использует сжатие bzip2, что приводит к суффиксу .tar.bz2 или .tbz. Обычно обеспечивает лучшее сжатие, чем gzip, но медленнее.
  • -J или --xz: Использует сжатие xz, что приводит к суффиксу .tar.xz или .txz. Обеспечивает наилучшее соотношение сжатия из трёх, но является самым медленным.
  • -a или --auto-compress: Позволяет tar автоматически определить алгоритм сжатия на основе суффикса архива (например, .tar.gz подразумевает gzip). Это удобный вариант.

Начнём с того, что убедитесь, что вы находитесь в каталоге ~/project.

cd ~/project

Сначала мы создадим сжатый архив gzip каталога my_files. Мы назовём его my_archive.tar.gz.

tar -czvf my_archive.tar.gz my_files

Вывод покажет добавляемые и сжимаемые файлы:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Вы можете проверить создание сжатого архива:

ls -lh my_archive.tar.gz

Опции -lh для ls предоставляют размер в удобочитаемом формате. Вы увидите вывод, подобный этому, показывающий размер файла:

-rw-r--r-- 1 labex labex 180 Окт 27 10:00 my_archive.tar.gz

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

Теперь давайте попробуем создать сжатый архив xz, который обычно обеспечивает лучшее сжатие. Мы назовём его my_archive.tar.xz.

tar -cJvf my_archive.tar.xz my_files

Опять же, вывод покажет обрабатываемые файлы:

my_files/
my_files/file1.txt
my_files/file2.txt
my_files/file3.txt

Проверьте размер архива xz:

ls -lh my_archive.tar.xz

Вы можете заметить, что my_archive.tar.xz немного меньше, чем my_archive.tar.gz, что демонстрирует лучшее соотношение сжатия xz.

-rw-r--r-- 1 labex labex 168 Окт 27 10:00 my_archive.tar.xz

Для извлечения сжатого архива tar, tar достаточно умён, чтобы часто автоматически определять тип сжатия при использовании опции -x. Однако рекомендуется явно использовать соответствующую опцию разархивирования (-z, -j или -J) или опцию -a (автоматическое сжатие).

Давайте попробуем извлечь my_archive.tar.gz в новый каталог под названием extracted_gz.

mkdir extracted_gz
tar -xzvf my_archive.tar.gz -C extracted_gz

Опция -C (изменить каталог) сообщает tar извлечь файлы в указанный каталог. Это очень полезная опция, чтобы избежать захламления текущего каталога.

Проверьте содержимое extracted_gz:

ls extracted_gz/my_files

Вы должны увидеть:

file1.txt  file2.txt  file3.txt

Безопасная передача файлов с помощью sftp

В этом шаге вы узнаете, как безопасно передавать файлы между системами с помощью sftp (Secure File Transfer Program). sftp — это интерактивная программа для передачи файлов, которая использует SSH (Secure Shell) для безопасного взаимодействия, обеспечивая шифрование и аутентификацию. Она входит в состав пакета OpenSSH.

В этом практикуме мы смоделируем удалённую систему, используя пользователя labex на том же хосте, что и «удалённый» пользователь. Это позволит нам практиковаться с командами sftp, не требуя отдельной виртуальной машины.

Сначала убедитесь, что вы находитесь в каталоге ~/project.

cd ~/project

Создадим файл, который мы «загрузим» в домашний каталог симулированного удалённого пользователя.

echo "Этот файл будет загружен через sftp." > local_file.txt

Теперь инициализируем сеанс sftp для пользователя labex на localhost.

sftp labex@localhost

Вам будет запрошен пароль для labex@localhost. Введите labex.

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:....
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
labex@localhost's password: labex
Connected to localhost.
sftp>

Вы теперь находитесь в интерактивном приглашении sftp.

Внутри приглашения sftp вы можете использовать различные команды, аналогичные обычной оболочке.

  • pwd: Показывает текущий рабочий каталог на удалённой системе.
  • lpwd: Показывает текущий рабочий каталог на вашей локальной системе.
  • ls: Перечисляет файлы на удалённой системе.
  • lls: Перечисляет файлы на локальной системе.

Давайте попробуем их:

sftp> pwd
Remote working directory: /home/labex
sftp> lpwd
Local working directory: /home/labex/project
sftp> ls

(Команда ls покажет содержимое /home/labex на удалённой стороне, что является вашим собственным домашним каталогом.)

Теперь давайте «загрузим» local_file.txt из вашего локального каталога ~/project в домашний каталог удалённого пользователя labex (/home/labex). Используйте команду put.

sftp> put local_file.txt
Uploading local_file.txt to /home/labex/local_file.txt
local_file.txt                               100%   32     0.0KB/s   00:00
sftp>

Вы можете проверить, что файл был загружен, перечислив удалённый каталог:

sftp> ls

Вы должны увидеть local_file.txt в списке файлов в /home/labex.

Далее, давайте «скачаем» файл с удалённой системы. Мы скачаем файл .bashrc из домашнего каталога удалённого пользователя labex в ваш локальный каталог ~/project. Используйте команду get.

sftp> get .bashrc
Fetching /home/labex/.bashrc to .bashrc
/home/labex/.bashrc                          100%  193     0.2KB/s   00:00
sftp>

Вы можете проверить загрузку, перечислив ваш локальный каталог:

sftp> lls

Вы должны увидеть .bashrc в вашем локальном каталоге ~/project.

Для выхода из сеанса sftp используйте команду exit или bye.

sftp> exit

Вы вернётесь к обычному приглашению оболочки.

Синхронизация файлов с помощью rsync

В этом шаге вы узнаете, как синхронизировать файлы между системами с помощью команды rsync. rsync — мощный и универсальный инструмент для копирования и синхронизации файлов и каталогов, как локально, так и удалённо. Его ключевое преимущество — способность передавать только различия между файлами, что делает его очень эффективным для обновлений. Как и sftp, rsync может использовать SSH для безопасной, зашифрованной передачи.

Наиболее распространённые опции rsync:

  • -a или --archive: Это комбинация нескольких опций (-rlptgoD), сохраняющая большинство атрибутов файлов (рекурсивное копирование, ссылки, права доступа, временные метки, группа, владелец, файлы устройств). Часто называется «режимом архивирования» и рекомендуется для большинства задач синхронизации.
  • -v или --verbose: Увеличивает подробность вывода, показывая больше информации о передаче.
  • -z или --compress: Сжимает данные файла во время передачи, что может ускорить передачу по медленным каналам связи.
  • -h или --human-readable: Выводит числа в удобочитаемом формате.
  • -n или --dry-run: Выполняет пробный запуск без внесения каких-либо изменений. Это очень полезно для проверки того, что rsync сделает, прежде чем фактически выполнить команду.

Начнём с того, что убедитесь, что вы находитесь в каталоге ~/project.

cd ~/project

Мы смоделируем сценарий синхронизации, создав исходный и целевой каталоги.

Создайте исходный каталог source_dir с некоторыми файлами:

mkdir source_dir
echo "Содержание файлаA" > source_dir/fileA.txt
echo "Содержание файлаB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Содержание подфайла1" > source_dir/subdir/subfile1.txt

Создайте пустой целевой каталог dest_dir:

mkdir dest_dir

Теперь выполним пробный запуск, чтобы увидеть, что rsync сделает при синхронизации source_dir с dest_dir. Мы будем использовать опции -avh для режима архивирования, подробного вывода и удобочитаемых размеров, а также -n для пробного запуска.

rsync -avhn source_dir/ dest_dir/

Важное замечание о слешах:

  • source_dir/: Конечный слэш означает "скопировать содержимое source_dir".
  • source_dir: Без конечного слэша означает "скопировать сам source_dir в целевой каталог".

Вывод пробного запуска покажет вам файлы, которые были бы переданы:

sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt

sent 186 bytes  received 12 bytes  396.00 bytes/sec
total size is 66  speedup is 0.33 (DRY RUN)

Обратите внимание на (DRY RUN) в конце, указывающее, что никаких фактических изменений не было внесено.

Теперь выполним фактическую синхронизацию. Удалите опцию -n.

rsync -avh source_dir/ dest_dir/

Вывод будет похож на пробный запуск, но без метки (DRY RUN):

sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt

sent 186 bytes  received 12 bytes  396.00 bytes/sec
total size is 66  speedup is 0.33

Проверьте, что файлы были скопированы в dest_dir:

ls -R dest_dir

Вы должны увидеть:

dest_dir:
fileA.txt  fileB.txt  subdir

dest_dir/subdir:
subfile1.txt

Теперь изменим файл в source_dir и добавим новый файл, чтобы увидеть эффективность rsync.

echo "Обновлённое содержание для файлаA" > source_dir/fileA.txt
echo "Новое содержание файла" > source_dir/new_file.txt

Выполните ещё один пробный запуск, чтобы увидеть, какие файлы rsync передаст на этот раз:

rsync -avhn source_dir/ dest_dir/

Вывод покажет только изменённые и новые файлы:

sending incremental file list
./
fileA.txt
new_file.txt

sent 128 bytes  received 12 bytes  280.00 bytes/sec
total size is 100  speedup is 0.71 (DRY RUN)

Это демонстрирует способность rsync передавать только различия.

Теперь выполните фактическую синхронизацию снова:

rsync -avh source_dir/ dest_dir/

Проверьте содержимое dest_dir снова:

ls -R dest_dir
cat dest_dir/fileA.txt
cat dest_dir/new_file.txt

Вы должны увидеть new_file.txt в dest_dir, и fileA.txt должен содержать "Обновлённое содержание для файлаA".

Резюме

В этом практикуме мы получили практический опыт управления и передачи файлов на системах RHEL с использованием основных командных инструментов. Мы начали с освоения утилиты tar, изучив, как создавать, перечислять и извлекать файлы из архивов, включая создание сжатых архивов tar.gz для эффективного хранения и передачи.

Затем мы изучили методы безопасной передачи файлов. Мы использовали sftp для интерактивной и безопасной передачи файлов между системами, понимая его возможности для загрузки и скачивания файлов. Наконец, мы углубились в rsync, мощный инструмент для синхронизации файлов и каталогов, выделив его эффективность в обработке инкрементных обновлений и обеспечении согласованности данных в разных местах.