// foo / bar ระบบใดที่แตกต่างจาก / foo / bar?


114

ตลอดทั้งข้อมูลจำเพาะ POSIX มีข้อกำหนด ( 1 , 2 , 3 ... ) เพื่อให้การใช้งานในการรักษาเส้นทางเริ่มต้นด้วยสอง/พิเศษ

แอปพลิเคชัน POSIX (แอปพลิเคชันที่เขียนไปยังข้อมูลจำเพาะ POSIX เพื่อพกพาไปยังระบบที่สอดคล้องกับ POSIX ทั้งหมด) ไม่สามารถสันนิษฐานได้ว่า//foo/barเป็นเช่นเดียวกับ/foo/bar(แม้ว่าพวกเขาสามารถสันนิษฐานได้ว่า///foo/barเป็นเหมือนกัน/foo/bar)

ตอนนี้ระบบ POSIX เหล่านั้น//fooคืออะไร ฉันเชื่อ (ตอนนี้ฉันได้รับการพิสูจน์แล้วผิด ) ว่า POSIX นั้นถูกผลักโดย Microsoft สำหรับ Unix Variant (XENIX) และ Windows POSIX เลเยอร์ (อาจมีใครยืนยันได้หรือไม่)

มันถูกใช้โดย Cygwin ซึ่งเป็นเลเยอร์เหมือน POSIX สำหรับ Microsoft Windows มีระบบที่ไม่ใช่ของ Microsoft Windows หรือไม่? OpenVMS?

สำหรับระบบที่//foo/barมีความพิเศษใช้กับอะไร? //host/pathสำหรับการเข้าถึงระบบไฟล์เครือข่าย ระบบไฟล์เสมือนจริง?

แอปพลิเคชั่นบางตัวที่ทำงานบน Unix-like ไม่ใช่ API ของระบบ//foo/barหรือปฏิบัติ/foo/barกับพา ธพิเศษ (ในบริบทที่พวกเขาใช้เป็นพา ธ บนระบบไฟล์)?


แก้ไขตั้งแต่ฉันถามคำถามในรายชื่อผู้รับจดหมายของกลุ่ม austinเกี่ยวกับต้นกำเนิดของการ//foo/barจัดการในข้อมูลจำเพาะและการอภิปรายเป็นการอ่านที่น่าสนใจ (จากมุมมองของนักโบราณคดีอย่างน้อย)



1
@OlivierDulac เลขที่ls -ld ///ยังจะแสดง///, lsเพียงแสดงไฟล์มันจะถูกบอกให้แสดงในขณะที่มันได้รับ ฉันกำลังมองหาระบบหรือแอปพลิเคชันที่จัดการ // foo / var เป็นพิเศษ (ไม่ใช่เส้นทางบนระบบไฟล์) อย่างที่ Cygwin ทำ
Stéphane Chazelas

1
มาตรฐาน ( pubs.opengroup.org/onlinepubs/009695399/basedefs/ … ) กล่าวว่าในขณะที่คุณพูดถึง "ชื่อพา ธ ที่ขึ้นต้นด้วยเครื่องหมายทับสองอันต่อเนื่องอาจตีความได้ในลักษณะที่กำหนดไว้ในการนำไปใช้" (มากกว่า 2 แก้ไขเป็น 1 /) . ตัวอย่างที่พบในเน็ต: austingroupbugs.net/view.php?id=83 ( IBM's z/OS resolves //pathname requests to MVS datasets (as opposed to the hierarchical filesystem (HFS)) (......) Additionally, z/OS would not accept or recognize additional "directory" or "file" components appended to such paths.... ไม่ใช่ยูนิกซ์อย่างแน่นอนแม้ว่า ^^)
Olivier Dulac

4
@DevSolar: interresting จริง ๆ (และน่าแปลกใจ) แต่เราควรติด POSIX เท่านั้นเนื่องจาก POSIX ทุกอย่างเป็นไปได้ ^^
Olivier Dulac

2
@edwardtorvalds เพราะบิตแรกคือ URL: file://เหมือนกับhttp://และเช่นนั้น ในโครเมียมที่นี่ที่ทำงานมีหน้าต่างเส้นทาง UNC ที่ฉันเปิดอยู่ตอนนี้คือfile:////$MACHINE/$SHARENAME/index.html(แม้ว่าด้วยเหตุผลบางอย่างมันก็เข้าใจfile://$MACHINE/...)
admalledd

คำตอบ:


90

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

ระบบที่ได้รับการบำรุงรักษาในปัจจุบัน:

  • Cygwin ชั้น POSIX สำหรับ Microsoft Windows ใช้สำหรับเส้นทางของ Windows UNC
  • UWINตั้งแต่ 1.3 อีกชั้น POSIX สำหรับ Windows ใช้อย่างน้อยสำหรับ//host/fileเส้นทางการแชร์ไฟล์เครือข่าย
  • @OlivierDulac IBM z / OSเป็นที่กล่าวถึงในการติดตาม POSIX ข้อผิดพลาด , z / OS แก้ไข//pathnameการร้องขอไปยังชุดข้อมูล MVSไม่ให้เครือข่ายไฟล์ ตัวอย่าง

ระบบดับ

แอปพลิเคชันที่จัดการ//foo/barเป็นพิเศษสำหรับเส้นทาง


3
การใช้//เนมสเปซได้รับการเสนอโดยผู้พัฒนาเคอร์เนล Linux บางตัวสำหรับสิ่งอำนวยความสะดวกข้อมูลเมตาของ Reiser4 แต่ฉันไม่คิดว่าข้อเสนอนี้จะได้รับแรงฉุดภายใน Namesys และไม่เคยมีการนำมาใช้
Jörg W Mittag

Windows เองใช้ POSIX API ... วิธีจัดการกับเครื่องหมายทับสองชั้นนำได้อย่างไร
เควิน

1
เราสามารถเพิ่มสิ่งนั้นบนเว็บทรัพยากรที่เริ่มต้นด้วยเครื่องหมายทับสองกำหนดรากที่แตกต่างจากเครื่องหมายทับเดียว
Alex Gittemeier

@ เควินใช่ฉันยังเชื่อ (ดูคำถาม) แม้ว่าฉันคิดว่ามันเป็นองค์ประกอบเสริมและเฉพาะในบางรุ่นของ Windows และตอนนี้หยุด หากคุณมีรายละเอียดเพิ่มเติมโปรดเพิ่มคำตอบ
Stéphane Chazelas

@AlexGittemeier ใช่คุณจะสังเกตว่ามันใช้จริงในคำตอบนี้ ;-)
Stéphane Chazelas

16

แอปพลิเคชั่นบางตัวที่ทำงานบน Unix-like ไม่ใช่ API ของระบบหรือปฏิบัติต่อ // foo / bar Paths เป็นพิเศษหรือไม่?

ฉันรับรู้ถึงแรงที่ใช้//depot/A/B/C/Dเส้นทางเพื่ออ้างถึงสถานีรถไฟ อย่างเลี่ยงไม่พ้นนอกจากนี้ยังสนับสนุนเส้นทางเมื่อลูกค้าจะชี้ไปที่//Client/C/D //depot/A/B/ที่นี่ FileSystem ท้องถิ่นอาจไม่มีเส้นทางเหล่านี้

p4 filelog //depot/A/B/C/Dจะแสดงประวัติของไฟล์นั้นแม้ว่าจะไม่มีไฟล์/depot/A/B/C/Dก็ตาม

p4 filelog C/D จะแสดงประวัติของไฟล์นั้นด้วยหากดำเนินการจาก Directory ที่เหมาะสม

การอ้างอิง: https://www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html


13

เมื่อหลายสิบปีที่แล้วTektronix Utek (Unix ที่ใช้ BSD 4.2 เป็นคนแรกใน National Semiconductors 32016ซีพียูและ Motorola 68020 s) ได้ให้สิ่งที่เรียกว่า DFS (ระบบไฟล์แบบกระจาย) ซึ่ง//foo/barอ้างถึง/barไฟล์บนfooเซิร์ฟเวอร์ dfs หลังจากนั้นล้าสมัยโดย NFS ของซัน

น่าเสียดายที่ฉันยังไม่ได้อ้างอิงถึงสิ่งนั้น แต่ในที่สุดฉันก็อาจพบเอกสาร Utek บางอย่างในห้องใต้ดินของฉันและอัปเดตคำตอบนี้


1
ได้รับการรับรองจากการสนทนา usenet นี้
Stéphane Chazelas

@ StéphaneChazelasฉันเชื่อว่าลิงก์นี้ไปยังการสนทนา Usenetดีกว่า สิ่งที่คุณเลือกมี Domain / OS แต่ไม่ใช่ Utek หรือข้อความถัดไป (จากคุณ)


การใช้งานของ Tektronix / BSD RFS เห็นได้ชัดว่าเมาท์ระบบไฟล์รีโมตบนไฟล์ปกติเพื่อหลีกเลี่ยงfindการอินสแตนซ์ที่จุดเมานท์ ผู้เขียนออกกฎอย่างชัดเจน//foo/bar(หรือการเชื่อมต่อของนิวคาสเซิล/../foo/bar) ที่นั่น
Stéphane Chazelas


7

ติดตามการนำจากคำตอบนี้ และอ่านหน้า 2-15 จากคู่มือจาก Bitsavers (ขอบคุณ@grawity )

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

นอกจากนี้ยังมีคู่มือรุ่นเก่าจากด้วย "First Printing: July, 1985" บนหน้า 1-4:

เครื่องหมายทับคู่ (//) ในรูปที่ 1-2 แสดงถึงระดับสูงสุดของแผนผังการตั้งชื่อซึ่งเป็นไดเรกทอรีรูทเครือข่าย

ดังนั้นเราจึงยืนยันว่า Domain / OS จาก Apollo ใช้//สำหรับรูทเครือข่าย


ผมคิดว่าคนที่แต่งตัวประหลาด grawity เป็นหลักโค้งลินุกซ์ dev
mikeserv

5

แอปพลิเคชั่นอื่น: Blenderปฏิบัติกับการนำหน้า//เป็นข้อมูลอ้างอิงไปยังไดเรกทอรีโครงการ (ไดเรกทอรีที่.blendบันทึกไฟล์) นี่คือหน้าคู่มือที่เกี่ยวข้อง

สิ่งนี้เป็นจริงสำหรับระบบปฏิบัติการที่ไม่เหมือนกับ Unix (เช่น Windows) เช่นกัน


5

ReactOSโครงการ - ซึ่งเป็นการนำฟรีและเปิดแหล่งที่มาของเคอร์เนล NT และ API ที่เกี่ยวข้องกัน - ได้ดำเนินการเห็นได้ชัดว่ายังดำเนินการของตัวเองInterixระบบย่อยเหมือน POSIX (แม้ว่า MS เดิม OS / 2 ระบบย่อยนอกจากนี้ยังกล่าวถึงในบริบทไม่มีการกล่าวถึง ทำจากอะนาล็อก ReactOS)

แม้ว่าความพยายามจะมีน้อยแต่fork()ก็เป็นความจริง นี่คือข้อความที่ตัดตอนมาจากหน้าโครงการของระบบย่อยดังที่แสดงไว้ในปัญหาที่เปิดอยู่ :

เส้นทาง

วิธีที่ดีที่สุดในการใช้พา ธ Win32 ในแอปพลิเคชัน POSIX คืออะไร ความคิด:

  • แปล//<device>/<path> เข้า\\.\<device>\<path> (มีกรณีพิเศษสำหรับตัวอักษรไดรฟ์ - //<letter>/<path>=> <letter>:\<path>- และหลบหนีพิเศษ//./<raw text>=> \\.\<raw text>. เส้นทาง UNC สามารถระบุ//unc/<path> ) //เส้นทางถูกสงวนไว้โดยมาตรฐานสำหรับพฤติกรรมการใช้งานที่เฉพาะเจาะจงและ//<letter>/ไวยากรณ์เพื่อหลบหนีเส้นทาง Win32 ถูกนำมาใช้กันอย่างแพร่หลายในสภาพแวดล้อมความเข้ากันได้ POSIX ที่มีอยู่

  • ฮิวริสติกที่รับรู้เส้นทาง Win32 "เปล่า" เช่นนี้

  • ค้นหากรณีตายสำหรับเส้นทาง Win32 และ//เส้นทาง(ไม่มาตรฐานให้ชนิดของพฤติกรรมการใช้งานที่เฉพาะเจาะจงสำหรับการนี้//เส้นทาง?)

ฉันไม่แน่ใจว่าคุณสมบัติดังกล่าวเป็นอย่างไรฉันไม่แน่ใจว่าได้ใช้งานไปแล้วจำนวนมาก แต่ฉันคิดว่านี่เป็นคำอธิบายปัญหาที่น่าสนใจ


XENIX ไม่มีระบบย่อย POSIX Windows มี AFAIK XENIX เป็น Unix (เริ่มแรกใช้ Unix V7 ซึ่ง Microsoft ซื้อสิทธิ์ใช้งานจาก AT&T)
Stéphane Chazelas

1
ดีอ่านที่นี่เช่นกันเกี่ยวกับระบบย่อย interix / Windows POSIX
Stéphane Chazelas

@ StéphaneChazelas - ค่อนข้าง ฉันเกือบจะต้องการแทนที่ลิงก์ของฉันด้วย แต่ท้ายที่สุดแล้วมันอิงกับความคิดเห็นเล็กน้อยและไม่ได้ใช้เป็นข้อมูลอ้างอิงจริงๆ ... แต่อย่าลบความคิดเห็นโปรดใช่ไหม
mikeserv

ไม่ว่าในกรณีใดมันไม่ได้กล่าวถึงการ//foo/barจัดการ ฉันไม่พบหลักฐานที่ชัดเจนว่าระบบย่อยของ Windows POSIX หรือ Interix จัดการกับพวกมันได้จริง
Stéphane Chazelas

@ StéphaneChazelas - ฉันไม่รู้ว่ามันเป็นเพียงแค่ incosistent มากหรือถ้าทิ้งออกเลือกส่วนหนึ่งเป็นเพียงการกำกับดูแล แต่ MKS lsaclคำสั่ง spec'd จะเข้าใจ\\machinename\driveletter:\pathขณะที่registryคำสั่งถูก spec'd ที่จะเข้าใจว่ารูปแบบหรือเลือก//ทางใดทางหนึ่ง เนื่องจากชุด MKS เป็นรุ่นก่อนของ Interix และเป็นสิ่งที่ MS ส่งมาสำหรับรุ่น 1/2 ฉันคิดว่า Interix ต้องยอมรับไวยากรณ์ที่เข้ากันได้สำหรับสิ่งพื้นฐาน
mikeserv

4

ในปี 1980 SEL / Gouldมีระบบปฏิบัติการ Unix ชื่อ UTX-32 ซึ่งเทียบเท่ากับ ใน Solaris คือระยะไกลเข้าถึงเส้นทางในพื้นที่ ฉันไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้ดังนั้นฉันจึงไม่รู้ว่านี่เป็น RFS หรือวิวัฒนาการแบบขนาน (หรือว่า AT&T//host/path/net/host/pathpathhostขโมย ได้มาจากโกลด์)


ขอบคุณ คุณจะมีการอ้างอิงใด ๆ เกี่ยวกับเรื่องนั้น ( //host/pathใน UTX-32) โดยบังเอิญหรือไม่?
Stéphane Chazelas

เป็นไปได้ว่าผมมีเอกสารคัดลอกยากในกล่องในห้องใต้หลังคาของฉัน แต่ไม่น่า - (1) ผมจำไม่ได้ว่าเคยมีเอกสารจำนวนมาก (ผมจำได้ว่าการบรรยายสรุปในช่องปากห้านาที); (2) แม้ว่าฉันมีฉันก็อาจไม่ได้เอากลับบ้าน (3) แม้ว่าฉันจะเอามันกลับบ้านฉันก็อาจจะโยนมันทิ้งไปในช่วง 30 ปีที่ผ่านมา; และ (4) แม้ว่าฉันจะยังมีอยู่ฉันก็อาจจะหามันไม่เจอ โอ้ด้วย (0) ฉันใช้เวลาห้านาที Googling (เพื่อประโยชน์) ก่อนที่จะโพสต์คำตอบของฉัน
สกอตต์

4

ฉันมีหน่วยความจำที่คลุมเครือว่ามีการใช้//host/pathสัญลักษณ์ใน AT&T SysV.3 ซึ่งเป็นส่วนหนึ่งของการนำRFS Remote File Sharingไปใช้ นี้ในที่สุดก็ถูกปล่อยปละละเลยรอบเวลา SysV.4 ได้รับการปล่อยตัวในความโปรดปรานของง่าย แต่ที่นิยมมากขึ้นNFSจากซันไมโครซิสเต็มส์

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

การอ้างอิง 1. ภาพรวมสถาปัตยกรรม RFS


3
ทำสิ่งนี้เกี่ยวกับ RFS //host/pathฉันไม่สามารถหาอ้างอิงถึง ดูเหมือนว่าจะต้องมีการติดตั้งระบบไฟล์เครือข่ายอย่างชัดเจน
Stéphane Chazelas

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

4

สถานะ POSIX ในเหตุผลสำหรับ A.4.12 การแก้ไขชื่อพา ธย่อหน้าที่ 9 และ 10:

ในระบบเครือข่ายบางระบบก่อสร้าง /../hostname/ จะใช้เพื่ออ้างถึงไดเรกทอรีรากของโฮสต์อื่นและ POSIX.1 อนุญาตพฤติกรรมนี้

ระบบเครือข่ายอื่น ๆ ใช้โครงสร้าง // ชื่อโฮสต์เพื่อจุดประสงค์เดียวกัน นั่นคือใช้เครื่องหมายสแลชเริ่มต้นสองครั้ง

นี้ดูเหมือนจะยืนยันว่า//หมายถึง "รากเครือข่าย" หรืออย่างน้อยว่าเป็นความคิดเมื่อกฎถูกรวมอยู่ใน POSIX


กฎจะปฏิบัติตามเพื่อลบความหมายใด ๆ ที่//อยู่ตรงกลางของพา ธ สำหรับชื่อพา ธ ที่/เริ่มต้น:

... เนื่องจากลำดับที่ไม่นำหน้าด้วยอักขระ <slash> สองตัวหรือมากกว่า
นั้นถือเป็น <slash> เดียว, ...

แน่นอนชื่อพา ธ//เริ่มต้นอาจขยายหรือเปลี่ยนการใช้งาน//ภายในชื่อพา ธ (ไม่ใช่ตอนเริ่มต้น) POSIX.1 อนุญาตสิ่งนี้ นี่เป็นการยืนยันครั้งสุดท้ายที่//อนุญาตเท่านั้นคือที่จุดเริ่มต้นของชื่อพา ธ

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