rsync ( Remote Sync ) เป็นเครื่องมือสำหรับซิงโครไนซ์และถ่ายโอนไฟล์ทั้งในเครื่องเดียวกันและระหว่างเครื่องผ่านเครือข่าย จุดเด่นของ rsync คือการถ่ายโอนเฉพาะส่วนที่เปลี่ยนแปลง ทำให้ประหยัดเวลาและ bandwidth อย่างมาก
การติดตั้ง
Ubuntu / Debiansudo apt install rsync
CentOS / RHEL / Fedora
sudo dnf install rsync
macOS (มาพร้อมระบบอยู่แล้ว หรือติดตั้งผ่าน Homebrew)
brew install rsync
รูปแบบคำสั่งพื้นฐาน
rsync [ตัวเลือก] <ต้นทาง> <ปลายทาง>
ตัวเลือก ( Options ) ที่ใช้บ่อย
| ตัวเลือก | ความหมาย |
|---|---|
| -a | Archive mode — รักษา permission, timestamp, symlink, owner ฯลฯ |
| -v | Verbose — แสดงรายละเอียดขณะทำงาน |
| -z | บีบอัดข้อมูลระหว่างส่ง |
| -P | แสดง progress bar และ resume ได้ |
| -r | คัดลอกแบบ recursive ( โฟลเดอร์และโฟลเดอร์ย่อย ) |
| -n | Dry run — จำลองการทำงานโดยไม่แก้ไขไฟล์จริง |
| –delete | ลบไฟล์ปลายทางที่ไม่มีในต้นทาง |
| –exclude | ระบุไฟล์ / โฟลเดอร์ที่ต้องการข้าม |
| -e ssh | ใช้ SSH เป็นช่องทางส่งข้อมูล |
ตัวอย่างการใช้งาน
คัดลอกไฟล์ภายในเครื่องเดียวกัน
rsync -av /home/user/documents/ /backup/documents/
หมายเหตุ: เครื่องหมาย / ท้ายโฟลเดอร์ต้นทางมีความสำคัญ
- มี
/→ คัดลอกเนื้อหาภายในโฟลเดอร์ - ไม่มี
/→ คัดลอกโฟลเดอร์ทั้งหมด รวมถึงตัวโฟลเดอร์เอง
ซิงค์ไปยังเครื่องระยะไกลผ่าน SSH
rsync -avz -e ssh /home/user/project/ [email protected]:/var/www/project/
ดึงไฟล์จากเครื่องระยะไกลมายังเครื่องตัวเอง
rsync -avz [email protected]:/var/log/ /home/user/logs/
ทดสอบก่อนรัน ( Dry Run )
rsync -avn /home/user/documents/ /backup/documents/
แนะนำให้ใช้ -n เสมอก่อนรันจริง โดยเฉพาะเมื่อใช้ --delete
ซิงค์พร้อมลบไฟล์ที่ไม่มีในต้นทาง
rsync -av --delete /home/user/documents/ /backup/documents/
ข้ามไฟล์บางประเภท
rsync -av --exclude='*.log' --exclude='node_modules/' /home/user/project/ /backup/project/
แสดง Progress Bar
rsync -av --progress /home/user/bigfile.iso /backup/
หรือใช้ -P ซึ่งรวม –progress และ –partial ไว้ด้วยกัน
rsync -avP /home/user/bigfile.iso /backup/
จำกัดความเร็วในการส่งข้อมูล
rsync -avz --bwlimit=5000 /home/user/data/ user@remote:/data/
หน่วยเป็น KB/s ( 5000 = 5 MB/s )
ใช้กับ SSH Port ที่กำหนดเอง
rsync -avz -e "ssh -p 2222" /home/user/data/ user@remote:/data/
ซิงค์จาก exclude file
สร้างไฟล์ exclude-list.txt
*.tmp
*.log
.DS_Store
node_modules/
__pycache__/
จากนั้นรันrsync -av --exclude-from='exclude-list.txt' /home/user/project/ /backup/project/
เปรียบเทียบ rsync กับ cp และ scp
| คุณสมบัติ | cp | scp | rsync |
|---|---|---|---|
| ส่งผ่านเครือข่าย | ✗ | ✓ | ✓ |
| ส่งเฉพาะส่วนที่เปลี่ยน | ✗ | ✗ | ✓ |
| Resume ได้ | ✗ | ✗ | ✓ |
| บีบอัดข้อมูล | ✗ | ✓ | ✓ |
| Exclude pattern | ✗ | ✗ | ✓ |
| Dry run | ✗ | ✗ | ✓ |
การใช้ rsync กับ Cron Job ( สำรองข้อมูลอัตโนมัติ )
เปิด crontabcrontab -e
เพิ่มบรรทัดนี้เพื่อสำรองข้อมูลทุกวันเวลาตี 2
0 2 * * * rsync -az --delete /home/user/data/ /backup/data/ >> /var/log/rsync-backup.log 2>&1
ข้อควรระวัง
- เครื่องหมาย
/ท้ายชื่อโฟลเดอร์ — มีผลต่อพฤติกรรมการคัดลอก ควรระวังให้ดี --delete— จะลบไฟล์ปลายทางอย่างถาวร ควรทำ dry run ก่อนเสมอ- สิทธิ์ (Permission) — บางครั้งต้องใช้
sudoหากปลายทางต้องการสิทธิ์พิเศษ - SSH Key — ควรตั้งค่า SSH key-based authentication เพื่อให้ rsync ทำงานอัตโนมัติโดยไม่ต้องพิมพ์รหัสผ่าน
สรุป
rsync เป็นเครื่องมือที่ทรงพลังและยืดหยุ่นสูง เหมาะกับงานสำรองข้อมูล ซิงโครไนซ์ไฟล์ และ deploy ระบบ การเรียนรู้ตัวเลือกหลักอย่าง -avz, --delete, --exclude, และ -P ก็เพียงพอสำหรับการใช้งานส่วนใหญ่แล้ว
อ่านเพิ่มเติม