ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างการใช้และln -s mount --bindในสถานการณ์พื้นฐานฉันสามารถใช้ทั้งสองเพื่อเข้าถึงหนึ่งไดเรกทอรีจากที่อื่น ในสถานการณ์ใดที่ทั้งสองจะทำงานแตกต่างกันอย่างไร
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างการใช้และln -s mount --bindในสถานการณ์พื้นฐานฉันสามารถใช้ทั้งสองเพื่อเข้าถึงหนึ่งไดเรกทอรีจากที่อื่น ในสถานการณ์ใดที่ทั้งสองจะทำงานแตกต่างกันอย่างไร
คำตอบ:
พวกเขาจะทำงานแตกต่างกันอย่างน้อยสองกรณี:
A) ซึ่งมีอย่างอื่น ( B) ติดตั้งอยู่ การเชื่อมโยงจะแสดงเนื้อหาของภูเขาเป้าหมาย (คนB) แทนของเดิม ( A)นอกจากนี้คุณสามารถผูกติดไดเรกทอรีหรือไฟล์บนไดเรกทอรีหรือไฟล์ที่มีอยู่แล้วปิดบังเนื้อหาต้นฉบับ (การแสดงเนื้อหาต้นฉบับไม่สามารถเข้าถึงได้เว้นแต่ว่าต้นฉบับถูกผูกติดอยู่ที่อื่น) ลิงก์สัญลักษณ์ต้องการให้ย้ายหรือลบต้นฉบับ
ดีln -sสร้างลิงค์สัญลักษณ์ในขณะที่mount --bindสร้างภูเขา
ลิงก์สัญลักษณ์เป็นไฟล์ชนิดพิเศษ ถ้าคุณทำเช่นln -s /var/target /var/linkนั้น/var/linkจะเป็นไฟล์ที่มีพา ธ " /var/target" อยู่ในนั้น ข้อแตกต่างระหว่างลิงก์สัญลักษณ์และไฟล์ทั่วไปคือเมื่อโปรแกรมพยายามดำเนินการกับลิงก์สัญลักษณ์การดำเนินการมักจะดำเนินการกับเป้าหมายแทนที่จะเป็นไฟล์ ดังนั้นถ้าคุณทำเช่นls /var/linkนี้lsโปรแกรมจะพยายามรับรายชื่อไดเรกทอรี/var/linkแต่จะได้รับรายชื่อไดเรกทอรี/var/targetแทน
ลิงก์สัญลักษณ์ยังคงเป็นเพียงไฟล์ พวกเขาสามารถเปลี่ยนชื่อและลบและแจ๊สทั้งหมดที่ โปรดทราบว่าคุณไม่สามารถสร้างลิงก์สัญลักษณ์ (หรือไฟล์ธรรมดาสำหรับเรื่องนั้น) ที่เรียกว่า/var/linkมีไฟล์ที่ถูกเรียก/var/linkแล้ว คุณต้องกำจัดมันเสียก่อน
การเมาท์ไม่ใช่ไฟล์ เป็นเรคคอร์ดที่เคอร์เนลเก็บไว้ในหน่วยความจำ ถ้าคุณทำmount --bind /var/target /var/mountเคอร์เนลจะบันทึกความจริงที่ว่าตอนนี้เป็นชื่อใหม่สำหรับ/var/mount /var/target(ฉันไม่ทราบรายละเอียดโดยเฉพาะฉันไม่ทราบว่าการติดตั้งบางสิ่งในไดเรกทอรีย่อย/var/targetจะทำให้ปรากฏขึ้น/var/mountด้วยหรือไม่หรือทำไมหรือไม่ทำไมการแก้ไขคำตอบนี้จะได้รับการชื่นชม) ดังนั้นตอนนี้ ถ้าคุณทำls /var/mountสิ่งเดียวกันจะเกิดขึ้นราวกับว่าคุณทำls /var/targetเพราะ/var/mountและ/var/targetเป็นไดเรกทอรีเดียวกัน
เมาท์ไม่ใช่ไฟล์ /var/mountผมไม่ทราบว่าสิ่งที่จะเกิดขึ้นถ้าคุณพยายามที่จะเปลี่ยนชื่อหรือลบ โปรดทราบว่าคุณไม่สามารถกำหนดอะไร/var/mount เว้นแต่/var/mountมีอยู่แล้วไดเรกทอรีที่
ln -s ../../myfile .เหมือนที่ หากคุณย้ายไปที่ไดเรกทอรีอื่นมันจะชี้ไปที่อื่นเพราะเป็นลิงก์ที่เกี่ยวข้อง สิ่งนี้จะมีประโยชน์หากคุณต้องการแบ็คอัพทรีย่อยและยังคงมีลิงค์ทำงานอยู่ในการสำรองข้อมูล
นอกจากนี้ ln -s จะสามารถรีบูตเครื่องได้ ในขณะที่ mount - ผูกจะไม่เว้นแต่ว่าคุณจะแก้ไข / etc / fstab เพื่อให้มันขัดขืน
นอกจากคำตอบอื่น ๆ ระบบไม่อนุญาตให้เชื่อมโยงไปยังไดเรกทอรีอย่างหนัก:
# ln mydir mpoint
ln: `mydir': hard link not allowed for directory
เมานต์ช่วยให้คุณสร้างลิงก์ได้ยากเช่นชื่อสองชื่อขึ้นไปสำหรับinodeเดียวกัน:
# mount -B mydir/ mpoint/
# ls -d -i *
807175 mpoint/ 807175 mydir/
(หนึ่งสามารถค้นหาช่วยสำรอง snapshot ด้วย rsync รุ่นเก่า)
นอกจากนี้โปรดทราบว่าการติดตั้งนี้ไม่สมบูรณ์:
# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)
ดังนั้นเมานต์ยังคงอ่านและเขียนแม้ว่าฉันจะขอตัวเลือก ro (อ่านอย่างเดียว)
rm -rmount --bindด้วยlnก็เอาการเชื่อมโยงในขณะที่หา--bindก็มีผลเช่นเดียวกับการทำงานของrm -rเป้าหมาย ไม่ดีอย่างที่ฉันพบเมื่อไม่นานมานี้ก่อนที่จะสร้างเซิร์ฟเวอร์ของฉันขึ้นมาใหม่ ...