Введение
В этом лабораторном практикуме вы получите практический опыт управления и передачи файлов эффективно и безопасно на системе 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, мощный инструмент для синхронизации файлов и каталогов, выделив его эффективность в обработке инкрементных обновлений и обеспечении согласованности данных в разных местах.



