คำสั่ง rsync ของ Linux: ตัวเลือก | ตัวอย่างการใช้งาน

ประกาศแอฟฟิลิเอต Ver 3.1
ประกาศแอฟฟิลิเอต Ver 3.2 (เฉพาะมือถือ)
สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8บัญชี rootตรวจสอบ 2026-10-07

ถ้าคัดลอกใหม่ทั้งหมดทุกครั้งเพื่อให้โฟลเดอร์ของเซิร์ฟเวอร์ 2 เครื่องตรงกัน แม้จะมีไฟล์ที่เปลี่ยนเพียงไฟล์เดียว ปริมาณข้อมูลที่ส่งก็ยังเท่ากับขนาดทั้งหมด คำสั่ง rsync ย่อมาจาก remote sync ใช้เปรียบเทียบต้นทางกับปลายทางแล้วส่งเฉพาะไฟล์ที่ต่างกัน และทำงานแบบเดียวกันทั้งระหว่างโฟลเดอร์ในเครื่องและระหว่างเซิร์ฟเวอร์ที่เชื่อมต่อผ่าน SSH บทความนี้สรุปวิธีใช้พื้นฐาน ตัวเลือก และตัวอย่างการเชื่อมต่อ 2 แบบ คือ SSH และ rsync daemon

ผลลัพธ์ในบทความนี้ได้มาจาก rsync 3.2.7 บน AlmaLinux 9.8 ถ้ายังไม่ได้ติดตั้ง ให้ติดตั้งด้วยตัวจัดการแพ็กเกจ

# ตระกูล RHEL
dnf -y install rsync
# ตระกูล Debian
apt -y install rsync

✅ วิธีใช้พื้นฐาน

วิธีใช้พื้นฐานมีดังนี้

rsync -ตัวเลือก ต้นทาง ปลายทาง

คำสั่ง cp กับ rsync ใช้ลำดับเดียวกัน คือเขียนต้นทางก่อนแล้วเขียนปลายทางตามหลัง ถ้าใส่สแลช [/] ต่อท้ายต้นทาง จะมีเพียงเนื้อหาในโฟลเดอร์ที่เข้าไปอยู่ในปลายทาง ถ้าไม่ใส่ จะเข้าไปทั้งโฟลเดอร์

~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.png

ถ้ารันคำสั่งเดิมอีกครั้ง รายการไฟล์จะว่าง และจำนวนไบต์ใน sent จะลดลงเหลือไม่กี่ร้อยไบต์ เพราะไฟล์ที่มีขนาดและเวลาแก้ไขเท่าเดิมจะถูกข้ามไป

~]# rsync -av www/ backup/
sending incremental file list

sent 166 bytes  received 13 bytes  358.00 bytes/sec
total size is 3,015  speedup is 16.84

ถ้าใช้แค่ -r โดยไม่มี -a เวลาแก้ไขจะไม่ถูกเก็บไว้ การรันครั้งถัดไปจึงส่งไฟล์เดิมซ้ำอีก เวลาซิงค์โฟลเดอร์ให้ใส่ -a ไว้เป็นพื้นฐาน

ตัวเลือก -n จะแสดงเฉพาะไฟล์ที่จะเปลี่ยนโดยไม่ส่งจริง และท้ายผลลัพธ์จะมี [(DRY RUN)] ตัวเลือกที่ลบไฟล์ในปลายทางอย่าง -⁠-delete ให้ตรวจด้วย -n ก่อนแล้วจึงรันจริง

~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html

sent 188 bytes  received 39 bytes  454.00 bytes/sec
total size is 3,013  speedup is 13.27 (DRY RUN)

✅ ตัวเลือกคำสั่ง rsync & ตัวจำลอง

ตัวเลือกคำอธิบาย
-a--archiveคัดลอกไดเรกทอรีย่อยด้วย และเก็บสิทธิ์·เจ้าของ·เวลาแก้ไข·Symbolic link ไว้ (เหมือนกับ -rlptgoD)
-v--verboseแสดงชื่อไฟล์ที่ส่งและปริมาณข้อมูลที่ส่ง
-z--compressบีบอัดข้อมูลไฟล์ระหว่างส่ง
-r--recursiveคัดลอกไดเรกทอรีย่อยด้วย (รวมอยู่ใน -a)
-t--timesเก็บเวลาแก้ไขไว้ (รวมอยู่ใน -a) เป็นเกณฑ์ตัดสินว่าไฟล์ใดจะถูกข้ามในการรันครั้งถัดไป
-n--dry-runแสดงเฉพาะไฟล์ที่จะเปลี่ยนโดยไม่ส่งจริง และแสดง (DRY RUN) ไว้ท้ายผลลัพธ์
-u--updateข้ามไฟล์ที่ฝั่งปลายทางใหม่กว่า
-h--human-readableแสดงจำนวนไบต์เป็นหน่วย K·M·G
-Pเหมือนกับ --partial --progress แสดงความคืบหน้าของแต่ละไฟล์ และส่งต่อจากจุดเดิมเมื่อการส่งถูกขัดจังหวะ
-i--itemize-changesแสดงรายการที่เปลี่ยนในแต่ละไฟล์เป็นสัญลักษณ์>f+++++++++ ไฟล์ใหม่ · >f.st.⁠.⁠.⁠.⁠.⁠. ขนาด·เวลาเปลี่ยน · *deleting ถูกลบ
-e--rsh=COMMANDกำหนดเชลล์ระยะไกล-e 'ssh -p 2222 -i /root/.ssh/key.pem'
--deleteลบไฟล์ที่ไม่มีในต้นทางออกจากปลายทาง (ต้องใช้ -r หรือ -a)
--exclude=PATTERNยกเว้นไฟล์·ไดเรกทอรีที่ตรงกับแพตเทิร์น--exclude '*.tmp' --exclude 'cache/'
--include=PATTERNวางไว้หน้า --exclude เพื่อเอาเฉพาะแพตเทิร์นนั้นออกจากการยกเว้น
--max-size=SIZEไม่ส่งไฟล์ที่ใหญ่กว่าขนาดที่กำหนด (--min-size ใช้กับไฟล์ที่เล็กกว่า)--max-size=3M --min-size=10k
--bwlimit=RATEจำกัดความเร็วในการส่ง หน่วยเป็น KiB/s
--statsแสดงสถิติจำนวนไฟล์·ปริมาณข้อมูลที่ส่ง
ตัวจำลองคำสั่ง rsyncrsync 3.2.7
[root@server work]#
ทำงานเฉพาะในเบราว์เซอร์และไม่แตะต้องไฟล์จริง โฟลเดอร์ www คือต้นทาง ส่วนโฟลเดอร์ backup คือข้อมูลสำรองครั้งก่อน ลองพิมพ์ rsync โดยเปลี่ยนตัวเลือกไปเรื่อยๆ แล้วตรวจผลด้วย ll, cat, diff ส่วนที่อยู่ระยะไกล (user@host:พาธ) จะรับแค่รูปแบบและไม่เชื่อมต่อจริง สิ่งที่เปลี่ยนไปจะกลับคืนเมื่อกด [Start over] ใช้ปุ่ม ↑↓ บนคีย์บอร์ดเรียกคำสั่งที่พิมพ์ไปก่อนหน้า และพิมพ์ uknew help เพื่อดูคำสั่งที่ใช้ได้

✅ วิธีเชื่อมต่อ: SSH และ rsync daemon

การเชื่อมต่อเพื่อซิงค์กับเซิร์ฟเวอร์ระยะไกลมี 2 แบบ โคลอนตัวเดียว [:] หลังโฮสต์จะเชื่อมต่อผ่าน SSH ส่วนโคลอนสองตัว [::] จะเชื่อมต่อตรงกับ rsync daemon ที่พอร์ต 873

หมวดแบบ SSH (:)แบบ rsync daemon (::)
รูปแบบการเชื่อมต่อrsync -ตัวเลือก user@host:/พาธ /พาธในเครื่องrsync -ตัวเลือก host::โมดูล/พาธ /พาธในเครื่อง
พอร์ตพอร์ต SSH (ค่าเริ่มต้น 22)873
การเข้ารหัสเข้ารหัสด้วย SSHไม่มีการเข้ารหัส
การยืนยันตัวตนคีย์ SSH หรือรหัสผ่านhosts allow ใน rsyncd.conf และบัญชี·รหัสผ่าน (ไม่บังคับ)
การตั้งค่าฝั่งเซิร์ฟเวอร์ไม่มี (ใช้ได้ทันทีเมื่อเชื่อมต่อ SSH ได้)ติดตั้ง rsync-daemon, /etc/rsyncd.conf, เปิดพอร์ต 873
การใช้งานสำรองข้อมูล·Deploy ระหว่างเซิร์ฟเวอร์ (ทางเลือกหลัก)ทำมิเรอร์ในเครือข่ายภายในโดยไม่ต้องให้บัญชี SSH

🔲 แบบ SSH

ถ้าเป็นเซิร์ฟเวอร์ที่เชื่อมต่อด้วย SSH ได้ ก็ใช้ได้ทันทีโดยไม่ต้องตั้งค่าฝั่งเซิร์ฟเวอร์ ถ้าพอร์ตต่างออกไปหรือใช้ไฟล์คีย์ ให้ใส่คำสั่ง ssh ลงในตัวเลือก -e ตามเดิม

# โลคัล → ระยะไกล
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# ระยะไกล → โลคัล
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# กำหนดพอร์ต SSH·ไฟล์คีย์
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
คำสั่ง rsync_รันจากระยะไกลมายังโลคัล_ผลลัพธ์

ถ้าต้องการยกเว้นไฟล์หรือไดเรกทอรีบางรายการ ให้ใส่ -⁠-exclude ทีละแพตเทิร์น หรือรวมแพตเทิร์นไว้ในวงเล็บปีกกาแล้วเขียนครั้งเดียว

rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
คำสั่ง rsync_จากระยะไกลมายังโลคัล_ยกเว้นไฟล์และไดเรกทอรีบางรายการ

🔲 แบบ rsync daemon

rsync daemon อนุญาตให้เข้าถึงเป็นรายโมดูลผ่านพอร์ต 873 โดยไม่ต้องมีบัญชี SSH และเนื่องจากการสื่อสารไม่ถูกเข้ารหัส จึงใช้ระหว่างเซิร์ฟเวอร์ในเครือข่ายภายในเดียวกัน

บน AlmaLinux 9 ให้ติดตั้งแพ็กเกจ rsync-daemon แล้วเปิดบริการ ถ้าเซิร์ฟเวอร์ใช้ firewalld ให้เปิดพอร์ต 873 ส่วนคลาวด์เซิร์ฟเวอร์ให้เปิดที่ไฟร์วอลล์ในคอนโซล วิธี xinetd ที่ใช้บน RHEL 8 ลงไปไม่มีแล้วในเวอร์ชัน 9

dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload

ใส่ชื่อโมดูล พาธ และโฮสต์ที่อนุญาตลงในไฟล์ตั้งค่า [/etc/rsyncd.conf] ถ้าตั้ง read only เป็น yes ฝั่งระยะไกลจะดึงไฟล์ไปได้อย่างเดียว

[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30

จากฝั่งระยะไกล ถ้าใส่แค่โคลอนสองตัวหลังโฮสต์ จะแสดงรายการโมดูล ถ้าใส่ชื่อโมดูลด้วย จะแสดงรายการไฟล์ในโมดูลนั้น

~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x          4,096 2025/06/12 22:14:39 .
drwxr-xr-x          4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x          4,096 2025/06/12 22:14:39 2server_data

การคัดลอกใช้รูปแบบ [โฮสต์::โมดูล/พาธ] -⁠-delete จะลบไฟล์ที่ไม่มีในต้นทางออกจากปลายทาง และ -⁠-include จะเอาเฉพาะรายการที่วางไว้หน้า -⁠-exclude ออกจากการยกเว้น

~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/

sent 58 bytes  received 332 bytes  780.00 bytes/sec
total size is 442  speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/
คำสั่ง rsync_จากระยะไกลมายังโลคัล_ใช้ตัวเลือก delete
คำสั่ง rsync_จากระยะไกลมายังโลคัล_ใช้ตัวเลือก delete, include, exclude

บนเซิร์ฟเวอร์ที่เปิด SELinux ไว้ การเข้าถึงพาธของโมดูลอาจถูกบล็อกด้วย [Permission denied (13)] ในการทดสอบ ผ่านได้หลังปิด SELinux ด้วย [setenforce 0]

~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes  received 90 bytes  65.33 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see ก่อนหน้า errors) (code 23) at main.c(1658) [Receiver=3.1.2]

-⁠-bwlimit จำกัดความเร็วในการส่งเป็นหน่วย KiB/s และถ้าใส่ -P จะเห็นความคืบหน้าของแต่ละไฟล์ไปด้วย -⁠-max-size และ -⁠-min-size จะส่งเฉพาะไฟล์ที่อยู่ในช่วงขนาดที่กำหนด

rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
คำสั่ง rsync_จากระยะไกลมายังโลคัล_จำกัดแบนด์วิดท์ 100kb และดูความคืบหน้าด้วยตัวเลือก -P

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 8   +   6   =