ถ้าคุณทำrm myFileที่myFileเป็นลิงค์ที่ยากจะเกิดอะไรขึ้น
ถ้าคุณทำrm myFileที่myFileเป็นลิงค์ที่ยากจะเกิดอะไรขึ้น
คำตอบ:
ใน Unix ไฟล์ปกติทั้งหมดคือฮาร์ดลิงก์ hardlinks ใน Unix (และส่วนใหญ่ (ทั้งหมด?)) inodeระบบไฟล์ที่มีการอ้างอิงถึงสิ่งที่เรียกว่า inodeมีเคาน์เตอร์อ้างอิงเมื่อคุณมี "การเชื่อมโยง" หนึ่งแฟ้ม (ซึ่งเป็นวิธีการทำงาน operandi ปกติ) เคาน์เตอร์คือ 1. เมื่อคุณสร้างที่สองสามสี่ลิงก์ ฯลฯ เคาน์เตอร์จะเพิ่มขึ้น (เพิ่มขึ้น) แต่ละ เวลาโดยหนึ่ง เมื่อคุณลบ ( rm) ลิงค์เคาน์เตอร์จะลดลง (ลดลง) หนึ่งรายการ หากตัวนับลิงก์ถึง 0 ระบบไฟล์จะลบinodeและทำเครื่องหมายพื้นที่ที่พร้อมใช้งาน
ในระยะสั้นตราบใดที่คุณไม่ได้ลบลิงค์สุดท้ายไฟล์จะยังคงอยู่
Edit:ไฟล์ที่จะยังคงอยู่แม้ว่าการเชื่อมโยงที่ผ่านมาจะถูกลบออก นี่เป็นวิธีหนึ่งในการรับรองความปลอดภัยของข้อมูลที่อยู่ในไฟล์ไม่สามารถเข้าถึงได้โดยกระบวนการอื่น ๆ การลบข้อมูลออกจากระบบไฟล์นั้นเสร็จสิ้นก็ต่อเมื่อข้อมูลนั้นมี 0 ลิงก์ที่เชื่อมโยงกับข้อมูลดังกล่าวในข้อมูลเมตาและไม่ได้ถูกใช้โดยกระบวนการใด ๆ
IMHO นี้เป็นวิธีที่ง่ายที่สุดในการทำความเข้าใจฮาร์ดลิงก์ (และความแตกต่างจากซอฟต์ลิงค์)
unlinkเอ็ด
/procเป็นระบบไฟล์แยกต่างหาก (เสมือน)
unlink()เพื่อลบไฟล์ทำให้ฉันงุนงงไม่สิ้นสุดเมื่อฉันเริ่มเล่นกับการเขียนโปรแกรม C บน MS-DOS บางครั้งย้อนกลับไปในช่วงครึ่งแรกของปี 1990 :)
การทดสอบง่ายกว่าที่ฉันคิด: ฉันสร้างไฟล์ข้อความแล้วเชื่อมโยงกับไฟล์นั้นอย่างหนัก การลบฮาร์ดลิงก์ไม่ได้เป็นการลบไฟล์ที่ฮาร์ดลิ้งค์ไปและไฟล์ที่ลิงค์ไปยังคงอยู่
ไฟล์ทั้งหมดในดิสก์ของคุณเป็นตัวชี้ไปยังข้อมูลจริงในไดรฟ์ของคุณ

เมื่อคุณสร้างฮาร์ดลิงก์สำหรับไฟล์นั้นไฟล์ hardlink-ed จะชี้ไปที่ข้อมูลเดียวกันกับไฟล์ต้นฉบับที่ชี้ไป
ดังในตัวอย่างนี้ a.txt ชี้ไปที่ข้อมูล (ไบต์) ของไฟล์ที่อยู่ในไดรฟ์เมื่อสร้าง hardlink b.txt ขึ้นมามันจะชี้ไปที่สิ่งที่ a.txt ชี้ไป
ดังนั้นการลบอันใดอันหนึ่งจะไม่ส่งผลกระทบต่ออีกอันหนึ่งซึ่งแยกออกจากกัน
แต่เมื่อคุณลบทั้งสองระบบจะเห็นว่าข้อมูลที่อยู่ในดิสก์ไม่มีไฟล์ที่ชี้ไปดังนั้นระบบจะพิจารณาว่าเป็นพื้นที่ว่างและจะเขียนทับเมื่อต้องการ
FILE "A.txt"เป็นเหมือนLINK "B.txt"โดยเฉพาะอย่างยิ่งเมื่อคุณได้เรียกว่าหนึ่งและอื่นFILE ๆ LINKลิงค์นี้เป็นลูกศรสีดำจริงๆ
unlink()นอกจากนี้ยังมีการเรียกระบบสำหรับการลบไฟล์ที่เป็น