dot dot (.. ) คืออะไร? ทำไมพฤติกรรมของมันจึงแตกต่างจาก symlink?


15

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

ตัวอย่าง:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

ตอนนี้/outer/middle/inner/..นำไปสู่การ/outer/middle/แต่ถ้าฉันเข้าถึงได้ผ่านการเชื่อมโยงสัญลักษณ์นำไปสู่/outer/inner/.. /outer/ดูเหมือนว่ามีสองที่แตกต่างกัน..ที่นี่

อะไร..กันแน่ ลิงก์สัญลักษณ์? ลิงค์ยาก? หรือมันสร้างแบบไดนามิกขึ้นอยู่กับเส้นทางเมื่อเข้าถึงไดเรกทอรีหรือไม่ หรือบางทีความเข้าใจของฉันเกี่ยวกับลิงก์สัญลักษณ์นั้นไม่ถูกต้อง

แก้ไข:

การสังเกตอื่น ๆ ที่เกี่ยวข้อง

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

ตอนนี้ถ้าฉันพยายามเข้าถึงไฟล์ผ่าน/outer/inner/fมันใช้งานได้ แต่มันไม่ควรเนื่องจาก/outer/inner/../fileไม่ได้ชี้ไปที่ไฟล์ /outer/middle/inner/..ไฟล์ที่อยู่ใน สิ่งนี้ดูเหมือนจะขัดแย้งกับพฤติกรรมข้างต้น!


โปรดทราบว่าลิงก์สัญลักษณ์ไม่ใช่ทางลัด พวกเขาเป็นเหมือนตัวชี้มากขึ้น
wizzwizz4

คำตอบ:


35

..เป็นฮาร์ดลิงก์ไปยังไดเร็กทอรีพาเรนต์ซึ่งสร้างขึ้นเป็นส่วนหนึ่งของรายการไดเร็กทอรี

หากคุณออกls -ailในแต่ละไดเรกทอรีเหล่านี้คุณจะเห็นว่ารายการต่อไปนี้มีทั้งหมดinode(เขตข้อมูลแรก) และจำนวนการเชื่อมโยงฮาร์ด (เขตข้อมูลที่สาม):

  • ..เมื่อมีการดำเนินls -ailในinner
  • .เมื่อมีการดำเนินls -ailในmiddle
  • middleเมื่อมีการดำเนินls -ailในouter

ตอนนี้ / outer / middle / inner / .. นำไปสู่ ​​/ outer / middle /, แต่ถ้าฉันเข้าถึงมันผ่านลิงค์สัญลักษณ์, / outer / inner / .. นำไปสู่ ​​/ outer / ดูเหมือนว่ามีสองที่แตกต่างกัน .. ที่นี่

มีอยู่คนหนึ่งเป็นรายการใน.. innerหากไดเรกทอรีการทำงานปัจจุบันของคุณคือouterคุณควรเห็นผลลัพธ์เดียวกัน (รายการไดเรกทอรีของmiddle) จาก

  • ls -al inner/..
  • ls -al middle/inner/..

สถานการณ์เดียวที่ "เข้าถึง" ..ผ่านการเชื่อมโยงสัญลักษณ์ควรจัดให้มีพฤติกรรมที่แตกต่างกันคือถ้าคุณcdเข้าinnerใช้การเชื่อมโยงสัญลักษณ์เพื่อให้คุณตรรกะไดเรกทอรีที่ทำงาน ( pwd -L) แตกต่างจากของคุณทางกายภาพไดเรกทอรีที่ทำงาน ( pwd -P) ในกรณีนี้cd ..จะนำคุณกลับไปouter ไม่ได้เพราะมีความแตกต่างกัน..รายการ แต่เนื่องจากเปลือกของคุณคือการติดตามของคุณตรรกะไดเรกทอรีการทำงานและ popping คุณออกระดับหนึ่งมากกว่าอ้างอิงที่เกิดขึ้นจริงในรายการ..inner

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

cd -P ..

โดยที่-Pสั่งcd(เหมือนpwdด้านบน) ให้ใช้เส้นทางกายภาพ


อ่าความสับสนมาจากการใช้cdเพื่อตรวจสอบ ดังนั้นแก้ไขให้ถูกต้องหากฉันทำผิด..ชี้ไปที่ผู้ปกครองทางกายภาพเสมอหาก symlink ใช้..มันจะถูกนำไปยังผู้ปกครองจริง (ทางกายภาพ) ความสับสนเกิดขึ้นเมื่อcdเข้าไปในไดเรกทอรีเท่านั้น
user98456

สิ่งนี้ยังอธิบายพฤติกรรมวินาที ขอบคุณมาก.
user98456

3
@Theophrastus ls -laiแสดงให้คุณเห็นว่า/..เป็นไดเรกทอรีรากของตัวเองอีกครั้ง (aka /. หรือ/) หากระบบไฟล์ไม่สามารถใช้งานได้ควรไม่มีกรณีอื่นที่. == ..; แม้ว่าจะติดตั้ง fs ไว้ที่ไหนสักแห่งก็จะได้รับความถูกต้อง..ของพาเรนต์ (ชั่วคราว) (ดังนั้นจึงมีเวทย์มนตร์เกิดขึ้นที่นั่น..ไม่ใช่แค่รายการแบบคงที่ที่เรียบง่ายในตารางระบบไฟล์)
AnoE
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.