เคยมีเหตุผลที่จะใช้ SCP แทน rsync หรือไม่?


61

มีเหตุผลที่จะใช้scpแทนrsyncหรือไม่? ฉันไม่เห็นเหตุผลที่จะใช้scpอีกครั้งrsyncทำทุกอย่างที่scpทำได้ด้วยความปลอดภัยมากขึ้น (สามารถรักษา symlink ได้ ฯลฯ )


6
คำตอบสั้น ๆ : ไม่มี scp ไม่เป็นอันตราย
Shadur

2
@Shadur scp เป็นอันตรายในกรณีที่เขียนทับไฟล์เป้าหมายที่มีอยู่โดยค่าเริ่มต้น ดังนั้น rsync แต่อย่างน้อยก็ช่วยจำกัดความเสียหายที่อาจเกิด-uขึ้นได้
Gilles

3
@Gilles เช่นเดียวกับเครื่องมือใด ๆ คุณต้องเข้าใจสิ่งที่มันทำและวิธีการใช้อย่างปลอดภัย
อเล็กซ์แชมเบอร์เลน

8
ในบริบทนั้นปกติcpและrmจะถือว่า "เป็นอันตราย" - และหากคุณกำหนด "อันตราย" เป็น "สามารถทำให้ฉันเข้าใจได้ถ้าฉันทำอะไรโง่ ๆ " rsyncจะไม่เป็นอันตรายน้อยลง
Shadur

1
สำหรับระบบที่ไม่ได้rsyncติดตั้งการใช้rsyncจะไม่สามารถทำได้
Kusalananda

คำตอบ:


45

scp มีวิธีการ cp like เพื่อคัดลอกไฟล์จากเครื่องหนึ่งไปยังเครื่องระยะไกลผ่านการเชื่อมต่อ SSH ที่ปลอดภัย

rsync ช่วยให้คุณสามารถซิงค์โฟลเดอร์ระยะไกลได้

พวกเขาเป็นโปรแกรมที่แตกต่างกันและทั้งสองมีประโยชน์ scp ปลอดภัยเสมอในขณะที่ rsync ต้องเดินทางผ่าน SSH เพื่อความปลอดภัย


9
อีกทั้งค่อนข้างมั่นใจว่าจะต้องติดตั้ง rsync ที่ปลายอีกด้านหนึ่ง
ckhan

3
@ckhan ไม่สามารถคัดลอกได้โดยไม่ต้องมีอะไรติดตั้งในอีกด้านหนึ่งมันจะมีประสิทธิภาพน้อยลง
mikebloch

2
ฉันชอบความเรียบง่ายของ SCP
Alex Chamberlain

2
@mikebloch คุณทำเช่นนั้นได้อย่างไร มันเป็นคุณสมบัติใหม่หรือไม่? ลองใช้สิ่งนี้โดยใช้รุ่น 3.0.9 และมันก็บ่นว่าหาไม่ได้rsyncบนรีโมต
Alexios

1
@mikebloch จะต้องติดตั้งบนเซิร์ฟเวอร์เพื่อทำการตรวจสอบการคำนวณซึ่งสามารถเพิ่มโหลด cpu จำนวนมากให้กับเซิร์ฟเวอร์ นี่คือเหตุผลที่เว็บไซต์ขนาดใหญ่ส่วนใหญ่ไม่รองรับและทำไมจึงzsyncถูกสร้างเป็นทางเลือก
psusi

19

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

ฉันใช้ scp หากฉันต้องการถ่ายโอนไฟล์หรือไดเรกทอรีหนึ่งหรือสองไฟล์ ฉันไปที่ rsync สำหรับข้อมูลขนาดหลาย GB


3
อาจมีค่าเพิ่มเติมที่การ--partialตั้งค่าสถานะมีประโยชน์เมื่อถ่ายโอนไฟล์ขนาดใหญ่ rsyncจะรับที่ที่มันค้างไว้ภายในไฟล์แทนที่จะเริ่มไฟล์นั้นอีกครั้ง
Flup

@Flup ที่กล่าวถึง rsync จะไม่ปล่อยให้ไฟล์อยู่ระหว่างการขนส่งเพื่อให้คุณกลับมาทำงานต่อได้เว้นแต่คุณจะใช้ตัวเลือก - บางส่วน ไฟล์เหล่านี้จะถูกซ่อนไว้ในไดเรกทอรีเป้าหมายเป็นค่าเริ่มต้น คุณสามารถใช้ --partial-dir เพื่อวางไฟล์เหล่านี้ทั้งหมดในไดเรกทอรีเดียว
Lester Cheung

ดีrsync -vP username@host:/path/to/file .จะทำเช่นนี้มากเกินไป ดูคำตอบนี้ในStackoverflow
Devesh Saini

9

rsync : โอนสันดอน (ใช้ของเดลต้าการโอน Algorithm ) ระหว่าง:

  1. โฮสต์ท้องถิ่นและระยะไกล

scp : โอนไฟล์ทั้งหมดระหว่าง:

  1. โฮสต์ท้องถิ่นและระยะไกล
  2. รีโมตและโฮสต์รีโมต

สรุป: scpสามารถถ่ายโอนไฟล์ระหว่างโฮสต์ระยะไกลสองเครื่องในขณะที่rsyncไม่รองรับ


rsync สามารถถ่ายโอนไฟล์ระหว่างสองโฮสต์ระยะไกล ในความเป็นจริงจะเทียบเท่ากับrsync a host:b scp a host:b
brandizzi

นั่นคือสิ่งที่ฉันเขียน rsync สามารถถ่ายโอนเดลต้าระหว่างโฮสต์โลคัลและรีโมต แต่ scp ไม่ จำกัด เพียงแค่นั้นมันสามารถโอนย้ายเดลต้าระหว่างโฮสต์รีโมตสองเครื่อง @brandizzi
Devesh Saini

2

ผู้ใช้ Chris ที่ Webhosting Talkเขียนว่า:

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


0

scpง่ายต่อการใช้เนื่องจากใช้อาร์กิวเมนต์น้อยกว่า ฉันจับ myselv โดยใช้ scp แทนrsyncถ้าฉันถ่ายโอนไฟล์เดียว เป็นไปได้ว่าฉันขี้เกียจที่จะกำหนดนามแฝงเพื่อ rsync ... ;-)


1
อืมทำไมเป็นเช่นนั้น rsync a host:bเทียบเท่ากับscp a host:bจำนวนอาร์กิวเมนต์ที่เท่ากัน
mikebloch

1
@mikebloch อีกสองตัวอักษรเพื่อพิมพ์ ... ;-) ในอดีตฉันต้องใส่ "-e ssh -a" เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง ตอนนี้ "-e ssh" เป็นค่าเริ่มต้นนี่อาจเป็นเกมอื่น
นิลส์

0

เครดิตให้กับ @tomrunia ที่https://gist.github.com/KartikTalwar/4393116

rsync -aHAXxv --numeric-ids --delete --progress \
  -e "ssh -T -c aes128-gcm@openssh.com -o Compression=no -x" \
  [source_directory] user@hostname:[target_directory]/

ให้ความสนใจกับ--deleteไม่ได้ใช้มันถ้าคุณต้องการที่จะเก็บไฟล์ภายนอกใน dirs ปลายทาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.