ทำไม '.' เลือกให้เป็นตัวแทนไดเรกทอรีปัจจุบันและ '.. ' สำหรับไดเรกทอรีหลักหรือไม่


32

หลังจากอ่านคำถามนี้ทำไมเลือก '~' เพื่อเป็นตัวแทนของโฮมไดเร็กตอรี่? คำถามที่ชัดเจนต่อไปในใจของฉันคือทำไม '.' และ '.. ' ถูกใช้เพื่อแสดงไดเรกทอรีปัจจุบันและไดเรกทอรีหลัก

ดูเหมือนว่าจะเป็นสัญชาตญาณตอนนี้ แต่มีเหตุผลพิเศษอะไรบ้าง


10

คำตอบ:


16

ฉันสงสัยว่าคุณจะพบคำตอบที่น่าสนใจเกี่ยวกับคำถามตัวหนอน!

ผมก็ไม่ได้มี แต่ .. เป็นเหมือนจุดไข่ปลา ( ... ) cd ../../../thereซึ่งจะทำให้ความรู้สึกในบริบทเช่น ยิ่งไปกว่านั้นและโดยเฉพาะอย่างยิ่งเมื่อมองไปที่แป้นเทอร์มินัลของเจ้า olde จากตัวหนอนตัวอ่อนมีอักขระที่มีสิทธิ์ไม่มากนักสำหรับจุดประสงค์นี้ คุณไม่จำเป็นที่จะเปลี่ยนสำหรับการ.อย่างใดอย่างหนึ่ง มันสมบูรณ์แบบ.

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

ตามที่ปรากฎฉันอาจย้อนกลับ ... จากวิกิพีเดีย :

ความคิดที่ว่าชื่อไฟล์นำหน้าด้วย '.' ควรถูกซ่อนไว้เป็นผลมาจากข้อผิดพลาดของซอฟต์แวร์ในช่วงแรก ๆ ของ Unix เมื่อพิเศษ '.' และรายการไดเรกทอรี '.. ' ถูกเพิ่มลงในระบบไฟล์ก็มีการตัดสินใจว่าคำสั่ง ls ไม่ควรแสดงพวกเขา อย่างไรก็ตามโปรแกรม ls นั้นถูกเขียนผิดพลาดเพื่อแยกไฟล์ใด ๆ ที่ชื่อขึ้นต้นด้วย '.' แทนที่จะเป็นไฟล์ที่ชื่อ '.' เท่านั้น หรือ '..'.

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

มีความคิดเห็นที่แตกต่างกันเกี่ยวกับค่าใช้ที่อยู่ในการอ้างอิงสำหรับอ้างวิกิพีเดีย แน่นอนว่าเรื่องราวทั้งหมดอาจเป็นหลักฐานได้ ... มันยากที่จะเชื่อเช่นว่า Dennis Ritchie คิดเพียงการตรวจสอบตัวละครตัวแรกจะไม่เป็นไร

ฉันไม่เห็นด้วยกับผู้เขียนจะดีกว่าถ้าวางไฟล์การกำหนดค่าที่ซ่อนอยู่ในไดเรกทอรีของตัวเองแทนที่จะให้คำนำหน้าสากล คำนำหน้ามีความยืดหยุ่นมากขึ้นเพื่อให้สามารถอยู่ในต้นไม้สั่งเหมือนและ.gitignore .htaccessพยานว่าไฟล์ที่จัดเรียงยังปรากฏร่วมกันเมื่อเรียง lexicographically - ดังนั้นบางทีนี่คือวัตถุประสงค์หลังจากทั้งหมด


2

ส่วนใหญ่คำตอบเดียวกับ@Panos 'ใน stackoverflow :

ในระยะสั้นมันพัฒนามาจากdและdd( dไดเรกทอรีและdไดเรกทอรีของdไดเรกทอรี) ซึ่งสร้างขึ้นโดยผู้ใช้ด้วยมือ dกลายเป็นจุดและสิ่งเหล่านั้น.และ..ถูกสร้างขึ้นครั้งแรกโดยmkdirยูทิลิตี้ (setuid หลังจากการเชื่อมโยงไดเรกทอรีไม่ได้รับอนุญาตจากผู้ใช้เพียงแค่) และต่อมาโดยการmkdir เรียกระบบ

ข้อความที่ตัดตอนมาจากการสัมภาษณ์กับ Ken Thompson (1989-09-06):

MSM : แต่สำหรับผู้ใช้มันจะดูคล้าย ๆ กับลำดับชั้นของไดเรกทอรี

Thompson : ไม่คนแรกคือ DG ในความเป็นจริงมันไม่ได้เป็นแบบวนซ้ำ หากคุณเข้าใจระบบไฟล์ UNIX นั่นคือ .... มี I-list ซึ่งเป็นคำจำกัดความของไฟล์ทั้งหมดในระบบ จากนั้นไฟล์บางไฟล์นั้นเป็นไดเรกทอรีที่เพิ่งมีชื่อและหมายเลข I ไม่มีสิ่งใดในนั้นที่ จำกัด มันไว้กับต้นไม้ ดังนั้นในความเป็นจริงมันไม่ได้เป็นแบบลำดับขั้นเลย

ชายรักชาย : ฉันเข้าใจ

ธ อมป์สัน : และเราไม่ได้ห้ามมันไว้กับต้นไม้ เรากำลังทดลองกับโทโพโลยีต่างๆ สิ่งที่เราทำลงเอยก็คือกลายเป็นรูปธรรมและบังคับให้โทโพโลยีที่จริงแล้วโทโพโลยีที่มาจากการประชุมจากระบบนั้น ... ทุกครั้งที่เราสร้างไดเรกทอรีโดยการประชุมเราวางไว้ในไดเรกทอรีอื่นที่เรียกว่าdirectory - directoryซึ่งก็คือ dd ชื่อของมันคือ dd และไดเรกทอรีผู้ใช้ทั้งหมดและในความเป็นจริงไดเรกทอรีอื่น ๆ ส่วนใหญ่ผู้ใช้รักษาระบบไดเรกทอรีของตัวเองมีตัวชี้กลับไปที่ dd และ dd ย่อลงเป็นdot-dotและ dd มีไว้สำหรับไดเรกทอรีไดเรกทอรี มันเป็นสถานที่ที่คุณสามารถไปที่ไดเรกทอรีอื่น ๆ ในระบบเพื่อรักษาชามสปาเก็ตตี้นี้ ดังนั้นฉันหมายถึงปอยนี้ในรูปแบบต่าง ๆ ซึ่งเป็นการประชุมที่เคร่งครัดในการนำ DG ไปใช้กับชุดไดเรกทอรีและไฟล์แบบสุ่มที่ถูกบังคับให้ใช้แบบอักษรที่เราเก็บรักษาไว้ เมื่อเราเริ่มเขียนสิ่งต่าง ๆ เช่นระบบไฟล์ที่ตรวจสอบโปรแกรมและสิ่งต่าง ๆ การล็อกไดเรกทอรีสปาเก็ตตี้ชามและค้นหาสิ่งที่แยกจากกันฉันหมายความว่าคุณจะแยกบางสิ่งบางอย่างออกและไม่ได้รับคืนเพราะคุณรู้ว่าคุณทำหายไป ปัญหาเหล่านั้นใกล้จะผ่านพ้นไม่ได้ดังนั้นในการดำเนินการครั้งต่อไปเราจึงจำเป็นต้องจัดประเภทที่แข็งแกร่งกว่านั้น

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