ทำไมไดเรกทอรีรูท '/' มีการอ้างอิงถึง“ พาเรนต์” ของมัน


6

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

เป็นเหตุผลสำหรับความมั่นคงนี้หรือมีคำอธิบายที่ดีกว่า

แก้ไข: ฉันกำลังมองหาเอกสารที่เอกสารนี้โดยทั่วไป


ไม่เกี่ยวข้องโดยตรง แต่ยังเห็นด้วย unix.stackexchange.com/questions/61984/...
deepak


ยิ่งใหญ่ ขอบคุณสำหรับลิงค์ แต่คำถามของฉันก็ยังไม่มีคำตอบ คำตอบทั้งหมด "เดา" ว่าเป็นเพราะความมั่นคง
Julian Hollmann

1
btw LFS ไม่พูดอะไรเกี่ยวกับ '.. ' & amp; '' tldp.org/LDP/Linux-Filesystem-Hierarchy/html/...
deepak

1
@ JourneymanGeek มันจะไม่ นั่นคือประเด็นทั้งหมดของฉัน ".. " เป็นเพียงการเชื่อมโยงไปยังโฟลเดอร์หลัก หากไม่มีอยู่คุณจะไม่สามารถซีดีลงไปได้
Julian Hollmann

คำตอบ:


3

มีสิ่งนี้ นิยาม POSIX :

3.144 ไดเรกทอรีว่างเปล่า

ไดเรกทอรีที่มีมากที่สุดรายการไดเรกทอรีสำหรับ จุด และ จุดจุด และมี ลิงก์เดียวไปยังมัน (นอกเหนือจากรายการจุดของตัวเองถ้ามี) ในจุด .

คำจำกัดความนี้ถูกทำซ้ำด้วยคำพูดต่าง ๆ ในคำอธิบาย POSIX ของคำสั่งไฟล์ทั้งหมด
ตัวอย่างเช่นสำหรับ rmdir :

คำจำกัดความของไดเรกทอรีที่ว่างเปล่าคือสิ่งที่มีมากที่สุด   รายการไดเรกทอรีสำหรับ dot และ dot-dot

คำจำกัดความที่ซับซ้อนดังกล่าวข้างต้นสำหรับไดเรกทอรีที่ว่างเปล่านั้นเห็นได้ชัดว่าอยู่เบื้องหลังการประชุมที่สนุกสนานนี้และมีวัตถุประสงค์เพื่อหลีกเลี่ยงข้อยกเว้นใด ๆ ของกฎไม่ใช่แม้แต่เครื่องหมายทับ (/)


5

ข้อมูลจำเพาะ UNIX เดียว สหรัฐฯ:

เป็นกรณีพิเศษในไดเรกทอรีรูทจุด - จุดอาจหมายถึงไดเรกทอรีรากเอง

ไม่มีเหตุผลระบุไว้ในมาตรฐาน สำหรับเจ้าหน้าที่ "ทำไม" คำตอบคุณอาจต้องถาม Ken Thompson โดยตรง


ฉันเดาว่าฉันต้องยอมรับมันขอบคุณ
Julian Hollmann

3

การข้ามผ่านระบบไฟล์

เมื่อคุณดูชื่อไฟล์ในระบบ Unix คุณกำลังดูแผนผังที่ถูกรูท

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

เมื่อคุณเมานต์ระบบไฟล์ไปยังจุดเมานท์อื่น - คุณมีระบบไฟล์ / home บนดิสก์อื่นตัวอย่างเช่นคุณจะแทนที่ '.. ' ด้วยการอ้างอิงถึงจุดเมานท์บนระบบไฟล์รูท ดังนั้นรูทระบบไฟล์ที่เมาท์ซึ่งเคยมี '.' และ '.. ' ที่เหมือนกันตอนนี้มีค่าแตกต่างกัน

มี '.' และ '.. ' ทำซ้ำข้อมูลเดียวกันเป็นสัญญาณสำคัญไม่ซ้ำใครจริงเฉพาะบนต้นไม้ และนั่นบอกโปรแกรมการสำรวจเส้นทางที่พวกเขาสามารถหยุดมองหาโหนดหลัก

ฉันคิดว่ามีเอกสารอ้างอิงใน Lions Commentary To Unix Kernel เวอร์ชั่น 6 . รอบ ๆ หน้า 84 ซึ่งจะอธิบายวิธีจัดการจุดเชื่อมต่อ


1

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

$ vim ~

คุณจะเห็นว่าสิ่งที่ไม่ใส่เครื่องหมายข้อคิดเห็นแรกที่ระบุไว้ใน "ไฟล์" คือ "../" คือสิ่งแรกที่แสดงในไฟล์พิเศษนี้คือไดเรกทอรีหลักและตามที่คุณคาดไว้พาเรนต์ของมันคือหนึ่งระดับ "ขึ้น" . แต่ถ้าคุณลองแทน

$ vim /

คุณจะเห็นบรรทัดแรกที่ไม่ใส่เครื่องหมายคอมเม้นต์ที่ระบุว่า "./" แทนที่จะเป็น "../" ทำไมถึงแตกต่างและทำไมต้องอยู่ที่นี่? "/" จะต้องมีรายการ "parent" เพื่อให้สอดคล้องกับข้อกำหนดของการได้รับการยอมรับว่าเป็นไฟล์พิเศษประเภท "directory" หากไม่มีรายชื่อนี้ก่อนมันจะเหมือนกับว่า "/" มีผู้ปกครองระบุไว้แตกต่างกัน (เช่นอะไรก็ตามที่มาก่อนในไฟล์พิเศษ "/") และฉันสงสัย ที่จะตีความว่าเป็นผู้ปกครองสร้างเวียนในระบบไฟล์คือมันจะไม่เป็นระบบไฟล์รูทอีกต่อไป แต่เป็นคนที่วงกลม! กล่าวอีกนัยหนึ่งถ้าระบบจะตีความรายการแรกใน "ไฟล์ไดเรกทอรี" เป็น "พาเรนต์ของไดเรกทอรีนี้" เสมอ "/" จะต้องมีรายการแรกที่เหมาะสมที่จะตีความอย่างถูกต้อง


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

ไดเรกทอรี .. จุดเข้าสู่พาเรนต์ของไดเรกทอรี ที่รากของต้นไม้ที่นั่น คือ ไม่มีผู้ปกครอง ทางออกที่ง่ายคือการมี .. ชี้ไปที่ไดเรกทอรีที่อยู่ภายใน (นั่นหมายความว่าเมื่อคุณเมาท์ระบบไฟล์นั้นในตำแหน่งที่ไม่ใช่รูท .. สามารถปรับปรุงแบบไดนามิกเพื่อชี้ไปที่ผู้ปกครอง; ไม่จำเป็นต้องสร้างรายการไดเรกทอรีเพิ่มเติม)
a CVn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.