rsync (ร การซิงโครไนซ์ ) คำสั่งเป็นเครื่องมือคัดลอกไฟล์ที่สามารถซิงโครไนซ์ไฟล์ระหว่างดิสก์จัดเก็บข้อมูลในเครื่องและบนเครือข่ายได้
เป็นที่แพร่หลายเพราะมันดีมาก โดยทั่วไปจะใช้สำหรับการสำรองไฟล์ ทำให้เซิร์ฟเวอร์ไฟล์อัปเดตซึ่งกันและกัน และสำหรับการปรับใช้โค้ดและทรัพย์สินสำหรับเว็บแอปไปยังเซิร์ฟเวอร์
rsync สามารถและจะคัดลอกเกือบทุกไฟล์ที่มองเห็น และจะซิงโครไนซ์ตามขนาดไฟล์และวันที่แก้ไข เพื่อดูว่ามีอะไรเปลี่ยนแปลงและต้องอัปเดตอะไรบ้าง
rsync คำสั่งนั้นยิ่งใหญ่ และ เราจะให้คุณเริ่มต้นใช้งานแอปพลิเคชันที่ใช้งานได้จริง ซึ่งจะครอบคลุมสถานการณ์การใช้งานทั่วไปในคู่มือนี้ .
ไวยากรณ์
rsync OPTIONS SOURCE DESTINATION
โปรดทราบว่า:
- OPTIONS คือรายการตัวเลือกจากรายการด้านล่าง คั่นด้วยการเว้นวรรค
- SOURCE คือพาธไปยังซอร์สของไฟล์หรือโฟลเดอร์ที่จะซิงโครไนซ์และสามารถรวมรายละเอียดสำหรับรีโมตโฮสต์
- DESTINATION คือเส้นทางไปยังปลายทางที่คุณต้องการซิงโครไนซ์ไฟล์หรือโฟลเดอร์ไปและสามารถรวมรายละเอียดสำหรับโฮสต์ระยะไกลได้
- แหล่งที่มาและปลายทางต้องอยู่ในลำดับ!
ตัวเลือก
ต่อไปนี้คือตัวเลือกที่ใช้กันทั่วไปสำหรับ rsync ตรงจากคู่มือ:
สิ่งที่ต้องคัดลอก:
-r, --recursive Recurse into directories -R, --relative Use relative path names --exclude=PATTERN Exclude files matching PATTERN --exclude-from=FILE Read exclude patterns from FILE -I, --ignore-times Don't exclude files that match length and time --size-only Only use file size when determining if a file should be transferred [email protected] --modify-window=NUM Timestamp window (seconds) for file match (default=0) --include=PATTERN Don't exclude files matching PATTERN --include-from=FILE Read include patterns from FILE
วิธีการคัดลอก:
-n, --dry-run Perform a trial run with no changes made -l, --links Copy symlinks as symlinks -L, --copy-links Transform symlink into referent file/dir --copy-unsafe-links Only "unsafe" symlinks are transformed --safe-links Ignore links outside the destination tree --munge-links Munge symlinks to make them safer -H, --hard-links Preserve hard links --devices Preserve device files (super-user only) --specials Preserve special files -D, --devices --specials Preserve devices (super-user only) +files -g, --group Preserve group -o, --owner Preserve owner (super-user only) -p, --perms Preserve permissions --remove-source-files Sender removes synchronized files (non-dir) -t, --times Preserve times -S, --sparse Handle sparse files efficiently -x, --one-file-system Don't cross filesystem boundaries -B, --block-size=SIZE Force a fixed checksum block-size (default 700) -e, --rsh=COMMAND Specify rsh replacement --rsync-path=PATH Specify path to rsync on the remote machine --numeric-ids Don't map uid/gid values by user/group name --timeout=SECONDS Set IO timeout in seconds -W, --whole-file Copy whole files, no incremental checks
ตัวเลือกปลายทาง:
-a, --archive Archive mode equals -rlptgoD (no -H,-A,-X) -b, --backup Make backups (see --suffix & --backup-dir) --backup-dir=DIR Make backups into this directory -z, --compress Compress file data during the transfer -c, --checksum Skip based on checksum, not mod-time & size -C, --cvs-exclude Auto ignore files in the same way CVS does --existing Only update files that already exist --delete Delete files that don't exist on the sending side --delete-excluded Also delete excluded files on the receiving side --delete-after Receiver deletes after transfer, not during --force Force deletion of directories even if not empty --ignore-errors Delete even if there are IO errors --max-delete=NUM Don't delete more than NUM files --log-file-format=FMT Log file transfers using specified format --partial Keep partially transferred files --progress Show progress during transfer -P Equivalent to --partial --progress --stats Give some file transfer stats -T --temp-dir=DIR Create temporary files in directory DIR --compare-dest=DIR Also compare destination files relative to DIR -u, --update Update only (don't overwrite newer files)
ตัวเลือกอื่นๆ:
--address=ADDRESS Bind to the specified address --blocking-io Use blocking IO for the remote shell --bwlimit=KBPS Limit I/O bandwidth, KBytes per second --config=FILE Specify alternate rsyncd.conf file (daemon) --daemon Run as a rsync daemon --no-detach Do not detach from the parent (daemon) --password-file=FILE Get daemon-access password from FILE --port=PORT Specify alternate rsyncd port number -f, --read-batch=FILE Read batch file -F, --write-batch=FILE Write batch file --version Print version number -v, --verbose Increase verbosity -q, --quiet Decrease verbosity -4, --ipv4 Prefer IPv4 -6, --ipv6 Prefer IPv6 -h, --help Show this help screen
สำหรับรายการตัวเลือกทั้งหมด โปรดดูที่ rsync คู่มือผู้ใช้โดยเรียกใช้:
man rsync
ตัวอย่าง
ฉันจะไม่ทำซ้ำความหมายของแต่ละตัวเลือกด้านล่าง – ตรวจสอบให้แน่ใจว่าคุณกลับไปที่รายการด้านบน หากคุณไม่แน่ใจว่าตัวเลือกนั้นหมายถึงอะไร – คุณไม่ต้องการเรียกใช้คำสั่งที่ไม่ถูกต้องและทำให้ข้อมูลสูญหาย!
Local to Local (ไฟล์เดียว)
ต่อไปนี้คือวิธีการซิงโครไนซ์ไฟล์เดียวจากไดเรกทอรีหนึ่งไปยังอีกไดเรกทอรีหนึ่งในเครื่องท้องถิ่นโดยใช้ rsync :
rsync -zvh /path/to/my-file.tar /path/to/destination/
จากที่นี่ ตัวอย่างทั้งหมดจะเน้นที่การซิงค์ไดเร็กทอรี เนื่องจากเป็นสถานการณ์การใช้งานทั่วไปสำหรับ rsync
Local to Local (ไดเรกทอรี)
ซิงโครไนซ์ไฟล์ทั้งหมดจากไดเร็กทอรีหนึ่งไปยังไดเร็กทอรีอื่นในเครื่องเดียวกัน:
rsync -avzh /path/to/source /path/to/destination
สิ่งที่ -avzh คืออะไร? มันเป็นตัวเลือกมากมายที่รวมกัน เป็นวิธีที่เร็วกว่าในการพิมพ์ -a -v -z -h
โลคัลไปยังรีโมต (ไดเร็กทอรี)
ซิงโครไนซ์ไฟล์ทั้งหมดจากไดเร็กทอรีต้นทางในเครื่องไปยังปลายทางบนคอมพิวเตอร์ระยะไกลผ่านเครือข่าย:
rsync -avz /path/to/source/ [email protected]:/path/at/destination/
โปรดทราบว่า:
- ชื่อผู้ใช้ เป็นผู้ใช้บนระบบระยะไกล
- /path/to/source/ เป็นเส้นทางไปยังไดเร็กทอรีต้นทางบนเครื่องคอมพิวเตอร์
- 192.168.1.11 คือที่อยู่ IP ของระบบระยะไกล – คุณสามารถใช้ที่อยู่ IP หรือชื่อโฮสต์
- /path/at/destination/ เป็นเส้นทางบนระบบไฟล์ระยะไกล
- การซิงโครไนซ์จะเกิดขึ้นโดยใช้ rsync ภูต
โลคัลไปยังรีโมตโดยใช้ SSH (ไดเร็กทอรี)
ที่ -e ตัวเลือกช่วยให้คุณระบุโปรโตคอลที่ใช้โดย rsync ทำให้เราสามารถระบุได้ว่าต้องการโอนไฟล์โดยใช้ SSH อย่างปลอดภัย:
rsync -avzh -e ssh /path/to/source/ [email protected]:/path/at/destination/
รีโมตไปยังโลคัล (ไดเร็กทอรี)
ซิงโครไนซ์ไฟล์ทั้งหมดจากไดเร็กทอรีต้นทางบนคอมพิวเตอร์ระยะไกลไปยังปลายทางบนเครื่องคอมพิวเตอร์ผ่านเครือข่าย:
rsync -avzh [email protected]:/path/to/source /path/to/destination
โปรดทราบว่า:
- ชื่อผู้ใช้ เป็นผู้ใช้บนระบบระยะไกล
- 192.168.1.11 คือที่อยู่ IP ของระบบระยะไกล – คุณสามารถใช้ที่อยู่ IP หรือชื่อโฮสต์
- /path/to/source เป็นเส้นทางบนระบบไฟล์ระยะไกล
- /path/to/destination เป็นปลายทางบนคอมพิวเตอร์ท้องถิ่น
- การซิงโครไนซ์จะเกิดขึ้นโดยใช้ rsync ภูต
รีโมตไปยังโลคัลโดยใช้ SSH (ไดเรกทอรี)
rsync -avzh -e ssh [email protected]:/path/to/source /path/to/destination
คุณยังสามารถซิงค์ไฟล์เดียวจากในเครื่องไปยังระยะไกล จากระยะไกลไปยังภายในเครื่อง และใช้ SSH ได้เช่นเดียวกับที่เราได้แสดงไว้กับไดเรกทอรี
สิ่งอื่น ๆ ที่ควรพิจารณาเมื่อซิงโครไนซ์
พิจารณาแบนด์วิดท์
หากคุณกำลังซิงโครไนซ์ทางอินเทอร์เน็ต คุณอาจต้องการจำกัดแบนด์วิดท์ที่ใช้เพื่อไม่ให้บริการอื่นๆ ในเครือข่ายของคุณช้าลง:
rsync -avz --bwlimit 512 /path/to/source/ [email protected]:/path/at/destination/
พิจารณาการลบ
หากไฟล์หรือโฟลเดอร์ถูกลบที่ต้นทาง แต่มีอยู่ที่ปลายทาง คุณอาจต้องการลบไฟล์หรือโฟลเดอร์ที่ปลายทางเพื่อให้เป็นมิเรอร์ที่แน่นอนของแหล่งที่มา ตรวจสอบให้แน่ใจเสมอว่าคุณต้องการลบข้อมูลก่อนที่จะใช้ตัวเลือกนี้:
rsync -avz --delete /path/to/source/ [email protected]:/path/at/destination/
รวมหรือยกเว้นไฟล์
รวมและแยกไฟล์โดยจับคู่รูปแบบไฟล์ – หากมีไฟล์ที่คุณไม่ต้องการซิงค์ ไฟล์เหล่านั้นจะถูกละทิ้ง:
rsync -avz -e ssh --exclude '*' --include 'keep*' /path/to/source/ [email protected]:/path/at/destination/
คำสั่ง rsync นี้จะซิงค์ไฟล์และไดเร็กทอรีเท่านั้น ซึ่งเริ่มต้นด้วย 'keep-' และไม่รวมไฟล์และไดเร็กทอรีอื่นๆ ทั้งหมด (*)
พิจารณาการวิ่งแบบแห้ง
A วิ่งแห้ง จะพิมพ์ไฟล์ที่จะมีการเปลี่ยนแปลง แต่จริงๆ แล้วไม่ใช่ do อะไรก็ได้ – จะไม่มีการซิงโครไนซ์หรือแก้ไขไฟล์ ดังนั้นคุณจึงสามารถทดลองกับตัวเลือกต่างๆ และดูเอฟเฟกต์ได้:
rsync -avz --dry-run /path/to/source/ [email protected]:/path/at/destination/
บทสรุป
เมื่อย้ายไฟล์จำนวนมากในระบบของคุณ ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบอินพุตของคุณก่อนที่จะกดปุ่ม Enter คุณคงไม่อยากซิงโครไนซ์ในทิศทางที่ไม่ถูกต้องและลบไฟล์สำคัญ!
ดูบทความอื่นๆ ของเราสำหรับคำสั่ง Linux Shell!