คำตอบสั้น ๆ คือ:
- ไฟล์เป็นหยดข้อมูลที่ไม่ระบุชื่อ
- hardlink คือชื่อไฟล์
- ลิงก์สัญลักษณ์เป็นไฟล์พิเศษที่มีเนื้อหาเป็นชื่อพา ธ
ไฟล์ Unix และไดเรกทอรีทำงานตรงเช่นไฟล์และไดเรกทอรีในโลกแห่งความจริง (และไม่เหมือนโฟลเดอร์ในโลกจริง); ระบบไฟล์ยูนิกซ์มีโครงสร้าง (แนวคิด) ดังนี้:
- ไฟล์เป็นข้อมูลที่ไม่ระบุชื่อ ไม่มีชื่อมีเพียงตัวเลข (inode)
- ไดเรกทอรีเป็นไฟล์ชนิดพิเศษที่มีการแมปชื่อกับไฟล์ (inodes เพิ่มเติมโดยเฉพาะ); เนื่องจากไดเรกทอรีเป็นเพียงไฟล์ไดเรกทอรีสามารถมีรายการสำหรับไดเรกทอรีได้นั่นคือวิธีการเรียกใช้ซ้ำ (โปรดทราบว่าเมื่อระบบไฟล์ Unix ถูกนำมาใช้จึงไม่ชัดเจนเลยระบบปฏิบัติการจำนวนมากไม่อนุญาตให้ไดเรกทอรีเก็บไดเรกทอรีไว้ แล้ว)
- รายการไดเรกทอรีเหล่านี้เรียกว่าhardlinks
- ลิงก์สัญลักษณ์เป็นไฟล์พิเศษอีกชนิดหนึ่งซึ่งเนื้อหาเป็นชื่อพา ธ ชื่อพา ธ นี้ถูกตีความว่าเป็นชื่อของไฟล์อื่น
- ไฟล์พิเศษประเภทอื่น ๆ ได้แก่ ซ็อกเก็ตฟิซเซอร์อุปกรณ์บล็อกอุปกรณ์ตัวอักษร
การจดจำคำอุปมานี้ไว้โดยเฉพาะและระลึกไว้เสมอว่าไดเรกทอรี Unix ทำงานเหมือนไดเรกทอรีในโลกแห่งความเป็นจริงและไม่เหมือนโฟลเดอร์ในโลกแห่งความเป็นจริงอธิบาย "แปลกประหลาด" มากมายที่ผู้มาใหม่มักจะเจอเช่น: ทำไมฉันจึงลบไฟล์ที่ ไม่มีสิทธิ์เข้าถึงเพื่อเขียน? สำหรับหนึ่งคุณไม่ได้ลบไฟล์คุณกำลังลบหนึ่งในชื่อที่เป็นไปได้สำหรับไฟล์และเพื่อที่จะทำเช่นนั้นคุณจะต้องเข้าถึงการเขียนไปยังไดเรกทอรีไม่ใช่ไฟล์ เหมือนในโลกแห่งความจริง
หรือเพราะเหตุใดฉันจึงมีการเชื่อมโยงที่ห้อยอยู่? อืม symlink มีชื่อพา ธ ไม่มีอะไรที่บอกว่าจะต้องมีชื่อไฟล์นั้น
คำถามของฉันคืออะไรความแตกต่างของไฟล์และลิงก์ถาวรคืออะไร?
ความแตกต่างระหว่างไฟล์และฮาร์ดลิงก์เหมือนกับความแตกต่างระหว่างคุณและบรรทัดที่มีชื่อของคุณในสมุดโทรศัพท์
ฮาร์ดลิงก์ชี้ไปที่ไอโหนดดังนั้นไฟล์คืออะไร ไอโหนดเข้าเอง? หรือ Inode ที่มีฮาร์ดลิงก์?
ไฟล์เป็นข้อมูลที่ไม่ระบุตัวตน แค่นั้นแหละ. ไฟล์ไม่ใช่ inode ไฟล์มี inode เหมือนกับที่คุณไม่ใช่หมายเลขประกันสังคมคุณมี SSN
ฮาร์ดลิงก์คือชื่อไฟล์ ไฟล์สามารถมีได้หลายชื่อ
สมมติว่าผมสร้างไฟล์ที่มีสัมผัสแล้วรายการ Inode ถูกสร้างขึ้นในตาราง Inode
ใช่.
และฉันสร้างฮาร์ดลิงก์ซึ่งมีหมายเลขไอโหนดเดียวกันกับไฟล์
ไม่ฮาร์ดลิงก์ไม่มีหมายเลขไอโหนดเนื่องจากไม่ใช่ไฟล์ เฉพาะไฟล์ที่มีหมายเลขไอโหนด
ฮาร์ดลิงก์จะเชื่อมโยงชื่อกับหมายเลข inode
ดังนั้นฉันจึงสร้างไฟล์ใหม่
ใช่.
หรือไฟล์ถูกกำหนดเป็น Inode?
ไม่ไฟล์มี inode ไม่ใช่ inode