На яких системах // 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 (XENIX) і, можливо, шару Windows POSIX (хто-небудь може це підтвердити?).

Він використовується Cygwin, який також є POSIX-подібним шаром для Microsoft Windows. Чи є які-небудь системи Windows Windows? OpenVMS?

Для систем, де //foo/barє особливим, для чого він використовується? //host/pathдля доступу до мережевих файлових систем? Віртуальні файлові системи?

Чи застосовують деякі програми, що працюють на Unix-подібних (якщо це не API системи), //foo/barспеціально обробляти контури (у контекстах, де вони інакше трактуються /foo/barяк шлях до файлової системи)?


Редагувати , я з тих пір задав запитання в списку розсилки австинських груп про походження //foo/barобробки в специфікації, і обговорення цікаве прочитання (принаймні з точки зору археології).



1
@OlivierDulac, No. ls -ld ///також буде відображатись ///, lsпросто відображає файл, який йому наказано відображати так, як він був наданий. Я шукаю системи або програми, які розглядають // foo / var спеціально (не як шлях до файлової системи), як це робить Cygwin.
Стефан Шазелас

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.... не зовсім unix, хоча ^^).
Олів'є Дулак

4
@DevSolar: дійсно цікаво (і дивно), але ми повинні дотримуватися лише POSIX, оскільки поза POSIX все можливе ^^
Олів'є Дулак

2
@edwardtorvalds, тому що перший біт - це URL:, file://подібний до http://та іншого. На хромованому тут на роботі вікні UNC шлях, який я зараз відкрив, file:////$MACHINE/$SHARENAME/index.html(хоча чомусь це теж розуміє file://$MACHINE/...)
почитав

Відповіді:


90

Це компіляція та покажчик відповідей, наданих до цього часу. Ця публікація - це вікі спільноти , її може редагувати будь-хто зі 100+ репутацією, і ніхто не отримує від неї репутації. Сміливо опублікуйте свою відповідь і додайте посилання на неї сюди (або зачекайте, коли я це зроблю). В ідеалі ця відповідь має бути просто підсумком (з короткими записами, тоді як окремі відповіді містять деталі).

В даний час активно підтримуються системи:

Неіснуючі системи

Програми, які розглядаються //foo/barспеціально для доріжок


3
Використання //простору імен було запропоновано деякими розробниками ядра Linux для метаданих Reiser4, але я не думаю, що ця пропозиція ніколи не набирала тяги в Namesys, і не була реалізована.
Йорг W Міттаг

Windows сама реалізує POSIX API ... як це обробляє провідну подвійну косу рису?
Кевін

1
Ми можемо додати, що в Інтернеті ресурси, що починаються з подвійної косою рисою, визначають інший корінь, ніж це робить одна коса риса.
Алекс Гіттемейер

@Kevin, так, я теж вірю (див. Питання), хоча я вважаю, що це був необов'язковий компонент і лише в деяких варіантах Windows, і зараз він припинений. Якщо у вас є більше деталей, будь ласка, додайте відповідь.
Стефан Шазелас


16

Чи застосовують деякі програми, що працюють на Unix-лайках (якщо це не API системи), // foo / bar Paths?

Мені відомо, що Perforce використовує //depot/A/B/C/DШляхи для посилання на депо. Perforce також підтримує //Client/C/DШляхи, коли Клієнт вказує на //depot/A/B/. Тут локальна FileSystem може не мати цих Шляхів.

p4 filelog //depot/A/B/C/Dпокаже історію цього файлу, хоча файлу немає /depot/A/B/C/D.

p4 filelog C/D також покаже історію цього файлу, якщо він виконаний з відповідного каталогу.

Довідка: 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 Sun.

На жаль, я ще не посилаюся на це, але, можливо, я, можливо, знайду документацію Utek у своєму підвалі та оновлюю цю відповідь.



@ StéphaneChazelas Я вважаю, що це посилання на дискусію Usenet краще. Вибране вами має Domain / OS, але не Utek. Або наступне повідомлення (від вашого)


Реалізації Tektronix / BSD RFS, мабуть, змонтували віддалені файлові системи на звичайних файлах, щоб уникнути, findнаприклад, переходу точки монтажу. Автор явно виключає там //foo/bar(або з'єднання Ньюкасла /../foo/bar)
Stéphane Chazelas


7

Слідом за результатами цієї відповіді . І читати сторінку 2-15 із посібника від Bitsavers (спасибі @grawity ).

Спільні дані
Другий принцип дизайну розподіленої файлової системи Домен / ОС, спільний доступ за замовчуванням, передбачає глобальний єдиний простір імен. Простір імен розподіленої файлової системи видається таким користувачам, як гігантська файлова система тимчасового обміну. Це традиційний ієрархічний простір імен UNIX, за винятком того, що абсолютні назви шляхів можуть починатися з імені мережевого кореня (званий //). Можна також висловити імена шляхів відносно кореня локального вузла (каталогу /).

Існує також старіший посібник з «Першої друку: липень 1985 року». На сторінці 1-4:

Подвійні косої риски (//) на рисунку 1-2 представляють верхній рівень дерева імен, мережевий кореневий каталог.

Отже, ми маємо підтвердження, що домен / ОС від Apollo використовували //для мережевого кореня.


Я думаю, що хлопець із великої рогатості є головним архівом Linux-розробника .
mikeserv


5

Проект ReactOS - це безкоштовна та відкрита реалізація ядра NT та пов'язаних з ним API - очевидно, взяв на себе зобов'язання також реалізувати власну підсистему POSIX, схожу на Interix (хоча оригінальна підсистема MS / OS також згадується в контексті , не згадуючи виготовлений з аналога ReactOS) .

Хоча зусилля поки що були невеликими , fork()це, мабуть, реальність. Ось уривок зі сторінки проекту підсистеми, перелічений у відкритих випусках :

стежки

Який найкращий спосіб використовувати шляхи Win32 в додатках POSIX? ідеї:

  • translate //<device>/<path> into \\.\<device>\<path> (зі спеціальним регістром для букв диска - //<letter>/<path>=> <letter>:\<path>- і спеціальним escape //./<raw text>=> \\.\<raw text>. UNC-шляхи можна вказати за допомогою //unc/<path>) . //шляхи зарезервовані стандартом для поведінки, що //<letter>/залежить від впровадження, і синтаксис для виходу з шляхів Win32 широко використовується в існуючих середовищах сумісності POSIX

  • евристика для визнання "голих" шляхів Win32 як такої

  • нечутливий до регістру шлях та //шляхи Win32 (чи дозволяє стандарт цей тип поведінки для //шляхів?) .

Я не впевнений, як це кваліфікується, оскільки я не впевнений, наскільки це було реалізовано, але я подумав, що це корисно цікавий опис проблеми.


У XENIX не було підсистеми POSIX , у Windows був AFAIK. XENIX був Unix (спочатку базувався на Unix V7, який Microsoft придбав ліцензію AT&T).
Стефан Шазелас

1
Приємно читайте тут і про підсистему interix / Windows POSIX
Stéphane Chazelas

@ StéphaneChazelas - цілком. Я майже хочу замінити своє посилання на нього, але це в кінці кінців на думці і насправді не працює як посилання ... але не видаляйте коментар, будь ласка?
mikeserv

У будь-якому випадку в ньому не згадується //foo/barповодження. Я не знайшов надійних доказів, що підсистема Windows POSIX або Interix насправді ними керувала.
Стефан Шазелас

@ StéphaneChazelas - Я не знаю, якщо це було просто непослідовно, або якщо вийти з факультативної частини було лише наглядом, але команда MKS повинна точно lsaclрозуміти, \\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) випадково?
Стефан Хазелас

Цілком можливо, що у мене на горищі є документ на папері, але навряд чи - (1) я не пригадую, щоб коли-небудь було багато документації (пам’ятаю п’ятихвилинний усний інструктаж); (2) навіть якби я його мав, я б не взяв його додому; (3) навіть якщо я забрав його додому, я, певно, викинув його за останні 30 років; і (4) навіть якщо у мене все ще є, я, ймовірно, не зможу його знайти. О, також (0) Я витратив п’ять хвилин на Гуглінг (безрезультатно), перш ніж я опублікував свою відповідь.
Скотт

4

У мене розпливчаста пам'ять, що //host/pathпозначення використовувались на AT&T SysV.3 як частина його віддаленої реалізації файлів RFS . Це врешті-решт було відмовлено від часу виходу SysV.4 на користь простішого, але більш популярного NFS від Sun Microsystems.

Однак я не можу знайти жодних конкретних посилань на синтаксис, і документація, яку я переглянув лише зараз, схоже, вказує на те, що ідея користувача, яка явно визначає віддалене ім’я хоста, була б протистоїть принципу проектування незалежності від місця розташування.

Список літератури 1. RFS Архітектурний огляд


3
Повідомте це про RFS. Я не можу знайти посилання на //host/path. Здається, це означає, що мережеві файлові системи повинні бути встановлені явно.
Стефан Шазелас

Дякую за нагадування. Це одна з частин "документації, яку я переглянув", тому я додаю посилання на неї, якщо ви не заперечуєте. Я все ще спантеличую це; це може прийти до мене в наступний день або близько того.
roaima

4

POSIX стану в Обґрунтування для A.4.12 PathName Резолюція Пункти 9 і 10:

У деяких мережевих системах конструкція /../hostname/ використовується для посилання на кореневий каталог іншого хоста, і POSIX.1 дозволяє цю поведінку.

Інші мережеві системи використовують конструкцію // ім'я хоста з тією ж метою; тобто використовується подвійний початковий нахил.

Це, здається, підтверджує, що //означає "мережевий корінь", або принаймні, що це було ідеєю, коли це правило було включено в POSIX.


Дотримуйтесь правил, щоб видалити будь-яке значення //посередині шляху для /розпочатого імені Pathname:

... оскільки непровідні послідовності двох або більше знаків <косої частини>
розглядаються як один <косої>, ...

Звичайно, //розпочате Pathname може розширити або змінити використання //всередині Pathname (не на початку). POSIX.1 дозволяє це. Це останнє підтверджує, що єдині //дозволені є на початку Pathname.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.