อะไรคือความแตกต่างระหว่างฮาร์ดลิงก์และไฟล์?


37

เชื่อมโยงยากที่ถูกกำหนดให้เป็นตัวชี้ไปยัง inode ลิงค์อ่อนยังเป็นที่รู้จักในฐานะผู้เชื่อมโยงสัญลักษณ์ถูกกำหนดให้เป็นไฟล์ชี้อิสระเพื่อการเชื่อมโยงอื่นโดยไม่มีข้อ จำกัด ของการเชื่อมโยงอย่างหนัก

อะไรคือความแตกต่างระหว่างไฟล์และฮาร์ดลิงก์? ฮาร์ดลิงก์ชี้ไปที่ไอโหนดดังนั้นไฟล์คืออะไร รายการ inode ตัวเอง? หรือไอโหนดที่มีฮาร์ดลิงก์?

สมมติว่าฉันสร้างไฟล์ด้วยการสัมผัส แล้วรายการ inode ถูกสร้างขึ้นในตาราง inode และฉันสร้างฮาร์ดลิงก์ซึ่งมีหมายเลขไอโหนดเดียวกันกับไฟล์ ดังนั้นฉันจึงสร้างไฟล์ใหม่ หรือไฟล์ถูกกำหนดเป็น inode หรือไม่?


นี้เป็นเกือบแน่นอนซ้ำunix.stackexchange.com/questions/9575/...
infixed

7
@infixed แน่นอนฉันขอความแตกต่างของไฟล์และฮาร์ดลิงก์
Levent Divilioglu

ดังนั้นฉันได้ยกเลิกการลบคำตอบดั้งเดิมที่ฉันเชื่อว่าถูกครอบคลุมในคำตอบของคำถามที่เชื่อมโยง ดังนั้นมันยังคง 'ไม่'
infixed

7
ความแตกต่างระหว่างไฟล์และฮาร์ดลิงก์นั้นแตกต่างจากความแตกต่างระหว่างคุณและบรรทัดที่มีชื่อของคุณในสมุดโทรศัพท์
Jörg W Mittag

2
นี่คือซ้ำซ้อนของunix.stackexchange.com/questions/234402/…
seumasmac

คำตอบ:


61

คำตอบสั้น ๆ คือ:

  • ไฟล์เป็นหยดข้อมูลที่ไม่ระบุชื่อ
  • hardlink คือชื่อไฟล์
  • ลิงก์สัญลักษณ์เป็นไฟล์พิเศษที่มีเนื้อหาเป็นชื่อพา ธ

ไฟล์ Unix และไดเรกทอรีทำงานตรงเช่นไฟล์และไดเรกทอรีในโลกแห่งความจริง (และไม่เหมือนโฟลเดอร์ในโลกจริง); ระบบไฟล์ยูนิกซ์มีโครงสร้าง (แนวคิด) ดังนี้:

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

การจดจำคำอุปมานี้ไว้โดยเฉพาะและระลึกไว้เสมอว่าไดเรกทอรี Unix ทำงานเหมือนไดเรกทอรีในโลกแห่งความเป็นจริงและไม่เหมือนโฟลเดอร์ในโลกแห่งความเป็นจริงอธิบาย "แปลกประหลาด" มากมายที่ผู้มาใหม่มักจะเจอเช่น: ทำไมฉันจึงลบไฟล์ที่ ไม่มีสิทธิ์เข้าถึงเพื่อเขียน? สำหรับหนึ่งคุณไม่ได้ลบไฟล์คุณกำลังลบหนึ่งในชื่อที่เป็นไปได้สำหรับไฟล์และเพื่อที่จะทำเช่นนั้นคุณจะต้องเข้าถึงการเขียนไปยังไดเรกทอรีไม่ใช่ไฟล์ เหมือนในโลกแห่งความจริง

หรือเพราะเหตุใดฉันจึงมีการเชื่อมโยงที่ห้อยอยู่? อืม symlink มีชื่อพา ธ ไม่มีอะไรที่บอกว่าจะต้องมีชื่อไฟล์นั้น

คำถามของฉันคืออะไรความแตกต่างของไฟล์และลิงก์ถาวรคืออะไร?

ความแตกต่างระหว่างไฟล์และฮาร์ดลิงก์เหมือนกับความแตกต่างระหว่างคุณและบรรทัดที่มีชื่อของคุณในสมุดโทรศัพท์

ฮาร์ดลิงก์ชี้ไปที่ไอโหนดดังนั้นไฟล์คืออะไร ไอโหนดเข้าเอง? หรือ Inode ที่มีฮาร์ดลิงก์?

ไฟล์เป็นข้อมูลที่ไม่ระบุตัวตน แค่นั้นแหละ. ไฟล์ไม่ใช่ inode ไฟล์มี inode เหมือนกับที่คุณไม่ใช่หมายเลขประกันสังคมคุณมี SSN

ฮาร์ดลิงก์คือชื่อไฟล์ ไฟล์สามารถมีได้หลายชื่อ

สมมติว่าผมสร้างไฟล์ที่มีสัมผัสแล้วรายการ Inode ถูกสร้างขึ้นในตาราง Inode

ใช่.

และฉันสร้างฮาร์ดลิงก์ซึ่งมีหมายเลขไอโหนดเดียวกันกับไฟล์

ไม่ฮาร์ดลิงก์ไม่มีหมายเลขไอโหนดเนื่องจากไม่ใช่ไฟล์ เฉพาะไฟล์ที่มีหมายเลขไอโหนด

ฮาร์ดลิงก์จะเชื่อมโยงชื่อกับหมายเลข inode

ดังนั้นฉันจึงสร้างไฟล์ใหม่

ใช่.

หรือไฟล์ถูกกำหนดเป็น Inode?

ไม่ไฟล์มี inode ไม่ใช่ inode


15
ฉันไม่เคยเข้าใจจริงๆ (หรือคิดอย่างถูกต้องเกี่ยวกับ) คำอุปมาที่อยู่เบื้องหลังคำว่า "ไดเรกทอรี" ตัวอย่างสมุดโทรศัพท์นั้นยอดเยี่ยม บางทีคุณควรจะแนะนำก่อนหน้านี้ (เมื่อคุณพูดถึงโลกแห่งความจริงครั้งแรก) ในทำนองเดียวกันคนส่วนใหญ่ไม่ค่อยจัดการกับ "ไฟล์" ด้านนอกของคอมพิวเตอร์ดังนั้นอาจจะชัดเจนกว่าถ้าพูดว่า "เหมือนไฟล์กระดาษและไดเรกทอรีเช่นสมุดโทรศัพท์"
IMSoP

2
@IMSoP มันเป็นช่องว่างของการสร้าง ก่อนคอมพิวเตอร์สมุดโทรศัพท์เป็นหนึ่งในไดเรกทอรีประเภทหนึ่ง Cambridge dictionary กล่าวว่า: " directory:หนังสือที่ให้รายชื่อชื่อที่อยู่หรือข้อเท็จจริงอื่น ๆ [... ตัวอย่าง] ค้นหาหมายเลขของพวกเขาในสมุดโทรศัพท์ "
kubanczyk

2
@kancanczyk แน่นอน - สำหรับคนที่ทำงานในสำนักงาน pre-digital ฉันเดาอุปมาอุปมัยดูเหมือนชัดเจนว่ารู้สึกเกือบจะวางตัวอธิบายพวกเขา แต่สำหรับคนรุ่นและต่ำกว่าของฉันมันคลุมเครือเหมือนกันว่าทำไมพื้นที่จัดเก็บที่ด้านหลังรถเรียกว่า "บูท" หรือ "ลำตัว" ดังนั้นคุณต้องสะกดมันออกมา
IMSoP

คำว่า "มี" ในวลี "ฮาร์ดลิงก์ไม่มีหมายเลขไอโหนด" อาจทำให้เข้าใจผิดเพราะคุณบอกว่า "ฮาร์ดลิงก์เชื่อมโยงชื่อกับหมายเลขไอโหนด" โครงสร้างข้อมูลรายการไดเรกทอรีของ "hardlink" นั้นมี inode # อยู่ - ซึ่งเป็นวิธีการเชื่อมโยง "เชื่อมโยง" กับ inode # โดย "ไม่มี" ฉันคิดว่าคุณหมายถึง hardlink ไม่มี inode # ที่ระบุว่าลิงก์ถูกเก็บไว้ในดิสก์
เคลวิน

2
การบอกว่าไฟล์มี inode จะค่อนข้างย้อนกลับ inode เป็นโครงสร้างที่มีข้อมูลเกี่ยวกับตำแหน่งที่ "blob of data" อยู่ หากไม่มี inode ไม่มีไฟล์
Barmar

18

ฮาร์ดลิงก์คือรายการไดเร็กทอรี ไฟล์อาจมีหลายรายการไดเรกทอรีถ้ามันอยู่ภายใต้ชื่อที่แตกต่างกันหรือในไดเรกทอรีที่แตกต่างกัน รายการไดเรกทอรีเรียกว่า "ฮาร์ดลิงก์" เมื่อมันเกี่ยวข้องกับรายการไดเรกทอรีอื่น ๆ สำหรับไฟล์เดียวกัน

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

คิดว่าไฟล์เป็นห้องและรายการไดเรกทอรีเป็นประตู “ เปิดไฟล์/foo/bar” หมายถึง“ ไปที่ทางเดิน/fooและไปที่ห้องbar” “ ไปที่ห้องbar” จริงๆแล้วหมายถึง“ เปิดประตูที่มีเครื่องหมายbarและเข้ามาในห้อง” แต่“ ไปที่ห้องbar” เป็นวิธีที่ไม่ธรรมดาในการพูดสิ่งเดียวกันในทางที่สั้นกว่า เป็นไปได้ที่จะมีประตูมากกว่าหนึ่งประตูที่นำไปสู่ห้องเดียวกัน

เมื่อคุณสร้างฮาร์ดลิงก์ไปยังไฟล์ที่มีอยู่ ( ln existing new) คุณจะสร้างลิงค์ที่สองไปยังไฟล์เดียวกันนั่นคือคุณกำลังสร้างรายการไดเรกทอรีใหม่ที่ลิงก์ไปยังไฟล์ที่มีอยู่แล้ว หลังจากการสร้างรายการไดเรกทอรีทั้งสองมีสถานะเท่ากัน: ไม่มีรายการที่เป็น "หลัก" และรายการที่เป็น "รอง" ทั้งคู่เป็นเพียงลิงก์ไปยังไฟล์เดียวกัน

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


เมื่อใดที่มีการเชื่อมโยงแบบแข็งและแบบนุ่มเริ่มใช้งานครั้งแรกตามลำดับ
n611x007

2
@ n611x007: คุณช่วยเปิดคำถามใหม่ได้ไหมถ้าคุณมีคำถามใหม่หรือคำถามติดตาม? ส่วนความคิดเห็นไม่เหมาะสมหรือมีความหมายสำหรับคำถามใหม่หรือการอภิปรายเพิ่มเติม ขอบคุณ
David Foerster

1
@ n611x007 เชื่อมโยงฮาร์ดเก่ากว่า Unix, v1 มีพวกเขา Symlinks ใน Unix ค่อนข้างใหม่ Wikipediaมีประวัติบางส่วน
Gilles 'หยุดความชั่วร้าย' ใน

ห้องพักและประตูเปรียบได้ดี! Symlinks เป็นเหมือนสัญลักษณ์ของประตู
curiousdannii

1
@curiousdannii: Symlinks เป็นเหมือนห้องที่มีคนนั่งอยู่ในนั้นซึ่งบอกว่า "oi m8 office ผิดไป # 234 แทน"
Lightness Races กับ Monica

8

นอกเหนือจากคำตอบอื่น ๆ ทั้งหมดฉันต้องการชี้ให้เห็นคุณสมบัติที่สำคัญดังต่อไปนี้:

softlink เป็นการอ้างอิงที่แท้จริงคือไฟล์เล็ก ๆ ที่มีชื่อพา ธ การแก้ไข softlink เกิดขึ้นกับแอปพลิเคชั่นอย่างโปร่งใส: หากกระบวนการเปิดไฟล์ให้บอกว่า/this/path/hereเป็น symlink ที่ชี้ไปที่/that/other/pathใดดังนั้นการจัดการการเปิดทั้งหมด/that/other/pathจะกระทำโดยระบบปฏิบัติการ นอกจากนี้หาก/that/other/pathเกิดขึ้นเป็น symlink ตัวเองแล้วสิ่งนี้จะถูกจัดการโดยระบบปฏิบัติการ ในความเป็นจริงแล้วระบบปฏิบัติการจะติดตามการเชื่อมโยงของ symlink จนกว่าจะพบสิ่งอื่น (เช่นไฟล์ปกติ) หรือจนกว่าจะถึงSYMLOOP_MAX(ดูsysconf(3)) รายการจำนวนมากซึ่งในกรณีนี้ระบบปฏิบัติการ (แม่นยำยิ่งขึ้น: การเรียกระบบตาม) ส่งคืนข้อผิดพลาดไปยังerrno ELOOPดังนั้นการอ้างอิงแบบวงกลมxyz -> xyzจะไม่ทำให้กระบวนการหยุดชะงัก (สำหรับระบบ Linux ดูpath_resolution(7)รายละเอียดทั้งหมด)

โปรดทราบว่ากระบวนการสามารถตรวจสอบว่าชื่อพา ธ เป็น symlink หรือไม่ผ่านการใช้งานlstat(2)และอาจแก้ไขคุณสมบัติไฟล์ (เก็บไว้ในตาราง inode) ผ่านlchown(2)และอื่น ๆ (ดูsymlink(7)เรื่องราวทั้งหมด)

ตอนนี้ในแง่ของการอนุญาตคุณจะสังเกตเห็นว่า symlink มีสิทธิ์ 777 เสมอ ( rwxrwxrwxในสัญลักษณ์สัญลักษณ์) นี่คือเนื่องจากความจริงที่ว่าสิทธิ์อื่น ๆ สามารถข้ามโดยการเข้าถึงไฟล์จริงต่อไป ในทางกลับกัน 777 สำหรับ symlink จะไม่สามารถเข้าถึงไฟล์ symlink ได้หากไม่สามารถเข้าถึงได้ในครั้งแรก ตัวอย่างเช่น symlink ที่มีการอนุญาต 777 ซึ่งชี้ไปที่ไฟล์ที่มีการอนุญาต 640 ไฟล์จะไม่สามารถเข้าถึงได้สำหรับ "อื่น ๆ " (สาธารณะทั่วไป) กล่าวอีกนัยหนึ่งxyzคือไฟล์นั้นสามารถเข้าถึงได้ผ่าน symlink ถ้าหากสามารถเข้าถึงได้โดยตรงคือโดยไม่ต้องอ้อม ดังนั้นสิทธิ์ของ symlink จึงไม่มีผลกระทบด้านความปลอดภัยใด ๆ

หนึ่งในความแตกต่างหลักที่มองเห็นได้ระหว่างฮาร์ลิงก์และ symlinks (อาคาซอฟต์ลิงค์) คือ symlinks ทำงานข้ามระบบไฟล์ในขณะที่ฮาร์ลิงก์ถูก จำกัด ไว้ที่ระบบไฟล์เดียว นั่นคือไฟล์บนพาร์ติชัน A สามารถเชื่อมโยงไปยังจากพาร์ติชัน B แต่ไม่สามารถเชื่อมโยงฮาร์ดไดรฟ์จากที่นั่นได้ นี่คือความจริงที่ชัดเจนว่า hardlink เป็นรายการในไดเรกทอรีซึ่งประกอบด้วยชื่อไฟล์และหมายเลข inode และหมายเลข inode นั้นไม่ซ้ำกันต่อระบบไฟล์

คำว่า hardlink นั้นค่อนข้างเข้าใจผิด ในขณะที่ symlink ต้นทางและปลายทางนั้นสามารถแยกแยะได้อย่างชัดเจน (symlink มีรายการของตัวเองในตาราง inode) สิ่งนี้ไม่เป็นความจริงสำหรับ hardlink หากคุณสร้างฮาร์ดลิงก์สำหรับไฟล์รายการต้นฉบับและฮาร์ดลิงก์จะแยกไม่ออกในแง่ของสิ่งที่มีอยู่ก่อน (เนื่องจากพวกเขาอ้างถึง inode เดียวกันพวกเขาแบ่งปันคุณสมบัติไฟล์ของพวกเขาเช่นเจ้าของสิทธิ์การประทับเวลา ฯลฯ ) สิ่งนี้นำไปสู่คำสั่งที่ทุกรายการไดเรกทอรีเป็นฮาร์ดลิงค์และการเชื่อมโยงไฟล์นั้นหมายถึงการสร้างที่สอง ( หรือสามหรือสี่ ... ) ฮาร์ดลิงก์ ในความเป็นจริงแต่ละไอโหนดเก็บตัวนับจำนวนฮาร์ดลิงก์ไปยังไอโหนดนั้น

ท้ายที่สุดโปรดทราบว่าผู้ใช้ทั่วไปอาจไม่ได้ลิงก์ไปยังไดเรกทอรี นี่เป็นเพราะสิ่งนี้จะต้องทำด้วยความระมัดระวังอย่างสูงสุด: ผู้ใช้ที่ไม่ระวังอาจแนะนำวงจรในโครงสร้างไฟล์แบบลำดับชั้นที่เคร่งครัดซึ่งเครื่องมือทั่วไป (เช่นfsck) และ OS เองไม่ได้เตรียมพร้อมที่จะจัดการ


6

คำตอบง่ายๆ:

  • รายการไฟล์ในไดเรกทอรีเป็นการเชื่อมโยงอย่างหนักไปยังไฟล์นั้น

  • ไฟล์บางไฟล์มีฮาร์ดลิงก์มากกว่าหนึ่งลิงก์เนื่องจากอนุญาตให้ลิงก์ฮาร์ดหลายลิงก์ไปยังไฟล์เดียวกัน


3

ในวันแรก ๆ ของ Unix ไฟล์ภายในเป็น inodes บนดิสก์ไดรฟ์หนึ่ง ๆ ชื่อไฟล์เป็นวิธีที่ง่ายกว่าในการเข้าถึง

ฮาร์ดลิงก์ได้กำหนดชื่อไฟล์มากกว่าหนึ่งชื่อให้กับ inode คุณสามารถสร้างไฟล์ฮาร์ดลิงก์ชื่อที่สองไปยังมันและลบชื่อและมันก็แยกไม่ออกจากการสร้างไฟล์ด้วยชื่อที่สองในตอนแรก

อันที่จริงแล้วระบบเรียกว่าโปรแกรมที่ต้องการใช้เพื่อลบไฟล์คือ 'unlink (2) ` ข้อมูลจะไม่หายไปจนกว่าจะมีการยกเลิกการเชื่อมโยงนามสกุลจาก inode (และไอโหนดไม่เปิดโดยที่ใดที่หนึ่ง)

นี่คือสิ่งที่ทำให้ Linux สามารถอัปเกรดสิ่งต่าง ๆ ได้ง่ายขึ้นขณะที่ยังใช้งานโปรแกรมอยู่ หากกระบวนการกำลังเรียกใช้งานไฟล์ปฏิบัติการและมีการอัพเดทเกิดขึ้นชื่อโปรแกรมจะถูกนำมาใช้ใหม่ แต่ inode ที่มีเวอร์ชั่นเก่ายังคงมีอยู่เพื่อให้สามารถทำงานต่อไปได้ และเมื่อกระบวนการสุดท้ายที่รันเวอร์ชันเก่าหยุดลงพื้นที่เก็บข้อมูลเวอร์ชันเก่านั้นจะถูกนำออกใช้

ซอฟต์ลิงค์เกิดขึ้นเพราะเมื่อคุณมีทรีไฟล์ที่รวมกันซึ่งมีหลายจุดเชื่อมต่อคุณจะไม่สามารถสร้างฮาร์ดลิงก์จากฮาร์ดไดรฟ์หนึ่งไปยังไอโหนดอีกอันได้ ลิงก์ที่อ่อนนุ่มนั้นถูกคิดค้นขึ้น


ผมคิดว่านี่คือการซ้ำunix.stackexchange.com/questions/9575/...
infixed

2
early daysทำไมตอนนี้ถึงแตกต่างกัน? คำตอบของคุณดูเหมือนจะไม่สะท้อนมุมมองนั้น แต่อย่างใด?
n611x007

@ n611x007 เพราะสิ่ง 'วันนี้' เช่น Linux สามารถเมาท์ระบบไฟล์ประเภท non-unix ที่ไม่พอดีกับ inode model เช่นอนุพันธ์ของ FAT และ ISO-9660 มันเป็นระบบนิเวศระบบไฟล์มากที่มีความหลากหลายมากขึ้นแทนการหนึ่งขนาดเหมาะกับทุกคน
infixed

1

ไฟล์คือข้อมูลที่เขียนบนดิสก์ ข้อมูลนี้ถูกอ้างอิงโดย inode ซึ่งมีข้อมูลเมตาเกี่ยวกับไฟล์ที่บอกระบบว่ามีการบล็อกไฟล์ใดบ้างบนดิสก์โดยไฟล์นี้และสิ่งอื่น ๆ ฮาร์ดลิงก์ชี้ไปที่หมายเลขไอโหนดของไฟล์นี้

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


1

ไฟล์เป็นแนวคิดที่ใช้กันอย่างแพร่หลายเกี่ยวกับรายการในระบบไฟล์

โดยทั่วไปจะมีDirectory , ไฟล์ปกติ (ฮาร์ดลิงก์) และSymbolic Link (ซอฟต์ลิงค์) และอาจรวมถึงอุปกรณ์และซ็อกเก็ต

คำถามของฉันคืออะไรความแตกต่างของไฟล์และลิงก์ถาวรคืออะไร? ฮาร์ดลิงก์ชี้ไปที่ไอโหนดดังนั้นไฟล์คืออะไร ไอโหนดเข้าเอง? หรือ Inode ที่มีฮาร์ดลิงก์?

สมมติว่าฉันสร้างไฟล์ด้วยการสัมผัสจากนั้นรายการ Inode จะถูกสร้างในตาราง Inode และฉันสร้างฮาร์ดลิงก์ซึ่งมีหมายเลขไอโหนดเดียวกันกับไฟล์ ดังนั้นฉันจึงสร้างไฟล์ใหม่ หรือไฟล์ถูกกำหนดเป็น Inode?

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

แนวคิดนี้ค่อนข้างคลุมเครือดังนั้นมันก็โอเคที่จะบอกว่ารายการ inode เป็นไฟล์แม้ว่าคุณอาจต้องการอ้างอิงข้อมูลจริง ๆ

หากคุณเป็น C ++ หรือ Java โปรแกรมเมอร์คุณอาจต้องการที่จะอ่านเกี่ยวกับมาตรฐาน :: ระบบแฟ้ม :: FILE_TYPE , java.io.Fileและjava.nio.file.Files

รายละเอียดเกี่ยวกับความแตกต่างระหว่างฮาร์ดลิงค์และซอฟต์ลิงค์สามารถพบได้ในลิงค์ในความคิดเห็นของ infixed


1

ความแตกต่างระหว่าง "ไฟล์" ที่มีชื่อที่กำหนดและ "ฮาร์ดลิงก์" เป็นหนึ่งในประวัติ ไฟล์ (ปกติ) ที่มีชื่อที่กำหนดจะถูกสร้างขึ้นโดยใช้การเรียกระบบ creat ส่วนฮาร์ดลิงก์จะถูกสร้างขึ้นโดยใช้การเรียกระบบลิงก์

อย่างไรก็ตามในขณะที่คนพูดถึงและจดจำประวัติของรายการไดเรกทอรีและเรียกพวกเขาไฟล์และการเชื่อมโยงอย่างหนักตามระบบไฟล์ไม่ รายการไดเรกทอรีของ "ไฟล์ต้นฉบับ" และ "ฮาร์ดลิงก์" นั้นแยกไม่ออกโดยสิ้นเชิงในด้านคุณภาพ: ทั้งคู่สร้างการอ้างอิงระหว่างชื่อไฟล์และ inode ของไฟล์และเมื่อการอ้างอิงดังกล่าวครั้งสุดท้ายหายไป (การอ้างอิงไม่ใช่แค่ชื่อไฟล์สำหรับ ไฟล์ แต่ยังอธิบายไฟล์ที่ไฟล์ที่เปิดสามารถเข้าถึงได้) ไฟล์สำหรับ inode ที่ไม่อ้างอิงจะถูกพิจารณาว่าถูกลบและ inode และพื้นที่ไฟล์ที่เกี่ยวข้องจะถูกเรียกคืน

ดังนั้นเมื่อมนุษย์เปรียบเทียบ "ไฟล์" และ "ฮาร์ดลิงก์" สิ่งแรกที่เข้ามาก็คือ "จำนวนลิงก์ 1" และสิ่งอื่น ๆ ทั้งหมดก็มาอยู่กับจำนวนลิงค์ที่ใหญ่กว่า ข้อแตกต่างคือ academical และการเปลี่ยนชื่อไฟล์ในครั้งเดียวประกอบด้วยการสร้างฮาร์ดลิงก์สำหรับชื่อเป้าหมายจากนั้นลบลิงก์สำหรับชื่อแหล่งที่มา ทุกวันนี้มักจะใช้การเรียกของระบบเดียวซึ่งทำสิ่งนี้ตามปกติ

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