Модуль 25

scp, rsync та передача файлів

Ось готовий урок, створений спеціально для вас у стилі CS50.


🎓 CS50: Мистецтво телепортації файлів (SCP та Rsync)

Привіт, друзі! 👋

Сьогодні ми поговоримо про те, як переміщувати речі. Ні, не меблі у вашій квартирі, а дані між комп'ютерами.

1. 🔥 Вступ: проблема та мотивація

Уявіть ситуацію. Ви написали геніальний код на своєму ноутбуці. Він працює ідеально. Ви готові показати його світу. Але світ не бачить ваш ноутбук — світ бачить сервер, який знаходиться десь у Франкфурті, Нью-Йорку чи хмарі Amazon AWS.

Як ваш код потрапить туди?

  • Флешка? 💾 Серйозно? У сервера навіть немає USB-порту, до якого ви можете дотягнутися фізично.
  • Google Drive або Dropbox? Це зручно для фотографій з відпустки, але для розгортання серверного софту це... ну, скажімо так, непрофесійно і повільно.
  • Ctrl+C -> Ctrl+V? Якщо у вас 10 000 файлів, ви постарієте, поки це зробите.

Питання до вас: Як передати файл на комп'ютер, у якого немає екрана, немає мишки, а є лише чорне вікно термінала і IP-адреса?

Без інструментів, які ми сьогодні вивчимо (scp та rsync), ви як будівельник, який намагається збудувати хмарочос, передаючи цеглу поштою в конвертах. Сьогодні ми навчимося керувати вантажівками даних. 🚚💨


2. 🧠 Теоретична база (Що там «під капотом»?)

Перш ніж ми напишемо першу команду, давайте розберемося з логікою.

У нас є два гравці: 1. Local (ваш комп'ютер). 2. Remote (віддалений сервер).

Між ними — інтернет, повний небезпек. Тому ми не передаємо файли «голими». Ми використовуємо SSH (Secure Shell).

🔑 Два головні інструменти:

1. SCP (Secure Copy)

Це як класична команда cp (copy), тільки вона вміє ходити крізь мережу. * Як це працює: Вона відкриває захищений тунель (SSH), бере файл, шифрує його, кидає в тунель, а на іншому кінці сервер його ловить і розшифровує. * Аналогія: Ви відправляєте документ кур'єром у броньованому авто. Це надійно, але тупо. Кур'єр просто бере і везе.

2. Rsync (Remote Sync) — «Розумний перевізник»

Це scp на стероїдах. Це стандарт індустрії. * Як це працює: Перед тим як передати файл, rsync запитує: "Гей, сервере, у тебе вже є цей файл? А якщо є, то чим він відрізняється?". * Магія (Delta Encoding): Якщо ви змінили лише один рядок у гігантському файлі на 1 ГБ, rsync передасть лише цей змінений шматочок, а не весь гігабайт. * Аналогія: Ви переїжджаєте. scp купує нові меблі в нову квартиру. rsync дивиться: "Ага, стіл вже є, стільці є. О, ти купив нову вазу? Перевезу тільки вазу".


3. 🧪 Приклади (від простого до реального)

Припустимо, у нас є файл app.py і ми хочемо закинути його на сервер. Адреса сервера: 192.168.1.50. Користувач: admin.

Сценарій 1: Простий кидок (SCP)

Синтаксис майже такий самий, як у звичайного копіювання: звідки -> куди.

# На вашому комп'ютері:
scp app.py admin@192.168.1.50:/home/admin/

🛑 Стоп! Що тут відбувається? 1. scp — команда. 2. app.py — що копіюємо (локально). 3. admin@192.168.1.50 — куди підключаємось. 4. : (двокрапка) — це критично важливий знак! Він відділяє адресу сервера від шляху на диску. 5. /home/admin/ — куди саме покласти файл на сервері.

Сценарій 2: Забираємо файл додому (Download)

А якщо ми хочемо стягнути логи з сервера, щоб почитати їх за чашкою кави? Просто міняємо місцями аргументи!

# Спочатку ВІДДАЛЕНЕ джерело, потім ЛОКАЛЬНА папка
scp admin@192.168.1.50:/var/log/nginx/access.log .
  • access.log — файл там.
  • . (крапка) — поточна папка тут.

Сценарій 3: Важка артилерія (Rsync)

Ви працюєте над веб-сайтом. У вас папка my_website/ з тисячею картинок і файлів. Як думаєте, що буде, якщо використати scp? Він почне копіювати все підряд. Якщо зв'язок обірветься на 99%, вам доведеться починати з нуля. 😭

Ось як це роблять профі:

rsync -avz my_website/ admin@192.168.1.50:/var/www/html/

Давайте розберемо ці магічні прапорці (flags): * -a (archive): "Збережи все як є" (права доступу, дату створення, власника). * -v (verbose): "Розказуй мені, що ти робиш" (виводить список файлів). * -z (compress): "Стисни дані перед відправкою" (економить трафік).

Питання на засипку: Що станеться, якщо я запущу цю команду вдруге одразу після першого разу?

Відповідь: rsync просканує папки, побачить, що нічого не змінилося, і завершить роботу за 0.1 секунди, не передавши жодного байта даних. Ефективність! ⚡️


4. 🛠 Практична частина

Час забруднити руки. Відкрийте термінал (або уявіть, що відкрили).

Завдання 1: «Hello World» 1. Створіть файл secret.txt у себе на комп'ютері. 2. Використовуючи scp, передайте його на сервер (якщо немає сервера, передайте в іншу папку, імітуючи шлях, або на VirtualBox).

Завдання 2: «Евакуація» 1. Уявіть, що сервер падає. Вам треба терміново забрати всю папку /etc/nginx/ з сервера собі на робочий стіл. 2. Напишіть команду scp з прапорцем -r (recursive), щоб забрати папку цілком.

Завдання 3: «Синхронізація проекту» (Rsync) 1. Створіть папку project з 5 текстовими файлами. 2. Передайте її rsync-ом у папку /tmp/ на сервері. 3. Змініть один файл локально (додайте слово). 4. Запустіть ту саму команду rsync знову. Подивіться на вивід: чи передався тільки один файл?

Завдання 4 (Для сміливих): Exclude 1. У вас в проекті є папка node_modules (вона важить як чорна діра). Вам не треба її передавати. 2. Знайдіть, як використати прапорець --exclude, щоб передати проект, але ігнорувати цю папку.


5. 💡 Мислення як у розробника

Ось що відрізняє новачка від Senior-інженера в цій темі.

1. Проблема слеша / (Trailing Slash)

В rsync це найчастіша помилка, яка коштує нервів.

  • rsync -a source target -> створить target/source
  • rsync -a source/ target -> висипле вміст source прямо в target.

Порада: Завжди думайте: "Я копіюю папку чи вміст папки?". Якщо вміст — ставте слеш в кінці джерела.

2. Режим "Dry Run" (Сухий прогон)

Уявіть, що ви видаляєте файли на сервері командою синхронізації (так, rsync вміє видаляти зайве з прапорцем --delete). Страшно? Дуже.

Досвідчений розробник спочатку робить так:

rsync -avz --delete --dry-run source/ remote:/target/

--dry-run покаже вам, що сталося б, але нічого не чіпатиме. Це ваш запобіжник. Використовуйте його. Завжди.

3. Чому scp вмирає?

scp вважається застарілим (deprecated) у деяких колах для складних задач. Він повільніший і не вміє продовжувати перерване завантаження. Для одного файлу конфігурації — scp ОК. Для бекапу бази даних на 50GB — тільки rsync.


6. 🧩 Підсумок

Отже, що ми сьогодні додали до вашого арсеналу:

  1. SCP — для швидкого перекидання одиночних файлів. Просто, як двері.
  2. Rsync — для професійної синхронізації, бекапів та деплою сайтів. Економить час і трафік.
  3. Розуміння, що передача файлів — це не магія, а шифрований тунель SSH + розумні алгоритми порівняння файлів.

Тепер ви можете не просто писати код, а й доставляти його туди, де він буде жити.

🔮 Що далі? Окей, файли на сервері. Але хто їх запустить? Якщо ви закриєте термінал, ваша програма зупиниться. Як змусити код працювати вічно, навіть коли ви спите? На наступному уроці ми поговоримо про Daemon-процеси, Systemd та те, як тримати сервер живим.

А поки що — спробуйте скопіювати щось rsync-ом. Це приносить дивне задоволення. 😉

Хай щастить!