10 ตัวอย่างที่เป็นประโยชน์ของคำสั่ง Linux rsync
เผยแพร่แล้ว: 2022-10-28
คำสั่ง Linux rsync
เป็นเครื่องมือคัดลอกไฟล์และโฟลเดอร์ซิงโครไนซ์ที่มีประสิทธิภาพ ต่อไปนี้คือกรณีการใช้งานทั่วไป 10 กรณีที่คุณสามารถนำไปใช้ให้เกิดประโยชน์กับระบบของคุณเองได้
เครื่องมือ rsync
เครื่องมือ rsync
จะคัดลอกไฟล์และไดเร็กทอรีระหว่างคอมพิวเตอร์สองเครื่อง ใช้อัลกอริธึมที่ซับซ้อนซึ่งสแกนแผนผังไดเร็กทอรีเพื่อค้นหาไฟล์ในคอมพิวเตอร์ต้นทางที่ไม่มีอยู่ในคอมพิวเตอร์ปลายทาง ไฟล์เหล่านี้จะถูกส่งไปยังคอมพิวเตอร์ปลายทาง สิ่งที่ทำให้ rync
ฉลาดมากคือสามารถคิดออกว่าไฟล์ใดบ้าง ที่ ได้รับการแก้ไข และส่งเฉพาะ ส่วนที่เปลี่ยนแปลง
คุณสามารถใช้ rsync
เพื่อคัดลอกไฟล์ไปยังตำแหน่งอื่นบนฮาร์ดไดรฟ์ของคุณ ไปยังฮาร์ดไดรฟ์อื่นในคอมพิวเตอร์เครื่องเดียวกัน ไปยังไดรฟ์ USB ที่เชื่อมต่อภายนอก หรือตำแหน่งที่เครือข่ายเข้าถึงได้
ยิ่งไปกว่านั้น rsync
ยังสามารถเลือกที่จะรักษาลิงก์สัญลักษณ์ ฮาร์ดลิงก์ และข้อมูลเมตาของไฟล์ เช่น การเป็นเจ้าของไฟล์ การอนุญาต และเวลาการเข้าถึง เพื่อสนับสนุนฟังก์ชันทั้งหมดนี้ rsync
มีตัวเลือกมากมายและการค้นหาทั้งหมดต้องใช้เวลา เราได้รวบรวม 10 ตัวอย่างเหล่านี้เพื่อช่วยคุณในการเริ่มต้น เราได้เขียนเกี่ยวกับการสำรองข้อมูลด้วย rsync
แล้ว ดังนั้นเราจึงมุ่งความสนใจไปที่การใช้งานอื่นๆ ที่นี่
สำหรับตัวเลือกมากมาย โครงสร้างของคำสั่ง rsync
นั้นเรียบง่าย เราจำเป็นต้องระบุแหล่งที่มา ปลายทาง และตัวเลือกที่เราต้องการใช้ คุณอาจพบว่ามีการติดตั้ง rsync
ไว้ในคอมพิวเตอร์ Linux ของคุณแล้ว—ซึ่งเคยมีในเครื่องทดสอบทั้งหมดของเรา—แต่หากไม่ใช่ แสดงว่าจะอยู่ในที่เก็บของการแจกจ่ายของคุณอย่างแน่นอน
1. คัดลอกไฟล์ไปยังไดเร็กทอรีอื่น
นี่เป็นตัวอย่างง่ายๆ ที่จะพาเราไปต่อ เราจะคัดลอกไฟล์จากไดเร็กทอรี "project-files" ไปยังไดเร็กทอรี "Documents" เราใช้สองตัวเลือก ได้แก่ ตัวเลือก -a
(เก็บถาวร) และตัวเลือก -v
(verbose) ตัวเลือก verbose บอกให้ rsync
อธิบายว่ามันทำอะไรเหมือนที่ทำอยู่ ตัวเลือกการ archive
จะรักษาความเป็นเจ้าของไฟล์และรายการอื่นๆ ที่เราจะพิจารณาในไม่ช้า
รูปแบบของคำสั่งคือ options source-location destination-location
rsync -av /home/dave/project-files/ /home/dave/Documents/
การใช้ ls
ในโฟลเดอร์ "Documents" แสดงว่ามีการคัดลอกไฟล์แล้ว
ในขณะที่ rsync
ทำงาน ไฟล์จะแสดงรายการในขณะที่กำลังคัดลอก เราได้รับแจ้งว่า:
- จำนวนไบต์ที่ส่ง
- จำนวนไบต์ที่ได้รับ ก่อนที่การถ่ายโอนไฟล์จะเกิดขึ้น
rsync
จะต้องพิจารณาว่าไฟล์ใดต้องได้รับการถ่ายโอน ในการทำเช่นนั้น ข้อมูลบางอย่างเกี่ยวกับไฟล์บนปลายทางจะต้องถูกเรียกโดยrsync
ข้อมูลนี้มีอยู่ในไบต์ที่ได้รับ - ความเร็วในการโอน
- ขนาดรวมของไฟล์ที่คัดลอก
- "การเร่งความเร็ว" นี่คืออัตราส่วนของขนาดทั้งหมดหารด้วยผลรวมของไบต์ที่ส่งและรับ ยิ่งตัวเลขนี้สูงเท่าไร การถ่ายโอนก็จะยิ่งมีประสิทธิภาพมากขึ้นเท่านั้น
เราแก้ไขไฟล์ข้อความในไดเร็กทอรีต้นทางและทำซ้ำคำสั่ง rsync
rsync -av /home/dave/project-files/ /home/dave/Documents/
คราวนี้ไฟล์เดียวที่ต้องอัปเดตคือไฟล์ข้อความที่เราแก้ไข ตัวเลขเร่งความเร็วตอนนี้คือ 30,850 นี่คือประสิทธิภาพในการคัดลอกส่วนที่แก้ไขของไฟล์เดียวนั้นมีประสิทธิภาพมากกว่าการคัดลอกไฟล์ทั้งหมด
อ็อพชัน -a
(เก็บถาวร) แสดงถึงคอลเลกชั่นของอ็อพชันอื่นๆ เหมือนกับการใช้ตัวเลือกเหล่านี้ทั้งหมด:
- r : ทำงานซ้ำๆ ผ่านแผนผังไดเร็กทอรีในไดเร็กทอรีต้นทางและคัดลอกไปยังไดเร็กทอรีปลายทาง สร้างไดเร็กทอรีหากยังไม่มีอยู่ในไดเร็กทอรี
- l : คัดลอก symlink เป็น symlink
- p : รักษาสิทธิ์ของไฟล์
- t : รักษาเวลาในการแก้ไขไฟล์
- g : รักษาสิทธิ์ของกลุ่ม
- o : รักษาความเป็นเจ้าของไฟล์
- D : คัดลอกไฟล์พิเศษและไฟล์อุปกรณ์ ไฟล์พิเศษสามารถเป็นรายการที่เน้นการสื่อสารซึ่งได้รับการปฏิบัติเหมือนไฟล์ เช่น ซ็อกเก็ตและท่อเข้าก่อนออกก่อน (fifos) ไฟล์อุปกรณ์เป็นไฟล์พิเศษที่ให้การเข้าถึงอุปกรณ์และอุปกรณ์เทียม
นี่เป็นชุดค่าผสมที่ใช้บ่อยซึ่ง rsync
จัดเตรียมตัวเลือก -a
(เก็บถาวร) เป็นวิธีชวเลขเพื่อเรียกใช้ทั้งหมด
2. คัดลอกไดเร็กทอรีไปยังไดเร็กทอรีอื่น
หากคุณดูที่คำสั่ง rsync
ก่อนหน้า คุณจะเห็นเครื่องหมายทับ “/” ต่อท้ายบนเส้นทางไฟล์ของไดเร็กทอรีต้นทาง นี่เป็นสิ่งสำคัญ มันบอกให้ rsync
คัดลอก เนื้อหา ของไดเร็กทอรี หากคุณไม่ได้ระบุเครื่องหมายทับต่อท้าย rsync
จะคัดลอกไดเรกทอรี และ เนื้อหา
rsync -av /home/dave/project-files /home/dave/Documents/
คราวนี้ชื่อไดเร็กทอรีถูกเพิ่มลงในชื่อไฟล์ตามที่ระบุไว้ หากเราดูภายในไดเร็กทอรีปลายทาง เราจะเห็นว่ามีการคัดลอกโฟลเดอร์ต้นทางพร้อมกับไฟล์ที่อยู่ภายในนั้น
ls เอกสาร/
ls เอกสาร/ไฟล์โครงการ/
3. คัดลอกไดเรกทอรีไปยังไดรฟ์อื่น
การคัดลอกไฟล์ไปยังตำแหน่งอื่นบนฮาร์ดไดรฟ์เดียวกันไม่ได้ช่วยป้องกันความล้มเหลวของไดรฟ์ หากไดรฟ์นั้นยอมแพ้ แสดงว่าคุณสูญเสียสำเนาต้นทางและปลายทางของไฟล์เหล่านั้น การคัดลอกไปยังฮาร์ดไดรฟ์อื่นเป็นวิธีที่มีประสิทธิภาพมากกว่าในการปกป้องข้อมูลของคุณ สิ่งที่เราต้องทำคือระบุเส้นทางที่ถูกต้องไปยังไดรฟ์ปลายทาง
rsync -av /home/dave/project-files /run/mount/drive2
การดูฮาร์ดไดรฟ์อื่นจะแสดงให้เราเห็นไดเร็กทอรีและไฟล์ถูกคัดลอกไปยังไดเร็กทอรี
ls run/mount/drive2/project-files/
ที่เกี่ยวข้อง: จะทำอย่างไรเมื่อฮาร์ดไดรฟ์ของคุณล้มเหลว
4. ทำแห้งก่อน
ก่อนที่เราจะดูว่า rsync
สามารถลบไฟล์อย่างมีประโยชน์สำหรับเราได้อย่างไร มาดูว่าเราจะทำให้ rsync
ทำงานแบบแห้งได้อย่างไร
ในการใช้งานแบบแห้ง rsync
จะดำเนินการตามการเคลื่อนไหวของการดำเนินการที่เราขอ แต่ไม่ได้ดำเนินการตามจริง รายงานเกี่ยวกับสิ่งที่จะเกิดขึ้นหากคำสั่งถูกดำเนินการ ด้วยวิธีนี้ เราจึงมั่นใจได้ว่าคำสั่งนั้นทำตามที่เราคาดไว้อย่างแน่นอน
ในการบังคับให้วิ่งแบบแห้ง เราใช้ตัวเลือก --dry-run
rsync -av --dry-run /home/dave/geocoder /run/mount/drive2

ไฟล์ที่จะถูกคัดลอกจะถูกระบุสำหรับเรา และเราได้รับสถิติตามปกติ ตามด้วยข้อความ (DRY RUN)
เพื่อให้เราทราบว่าไม่มีอะไรเกิดขึ้นจริง
5. การลบไฟล์ในไดเร็กทอรีปลายทาง
ตัวเลือก --delete
บอกให้ rsync
ลบไฟล์และไดเร็กทอรีในไดเร็กทอรี ปลายทาง ที่ไม่ได้อยู่ในไดเร็กทอรีต้นทาง ซึ่งหมายความว่าไดเร็กทอรีปลายทางจะเป็นสำเนาที่ถูกต้องของไดเร็กทอรีต้นทาง เราจะระมัดระวังและใช้ --dry-run
ตัวเลือกก่อน
rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2
เราได้รับแจ้งว่าไฟล์สองไฟล์จะถูกลบ หากเราแน่ใจว่าไม่สนใจว่าจะถูกลบออก เราสามารถลบ --dry-run
ตัวเลือกและดำเนินการคำสั่งได้จริง
rsync -av --delete /home/dave/geocoder /run/mount/drive2
คราวนี้เนื้อหาของไดเร็กทอรีจะถูกซิงโครไนซ์และไฟล์พิเศษสองไฟล์จะถูกลบออก
6. การลบไฟล์ต้นทาง
คุณสามารถเลือกที่จะลบไฟล์ต้นทางหลังจากการ ถ่ายโอนสำเร็จ ทำให้ rsync
ทำงานเหมือนการย้ายมากกว่าการคัดลอก หากการถ่ายโอนไม่สำเร็จ ไฟล์ต้นฉบับจะไม่ถูกลบ ตัวเลือกที่เราต้องใช้คือ --remove-source-files
rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2
โปรดทราบว่าไฟล์สามารถลบได้แม้ว่าจะไม่มีการถ่ายโอนไฟล์ก็ตาม นั่นเป็นเพราะว่าหาก rsync
ตรวจสอบ และไฟล์ทั้งหมดอยู่ในไดเร็กทอรีปลายทางแล้ว และไม่มีอะไรให้ rsync
ต้องทำ rsync
จะถือว่าการถ่ายโอนสำเร็จ
นอกจากนี้ rsync
จะลบ ไฟล์ ออกจากไดเร็กทอรีต้นทางเท่านั้น มันไม่ได้ลบไดเร็กทอรีต้นทางหรือไดเร็กทอรีย่อยใด ๆ เพียงแค่ไฟล์ในนั้น เราสามารถเห็นสิ่งนี้ได้โดยใช้ตัวเลือก -R
(แบบเรียกซ้ำ) กับ ls
บนไดเรกทอรีต้นทาง
ls -R geocoder
7. คัดลอกไฟล์ไปยังคอมพิวเตอร์ระยะไกล
ในการซิงโครไนซ์โฟลเดอร์กับคอมพิวเตอร์ระยะไกล ต้องติดตั้ง rsync
บนคอมพิวเตอร์ทั้งสองเครื่อง ตั้งค่าการสื่อสาร SSH ระหว่างคอมพิวเตอร์สองเครื่องก่อนที่คุณจะพยายามใช้ rsync
กับคอมพิวเตอร์ระยะไกล
คุณต้องสามารถเข้าสู่ระบบจากระยะไกลในฐานะผู้ใช้ปกติบนคอมพิวเตอร์ระยะไกลเพื่อให้ rsync
ทำงานได้ ไม่สำคัญว่าคุณจะใช้ ID และรหัสผ่านในการเข้าสู่ระบบ หรือถ้าคุณได้ตั้งค่าคีย์ SSH สำหรับการเข้าถึงแบบไม่ใช้รหัสผ่านที่ปลอดภัย แต่ถ้าคุณไม่สามารถเข้าสู่ระบบในฐานะผู้ใช้ rsync
จะไม่ทำงาน ทั้ง.
หากคุณเข้าสู่ระบบด้วยรหัสผ่าน rsync
จะถามรหัสผ่านให้คุณ หากคุณใช้คีย์ SSH เพื่อเข้าสู่ระบบ กระบวนการนี้จะราบรื่น
สิ่งเดียวที่คุณต้องทำคือเพิ่มชื่อบัญชีผู้ใช้และที่อยู่ IP ของคอมพิวเตอร์ระยะไกลที่จุดเริ่มต้นของเส้นทางไฟล์ปลายทาง ใช้เครื่องหมาย at “ @
” เพื่อแยกชื่อผู้ใช้ออกจากชื่อคอมพิวเตอร์หรือที่อยู่ IP และใช้เครื่องหมายทวิภาค “ :
” เพื่อแยกชื่อคอมพิวเตอร์หรือที่อยู่ IP ออกจากเส้นทางไดเรกทอรี
ในเครือข่ายทดสอบของเรา สองคำสั่งนี้เทียบเท่ากัน
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
เราได้รับข้อมูลเดียวกันกับที่เรารายงานเมื่อเราคัดลอกไฟล์ในเครื่อง
8. รวมหรือยกเว้นไฟล์หรือไดเรกทอรี
คุณอาจมีไฟล์และไดเร็กทอรีในไดเร็กทอรีต้นทางที่คุณไม่ต้องการคัดลอกไปยังคอมพิวเตอร์ปลายทาง คุณสามารถยกเว้นได้โดยใช้ตัวเลือก --exclude
ในทำนองเดียวกัน คุณสามารถเลือกที่จะรวมไฟล์และไดเร็กทอรีเฉพาะด้วยตัวเลือก --include
ที่แปลกก็คือ ถ้าคุณใช้ตัวเลือก --include
ด้วยตัวเอง ไฟล์ทั้งหมดจะถูกคัดลอกตามปกติ รวมถึงไฟล์ที่คุณรวมไว้โดยเฉพาะ ในการคัดลอกเฉพาะไฟล์ที่รวมของคุณ คุณต้อง --exclude
ทุกอย่างอื่น
คุณสามารถใช้ตัวเลือก --include
และ --exclude
ในคำสั่งได้มากเท่าที่ต้องการ แต่ให้แน่ใจว่าคุณใส่ --include
options ก่อน --exclude
options นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณมีเครื่องหมายทับต่อท้ายบนเส้นทางไฟล์ต้นทางของคุณ
คำสั่งนี้จะคัดลอกเฉพาะไฟล์ซอร์สโค้ด C และไฟล์ข้อมูล CSV ไปยังคอมพิวเตอร์ปลายทาง
rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder
ไฟล์เดียวที่คัดลอกคือไฟล์ที่เรารวมไว้โดยเฉพาะ
9. บีบอัดไฟล์ในการถ่ายโอน
ตัวเลือก -z
(บีบอัด) ทำให้ rsync
บีบอัดไฟล์ที่ถ่ายโอน พวกเขาไม่ได้จัดเก็บเป็นไฟล์บีบอัดในคอมพิวเตอร์ปลายทาง แต่จะถูกบีบอัดระหว่างการถ่ายโอนเท่านั้น สิ่งนี้สามารถเร่งการถ่ายโอนที่ยาวนานได้
rsync -avz /home/dave/geocoder /run/mount/drive2
10. ติดตามความคืบหน้า
เมื่อพูดถึงการย้ายทีมที่ยาวนาน เราสามารถเพิ่มสถิติบางอย่างเพื่อให้เราเห็นความคืบหน้าของการโอน
-P
(บางส่วน, ความคืบหน้า) ตัวเลือกจริงเพิ่มสองตัวเลือก --partial
และ --progress
ตัวเลือก --partial
บอก rsync
ให้เก็บไฟล์ที่ถ่ายโอนบางส่วนไว้หากการถ่ายโอนล้มเหลว ซึ่งจะช่วยประหยัดเวลาเมื่อเริ่มการถ่ายโอนใหม่
--progress
พิมพ์สำหรับแต่ละไฟล์ ข้อมูลที่ถ่ายโอนเป็นไบต์และเป็นเปอร์เซ็นต์ ความเร็วของการถ่ายโอน เวลาที่ใช้ จำนวนไฟล์ที่กำลังถ่ายโอน และจำนวนไฟล์ที่เหลือ
rsync -aP /home/dave/geocoder /run/mount/drive2
ผลลัพธ์เลื่อนผ่านไปอย่างรวดเร็วและอ่านยาก คุณสามารถปรับปรุงสิ่งต่าง ๆ ได้เล็กน้อยโดยลบตัวเลือก -v
(verbose) ออกจากคำสั่ง ถึงกระนั้นก็ยังยากที่จะอ่านในขณะที่มันหวือหวา
การติดตามความคืบหน้าของการถ่ายโอนโดยรวมมักจะมีประโยชน์มากกว่า คุณสามารถทำได้ด้วยตัวเลือก –info และส่งผ่าน “progress2” เป็นพารามิเตอร์
sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2
นี้ให้รายงานความคืบหน้าที่เป็นประโยชน์จริง
ชอบ cp บนเตียรอยด์
คำสั่ง rsync
นั้นรวดเร็ว ยืดหยุ่น และคุ้มค่ากับเวลาที่ใช้ในการทำความคุ้นเคย รูปแบบพื้นฐานของคำสั่ง rsync
พร้อมตัวเลือก -av
ไดเร็กทอรีต้นทาง และไดเร็กทอรีปลายทางนั้นจำไม่ยากเลย
สำหรับการใช้งานหลายกรณี เท่านั้นที่คุณต้องการ ทำใจให้สบาย แล้วที่เหลือจะมาง่ายๆ
ที่เกี่ยวข้อง: คู่มือสำหรับผู้เริ่มต้นในการซิงค์ข้อมูลกับRsync