## 🎯 آموزش کامل کپی و همگامسازی فایلها و دایرکتوریها با `rsync` در لینوکس
`rsync` یکی از قدرتمندترین ابزارها برای کپی و همگامسازی فایلها و پوشهها، هم به صورت **محلی** و هم **از راه دور (remote)** در لینوکس است. این ابزار بسیار سریع، انعطافپذیر و قابل اعتماد است.
در این مقاله با کاربردهای مختلف `rsync` آشنا میشویم.
---
## 🛠️ نصب rsync
در اکثر توزیعهای لینوکس، `rsync` به صورت پیشفرض نصب شده. اگر نصب نبود:
**Debian/Ubuntu:**
```bash
sudo apt update
sudo apt install rsync
```
**CentOS/RHEL/Fedora:**
```bash
sudo dnf install rsync
```
---
# بخش اول: 📂 کپی و همگامسازی محلی (Local)
### ✅ کپی فایل یا پوشه در همان سیستم
**کپی یک فایل:**
```bash
rsync -avh /path/to/source/file.txt /path/to/destination/
```
**کپی یک دایرکتوری کامل:**
```bash
rsync -avh /path/to/source/ /path/to/destination/
```
🔹 توجه کن که `/` در انتهای مسیر مبدا باعث میشود محتوای داخل پوشه منتقل شود، نه خود پوشه.
---
# بخش دوم: 🌍 کپی و همگامسازی از راه دور (Remote)
### ✅ کپی فایلها بین دو سیستم از طریق SSH
**کپی از سیستم محلی به سیستم ریموت:**
```bash
rsync -avz /path/to/source/ username@remote_host:/path/to/destination/
```
**کپی از سیستم ریموت به سیستم محلی:**
```bash
rsync -avz username@remote_host:/path/to/source/ /path/to/destination/
```
🔹 گزینه `-z` برای فشردهسازی دادهها حین انتقال است (سرعت بالاتر در شبکه).
---
# ✨ گزینههای مهم در rsync
| گزینه | توضیح |
|------|-------|
| `-a` | حالت آرشیو (حفظ مالکیت، پرمیشنها، تایماستمپ و...) |
| `-v` | حالت verbose (نمایش جزییات هنگام کپی) |
| `-h` | نمایش حجم فایلها به صورت قابل خواندن (human-readable) |
| `-z` | فشردهسازی دادهها هنگام انتقال |
| `-P` | نمایش پیشرفت عملیات و امکان ادامه از فایلهای نصفه |
| `--delete` | حذف فایلهایی که در مقصد دیگر وجود ندارند (دقیقاً سینک شود) |
---
# 🔥 مثالهای حرفهایتر با rsync
### کپی با نمایش میزان پیشرفت
```bash
rsync -avhP /source/ /destination/
```
### فقط کپی فایلهایی که تغییر کردهاند
(مثلاً اگر فقط یک فایل جدید اضافه یا تغییر کرده، فقط همان منتقل شود):
```bash
rsync -av /source/ /destination/
```
### کپی به صورت رزرو شده (با SSH پورت خاص)
```bash
rsync -avz -e "ssh -p 2222" /source/ username@remote_host:/destination/
```
### کپی و همگامسازی دقیق (حذف فایلهای اضافه در مقصد)
```bash
rsync -av --delete /source/ /destination/
```
---
# 🧠 نکات پیشرفتهی rsync
- میتوانید با کرانجاب (cron) عملیات rsync را اتوماتیک زمانبندی کنید (مثلاً هر شب ساعت ۲ بامداد بکاپ بگیرید).
- `rsync` فقط تفاوتها (differences) را منتقل میکند، نه کل فایل، پس در انتقالهای حجیم بسیار سریعتر از `scp` است.
- میتوانید از `rsync` برای تهیه بکاپهای incremental یا mirror استفاده کنید.
---
# 🧩 یک نمونه کرانجاب برای بکاپ روزانه با rsync:
ویرایش کرانجاب:
```bash
crontab -e
```
افزودن خط زیر:
```bash
0 2 * * * rsync -avz /data/ backupuser@backupserver:/backups/data/
```
🔹 این دستور هر روز ساعت ۲ صبح از `/data/` بکاپ میگیرد و روی سرور بکاپ ذخیره میکند.
---
## ✅ نتیجهگیری
`rsync` یکی از بهترین ابزارها برای:
- کپی فایلها به صورت محلی یا راه دور
- همگامسازی دایرکتوریها
- بکاپگیری هوشمند
- صرفهجویی در پهنای باند و زمان
استفادهی حرفهای از `rsync` یکی از مهارتهای حیاتی هر ادمین لینوکس است. 🚀