มีความแตกต่างระหว่างการเชื่อมโยงกับ cp -l หรือ ln หรือไม่?


15

ฉันใช้รูปแบบการสำรองข้อมูลโดยใช้ rsync และ hardlinks ฉันรู้ว่าฉันสามารถใช้ link-dest กับ rsync เพื่อทำลิงก์ได้ แต่ฉันเห็นการใช้ "cp -l" ก่อนหน้า "link-dest" ถูกใช้ใน rsync อีกวิธีในการเชื่อมโยงที่ฉันรู้จักคือ "ln"

ดังนั้นคำถามของฉันคือจากความอยากรู้: มีความแตกต่างในการทำลิงก์โดยใช้ "cp -l" เมื่อเทียบกับการใช้ "ln" หรือไม่?


ลิงก์แยกไม่ออก
rici

คุณหมายถึงว่าไม่มีความแตกต่าง? พวกเขาสามารถใช้แทนกันได้?
twan163

ฉันวิ่งทดสอบตัวเองเล็กน้อย แต่ไม่เห็นความแตกต่างระหว่างสองสิ่งนี้ตั้งแต่แรกเห็น
twan163

cp: illegal option -- lคุณแน่ใจหรือไม่ว่า cp มีตัวเลือก l
Tom

คำตอบ:


16

ผลลัพธ์ของทั้งคู่จะต้องเหมือนกันในกรณีที่ฮาร์ดลิงก์ถูกสร้างขึ้นในไฟล์ต้นฉบับ

ความแตกต่างอยู่ในการใช้งานที่ตั้งใจและดังนั้นตัวเลือกที่มีให้สำหรับแต่ละคำสั่ง ตัวอย่างเช่นcpสามารถใช้การเรียกซ้ำในขณะที่lnไม่สามารถ:

cp -lr <src> <target>

จะสร้างการเชื่อมโยงอย่างหนักในไฟล์ทั้งหมดใน<target> <src>(มันจะสร้างไดเรกทอรีใหม่ไม่ได้เชื่อมโยง) ผลที่ได้จะเป็นไปได้ว่าภายใต้โครงสร้างไดเรกทอรีจะมีลักษณะเหมือนกันกับหนึ่งภายใต้<target> <src>มันจะแตกต่างจากcp -r <src> <target>ที่ใช้หลังจะคัดลอกแต่ละไฟล์และโฟลเดอร์และให้แต่ละใหม่inodeในขณะที่ก่อนหน้านี้เพียงแค่ใช้ลิงค์ฮาร์ดในไฟล์และจึงเพิ่มLinksจำนวนของพวกเขา

เมื่อใช้เพื่อคัดลอกไฟล์เดียวเช่นในตัวอย่างของคุณผลลัพธ์จะเหมือนกัน


ถ้าฉันเข้าใจถูกต้อง "cp -lr" จะสร้างฮาร์ดลิงก์สำหรับไฟล์ทั้งหมด แต่ถ้ามีไดเรกทอรีที่ขาดหายไปใน <target> สิ่งเหล่านี้จะถูกสร้างขึ้นใหม่ (เช่นไม่มีฮาร์ดลิงก์ไปยังไดเรกทอรีใน <target>)?
twan163

ใช่ที่ถูกต้อง. คุณไม่สามารถสร้างฮาร์ดลิงก์ไปยังไดเรกทอรี ดังนั้นเพื่อที่จะรักษาโครงสร้างไฟล์ / ไดเรกทอรีมันจะกลายเป็นฮาร์ดลิงก์สำหรับไฟล์ภายในไดเรกทอรี 'ของจริง'
garethTheRed

เกี่ยวกับพฤติกรรมของ "cp -lr": ฮาร์ดลิงก์สำหรับไฟล์ ... ไดเรกทอรีใหม่สำหรับไดเรกทอรี ดูเหมือนจะแปลกเล็กน้อย แต่ฉันคิดว่าพฤติกรรม "แปลก" นี้เป็นผลข้างเคียงของข้อ จำกัด (ไม่มีฮาร์ดลิงก์ของไดเรกทอรี) ||| ยัง FYI สำหรับการอ้างอิงนี่คือการเชื่อมโยงบางข้อมูลเกี่ยวกับ hardlinks ไม่ได้รับอนุญาต directoreis ref1 จาก askubuntuและREF2 จาก unix.stackexchange
เทรเวอร์บอยด์สมิ ธ

2

ลิงก์ใช้การเรียกระบบน้อยที่สุดตามด้วยlnและcpสุดท้าย:

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

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