Double root folder เทียบกับ single root folder


14

บนกล่อง Linux ของฉันในทุบตีฉันมีสิทธิ์เข้าถึงโฟลเดอร์ "double root" ที่แสดงโดยเครื่องหมายทับสองตัว:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

เนื้อหาของโฟลเดอร์และโฟลเดอร์ย่อยนั้นเหมือนกับ root "ปกติ" ของสแลช เครื่องหมายทับสองครั้งไม่หายไปเมื่อฉันเข้าถึงโฟลเดอร์ย่อย Annomaly ไม่ได้ทำซ้ำตัวเองด้วยสามทับหรือมากกว่า นี่เป็นคำพ้องความหมายง่ายๆสำหรับรูท:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

มันคือสถานที่แบบไหน? มันเป็นข้อบกพร่องหรือไม่? ใครสามารถอธิบายความผิดได้บ้าง?


คำถามที่ดี - ฉันสังเกตเห็นพฤติกรรมเดียวกัน แต่ไม่เคยถามว่าทำไมสิ่งนี้ถึงเกิดขึ้น
ลาจาลุยต์

คำตอบ:


18

จากBash คำถามที่พบบ่อย E10 :

E10) เหตุใด 'cd //' ปล่อยให้ $ PWD เป็น '//'

POSIX.2 ในคำอธิบายของ 'cd' กล่าวว่าอาจมีการทับเครื่องหมายทับสามอันหรือมากกว่าด้วยเครื่องหมายทับเดียวเมื่อกำหนดค่าไดเรกทอรีการทำงานปัจจุบัน

นี่คือฉันเข้าใจว่าสำหรับความเข้ากันได้ในอดีต บางรุ่นของ Unix และระบบไฟล์เครือข่ายก่อนหน้านี้ใช้พา ธ ของแบบฟอร์ม // ชื่อโฮสต์ / พา ธ เพื่อเข้าถึง 'เส้นทาง' บนเซิร์ฟเวอร์ 'ชื่อโฮสต์'


1
Domain / OS เป็นหนึ่งในระบบดังกล่าว
user1686

1
ทับสองสิ่งยังคงใช้อยู่ มันเป็นส่วนหนึ่งของ Universal (หรือ Uniform; ฉันไม่สามารถหาแหล่งที่มาหลัก) Naming Convention หรือ UNC มันจะปรากฏขึ้นใน Windows, Unix และ Linux มันเป็นเหตุผลที่ทำให้มีการใช้เครื่องหมายทับสองครั้งใน URL
Isaac Rabinovitch

1

"มันไม่ใช่บั๊กมันเป็นคุณสมบัติ!"

คุณยังอยู่ในไดเรกทอรีรากเดียวกัน ฉันไม่ทราบที่มาของสิ่งนี้ แต่สงสัยว่ามันอาจเกี่ยวข้องกับการสร้างสายสำหรับเส้นทางที่แน่นอน หากใครอื่นรู้แน่นอนไปป์


0

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


เหตุใดทุบตีเปลี่ยน /// เป็น / ในขณะที่ออก // เป็น?
โทมัส

0

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

สิ่งที่คุณเห็นใน shell prompt เป็นส่วนหนึ่งของการจัดการ bash PS1 (ดูหัวข้อ "PROMPTING" ใน bash manpage)

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

ผลลัพธ์เป็นเพียงการนำเสนอเท่านั้น คุณอยู่ในไดเรกทอรีรากเดียวกันเสมอ /proc/$$/rootคุณสามารถตรวจสอบได้โดยดูที่

[แก้ไข] ฉันไม่เคยรู้เรื่องนี้เลย: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 ความหมายของ "//" นั้นไม่ได้ถูกกำหนดโดยมาตรฐาน แต่ "///" และเครื่องหมายทับเพิ่มเติมจะเท่ากับ "/"

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