Fayl ko'chirish — scp va rsync
Muammodan boshlaylik
Lokal kompyuterda frontend ni build qildingiz — dist/ papkasi, 300 ta fayl. Uni serverdagi /var/www/dokon ga qo'yish kerak. Ertaga yana bitta CSS fayl o'zgaradi — yana hammasini yuklaysizmi?
Yoki serverdan 2 GB lik zaxira nusxani yuklab olish kerak — va yarmida aloqa uziladi.
SSH (34-dars) orqali fayl ko'chirishning ikki vositasi bor: scp — oddiy nusxalash, rsync — aqlli sinxronizatsiya.
scp — SSH orqali cp
Sintaksis cp ga o'xshash, faqat masofaviy yo'l server:yo'l shaklida:
# Lokal → server
scp fayl.txt otabek@45.12.34.56:/tmp/
scp fayl.txt dokon:/tmp/ # ~/.ssh/config dagi nom bilan
# Server → lokal
scp dokon:/var/backups/dokon.sql.gz ./
# Papka — -r
scp -r dist/ dokon:/var/www/dokon/
# Nostandart port — katta P
scp -P 2222 fayl.txt dokon:/tmp/
[!INFO]
server:dan keyingi nisbiy yo'l — serverdagi uy papkadan hisoblanadi:dokon:fayl.txt=dokon:/home/deploy/fayl.txt.:ni unutsangiz —dokonnomli lokal fayl yaratiladi.
scp oddiy va hamma joyda bor. Lekin u har safar hamma narsani qaytadan ko'chiradi va uzilsa — boshidan boshlaydi.
rsync — faqat o'zgarganlarini
rsync manba va manzilni solishtiradi va faqat farqni ko'chiradi:
rsync -avz dist/ dokon:/var/www/dokon/
Birinchi marta — hamma narsa. Keyingi safar bitta CSS o'zgargan bo'lsa — faqat shu fayl (va hatto faylning faqat o'zgargan qismi). 300 ta fayl o'rniga — bitta, bir soniyada.
Asosiy bayroqlar
| Bayroq | Nima |
|---|---|
-a |
Arxiv rejimi: rekursiv + ruxsatlar, vaqtlar, havolalar saqlanadi |
-v |
Nima ko'chirilayotganini ko'rsatish |
-z |
Uzatishda siqish |
-h |
O'qiladigan hajmlar |
-P |
Progress + uzilganda davom ettirish |
-n |
Sinov (dry run) — nima qilinishini ko'rsatish, hech narsa qilmasdan |
--delete |
Manbada yo'q fayllarni manzildan o'chirish |
--exclude |
Chiqarib tashlash |
Eng ko'p ishlatiladigan: rsync -avzP.
Oxiridagi / — muhim!
rsync -av dist/ dokon:/var/www/dokon/ # dist ning ICHIDAGILARI → dokon/ ga
rsync -av dist dokon:/var/www/dokon/ # dist PAPKASINING O'ZI → dokon/dist/ ga
dist/— "bu papkaning mazmuni"dist— "bu papka"
Bu rsync dagi eng ko'p uchraydigan xato. Odatda manba/ → manzil/ (ikkalasida /) kerak.
--delete — to'liq aks ettirish
Lokalda eski.js ni o'chirdingiz. Oddiy rsync uni serverda qoldiradi. --delete bilan server lokalning aniq nusxasi bo'ladi:
rsync -avz --delete dist/ dokon:/var/www/dokon/
[!WARNING]
--delete— xavfli: yo'l yoki/da xato qilsangiz, serverdagi kerakli fayllar o'chadi. Har doim avval-nbilan sinang:rsync -avzn --delete dist/ dokon:/var/www/dokon/Ro'yxatni ko'rib,
deleting ...qatorlarini tekshiring — keyin-nsiz.
Chiqarib tashlash
rsync -avz --exclude node_modules --exclude .git --exclude .env ./ dokon:/opt/dokon/
rsync -avz --exclude-from=.rsyncignore ./ dokon:/opt/dokon/
Katta fayllar va uzilishlar
rsync -avP dokon:/var/backups/dokon-2026-11-06.sql.gz ./
Aloqa uzilsa — xuddi shu buyruqni qayta ishga tushiring: rsync to'xtagan joyidan davom etadi (-P = --partial --progress).
Lokal ham ishlaydi
rsync faqat tarmoq uchun emas — lokal zaxira uchun ham ajoyib:
rsync -a --delete ~/loyihalar/ /mnt/fleshka/zaxira/
Amaliy: oddiy deploy skripti
#!/bin/bash
set -e
npm run build
rsync -avz --delete dist/ dokon:/var/www/dokon/
ssh dokon "sudo systemctl reload nginx"
echo "Deploy tugadi!"
Bir buyruq — build, faqat o'zgarganlarni yuklash, Nginx ni yangilash. (Bash skriptlar — 37-dars.)
Pipe orqali: tar + ssh
Juda ko'p kichik fayllar (masalan, 100 000 ta rasm) uchun — siqilgan oqim, fayl yaratmasdan (31-dars):
tar -czf - uploads/ | ssh dokon "tar -xzf - -C /var/www/dokon/"
- — "fayl o'rniga stdout/stdin". Lokal arxiv yaratilmaydi, diskda joy kerak emas.
sftp va grafik vositalar
sftp dokon
sftp> ls
sftp> get zaxira.sql.gz
sftp> put rasm.png
sftp> exit
Grafik interfeys kerak bo'lsa: FileZilla, WinSCP (Windows), Cyberduck (macOS) — barchasi SFTP (ya'ni SSH) orqali, xuddi shu kalitlar bilan ishlaydi. VS Code ning Remote-SSH kengaytmasi ham fayllarni sudrab tashlashga imkon beradi.
Qaysi biri qachon
| Vaziyat | Vosita |
|---|---|
| Bitta faylni tez ko'chirish | scp |
| Papkani serverga qayta-qayta yuklash (deploy) | rsync -avz --delete |
| Katta faylni yuklab olish | rsync -avP |
| Juda ko'p kichik fayllar | tar | ssh |
| Interaktiv ko'rib chiqish | sftp yoki FileZilla |
Nima uchun shunday?
rsync qanday qilib faqat o'zgargan qismni yuborishni biladi — buning uchun avval faylni solishtirish kerak emasmi?
rsync ning algoritmi aqlli: u ikki tomondagi faylni bloklarga bo'ladi va har bir blokning qisqa "barmoq izi"ni (checksum) hisoblaydi. Tarmoq orqali faqat shu barmoq izlari almashinadi — butun fayl emas. Mos kelmagan bloklargina yuboriladi. Natija: 1 GB fayldagi 10 KB o'zgarish uchun ~10 KB + barmoq izlari. Bundan tashqari, umuman o'zgarmagan fayllarni rsync hajm va vaqt bo'yicha darhol o'tkazib yuboradi. Shu algoritm tufayli rsync 1996 yildan beri zaxira va deploy vositalarining standarti bo'lib qolmoqda.
Xulosa
Eslab qoling:
scp fayl server:/yo'l/— oddiy; papka —-r; port —-P(katta)server:dan keyin nisbiy yo'l — uy papkadanrsync -avzP manba/ server:/manzil/— faqat o'zgarganlarini- Oxiridagi
/:dist/— mazmuni,dist— papkaning o'zi --delete— aniq nusxa; avval-nbilan sinab ko'ring--exclude node_modules- Uzilsa — xuddi shu rsync ni qayta ishga tushiring
tar -czf - papka | ssh server "tar -xzf - -C /manzil"
Keyingi dars
36-dars: Firewall — ufw bilan portlarni boshqarish