10 ตัวอย่างที่เป็นประโยชน์ของคำสั่ง Linux rsync

เผยแพร่แล้ว: 2022-10-28
แล็ปท็อป Linux แสดง bash prompt
fatmawati achmad zaenuri/Shutterstock.com

คำสั่ง Linux rsync เป็นเครื่องมือคัดลอกไฟล์และโฟลเดอร์ซิงโครไนซ์ที่มีประสิทธิภาพ ต่อไปนี้คือกรณีการใช้งานทั่วไป 10 กรณีที่คุณสามารถนำไปใช้ให้เกิดประโยชน์กับระบบของคุณเองได้

สารบัญ

เครื่องมือ rsync

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

คุณสามารถใช้ rsync เพื่อคัดลอกไฟล์ไปยังตำแหน่งอื่นบนฮาร์ดไดรฟ์ของคุณ ไปยังฮาร์ดไดรฟ์อื่นในคอมพิวเตอร์เครื่องเดียวกัน ไปยังไดรฟ์ USB ที่เชื่อมต่อภายนอก หรือตำแหน่งที่เครือข่ายเข้าถึงได้

วิธีสำรองข้อมูลระบบ Linux ของคุณด้วย rsync
ที่เกี่ยวข้อง วิธีสำรองข้อมูลระบบ Linux ของคุณด้วยrsync

ยิ่งไปกว่านั้น 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/ 

การคัดลอกไฟล์ไปยังไดเร็กทอรีอื่นบนคอมพิวเตอร์เครื่องเดียวกันด้วย rsync

การใช้ ls ในโฟลเดอร์ "Documents" แสดงว่ามีการคัดลอกไฟล์แล้ว

แสดงรายการไฟล์ในไดเร็กทอรีเอกสาร

ในขณะที่ rsync ทำงาน ไฟล์จะแสดงรายการในขณะที่กำลังคัดลอก เราได้รับแจ้งว่า:

  • จำนวนไบต์ที่ส่ง
  • จำนวนไบต์ที่ได้รับ ก่อนที่การถ่ายโอนไฟล์จะเกิดขึ้น rsync จะต้องพิจารณาว่าไฟล์ใดต้องได้รับการถ่ายโอน ในการทำเช่นนั้น ข้อมูลบางอย่างเกี่ยวกับไฟล์บนปลายทางจะต้องถูกเรียกโดย rsync ข้อมูลนี้มีอยู่ในไบต์ที่ได้รับ
  • ความเร็วในการโอน
  • ขนาดรวมของไฟล์ที่คัดลอก
  • "การเร่งความเร็ว" นี่คืออัตราส่วนของขนาดทั้งหมดหารด้วยผลรวมของไบต์ที่ส่งและรับ ยิ่งตัวเลขนี้สูงเท่าไร การถ่ายโอนก็จะยิ่งมีประสิทธิภาพมากขึ้นเท่านั้น

เราแก้ไขไฟล์ข้อความในไดเร็กทอรีต้นทางและทำซ้ำคำสั่ง rsync

 rsync -av /home/dave/project-files/ /home/dave/Documents/ 

การคัดลอกไฟล์ไปยังไดเร็กทอรีอื่นบนคอมพิวเตอร์เครื่องเดียวกันด้วย rsync

คราวนี้ไฟล์เดียวที่ต้องอัปเดตคือไฟล์ข้อความที่เราแก้ไข ตัวเลขเร่งความเร็วตอนนี้คือ 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/ 

การคัดลอกไดเร็กทอรีและเนื้อหาไปยังไดเร็กทอรีอื่นบนคอมพิวเตอร์เครื่องเดียวกันด้วย rsync

คราวนี้ชื่อไดเร็กทอรีถูกเพิ่มลงในชื่อไฟล์ตามที่ระบุไว้ หากเราดูภายในไดเร็กทอรีปลายทาง เราจะเห็นว่ามีการคัดลอกโฟลเดอร์ต้นทางพร้อมกับไฟล์ที่อยู่ภายในนั้น

 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 

ดำเนินการรันคำสั่ง rsync แบบแห้ง

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

5. การลบไฟล์ในไดเร็กทอรีปลายทาง

ตัวเลือก --delete บอกให้ rsync ลบไฟล์และไดเร็กทอรีในไดเร็กทอรี ปลายทาง ที่ไม่ได้อยู่ในไดเร็กทอรีต้นทาง ซึ่งหมายความว่าไดเร็กทอรีปลายทางจะเป็นสำเนาที่ถูกต้องของไดเร็กทอรีต้นทาง เราจะระมัดระวังและใช้ --dry-run ตัวเลือกก่อน

 rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2 

ดำเนินการรันคำสั่ง rsync แบบแห้งซึ่งสามารถลบไฟล์ได้

เราได้รับแจ้งว่าไฟล์สองไฟล์จะถูกลบ หากเราแน่ใจว่าไม่สนใจว่าจะถูกลบออก เราสามารถลบ --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 จะถือว่าการถ่ายโอนสำเร็จ

นอกจากนี้ rsync จะลบ ไฟล์ ออกจากไดเร็กทอรีต้นทางเท่านั้น มันไม่ได้ลบไดเร็กทอรีต้นทางหรือไดเร็กทอรีย่อยใด ๆ เพียงแค่ไฟล์ในนั้น เราสามารถเห็นสิ่งนี้ได้โดยใช้ตัวเลือก -R (แบบเรียกซ้ำ) กับ ls บนไดเรกทอรีต้นทาง

 ls -R geocoder 

แผนผังไดเร็กทอรีว่างหลังจาก rsync ลบไฟล์ต้นฉบับ

7. คัดลอกไฟล์ไปยังคอมพิวเตอร์ระยะไกล

ในการซิงโครไนซ์โฟลเดอร์กับคอมพิวเตอร์ระยะไกล ต้องติดตั้ง rsync บนคอมพิวเตอร์ทั้งสองเครื่อง ตั้งค่าการสื่อสาร SSH ระหว่างคอมพิวเตอร์สองเครื่องก่อนที่คุณจะพยายามใช้ rsync กับคอมพิวเตอร์ระยะไกล

วิธีสร้างและติดตั้งคีย์ SSH จาก Linux Shell
ที่เกี่ยวข้อง วิธีการสร้างและติดตั้งคีย์ SSH จาก Linux Shell

คุณต้องสามารถเข้าสู่ระบบจากระยะไกลในฐานะผู้ใช้ปกติบนคอมพิวเตอร์ระยะไกลเพื่อให้ 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 

การคัดลอกไฟล์ไปยังคอมพิวเตอร์ระยะไกลผ่าน SSH ด้วย rsync

เราได้รับข้อมูลเดียวกันกับที่เรารายงานเมื่อเราคัดลอกไฟล์ในเครื่อง

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

ใช้ rsync เพื่อคัดลอกไฟล์ที่เลือกไปยังฮาร์ดไดรฟ์อื่นบนคอมพิวเตอร์เครื่องเดียวกัน

ไฟล์เดียวที่คัดลอกคือไฟล์ที่เรารวมไว้โดยเฉพาะ

9. บีบอัดไฟล์ในการถ่ายโอน

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

 rsync -avz /home/dave/geocoder /run/mount/drive2 

บีบอัดไฟล์เมื่อถ่ายโอนด้วยตัวเลือก -z rsync

10. ติดตามความคืบหน้า

เมื่อพูดถึงการย้ายทีมที่ยาวนาน เราสามารถเพิ่มสถิติบางอย่างเพื่อให้เราเห็นความคืบหน้าของการโอน

-P (บางส่วน, ความคืบหน้า) ตัวเลือกจริงเพิ่มสองตัวเลือก --partial และ --progress ตัวเลือก --partial บอก rsync ให้เก็บไฟล์ที่ถ่ายโอนบางส่วนไว้หากการถ่ายโอนล้มเหลว ซึ่งจะช่วยประหยัดเวลาเมื่อเริ่มการถ่ายโอนใหม่

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

 rsync -aP /home/dave/geocoder /run/mount/drive2 

การใช้ตัวเลือก -P เพื่อให้สถิติสำหรับการส่งแต่ละไฟล์

ผลลัพธ์เลื่อนผ่านไปอย่างรวดเร็วและอ่านยาก คุณสามารถปรับปรุงสิ่งต่าง ๆ ได้เล็กน้อยโดยลบตัวเลือก -v (verbose) ออกจากคำสั่ง ถึงกระนั้นก็ยังยากที่จะอ่านในขณะที่มันหวือหวา

สถิติการโอนย้ายไฟล์แต่ละไฟล์

การติดตามความคืบหน้าของการถ่ายโอนโดยรวมมักจะมีประโยชน์มากกว่า คุณสามารถทำได้ด้วยตัวเลือก –info และส่งผ่าน “progress2” เป็นพารามิเตอร์

 sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2 

สถิติสำหรับการถ่ายโอน rsync โดยรวม

นี้ให้รายงานความคืบหน้าที่เป็นประโยชน์จริง

ชอบ cp บนเตียรอยด์

คำสั่ง rsync นั้นรวดเร็ว ยืดหยุ่น และคุ้มค่ากับเวลาที่ใช้ในการทำความคุ้นเคย รูปแบบพื้นฐานของคำสั่ง rsync พร้อมตัวเลือก -av ไดเร็กทอรีต้นทาง และไดเร็กทอรีปลายทางนั้นจำไม่ยากเลย

สำหรับการใช้งานหลายกรณี เท่านั้นที่คุณต้องการ ทำใจให้สบาย แล้วที่เหลือจะมาง่ายๆ

ที่เกี่ยวข้อง: คู่มือสำหรับผู้เริ่มต้นในการซิงค์ข้อมูลกับRsync