Su quali sistemi è // foo / bar diverso da / foo / bar?


114

In tutta la specifica POSIX, ci sono disposizioni ( 1 , 2 , 3 ...) per consentire alle implementazioni di trattare un percorso che inizia con due /appositamente.

Un'applicazione POSIX (un'applicazione scritta in base alle specifiche POSIX per essere trasportabile su tutti i sistemi POSIX compatibili) non può presumere che //foo/barsia la stessa /foo/bar(sebbene possano presumere che ///foo/barsia la stessa /foo/bar).

Ora quali sono quei sistemi POSIX (storici e ancora mantenuti) che trattano in modo //foospeciale? Ho creduto (ora mi è stato smentito ) che la fornitura POSIX è stata spinta da Microsoft per la sua variante Unix (XENIX) e forse per il livello POSIX di Windows (qualcuno può confermarlo?).

Viene utilizzato da Cygwin che è anche un livello simile a POSIX per Microsoft Windows. Esistono sistemi non Microsoft Windows? OpenVMS?

Sui sistemi in cui //foo/barè speciale, a cosa serve? //host/pathper l'accesso ai file system di rete? File system virtuali?

Alcune applicazioni in esecuzione su Unix-like —se non l'API di sistema — trattano i //foo/barpercorsi in modo speciale (in contesti in cui altrimenti trattano /foo/barcome il percorso sul filesystem)?


Modifica , da allora ho posto una domanda sulla mailing list del gruppo austin sull'origine del //foo/bartrattamento nelle specifiche e la discussione è una lettura interessante (almeno dal punto di vista dell'archeologia).



1
@OlivierDulac, ls -ld ///visualizza anche No. ///, lsvisualizza solo il file che gli viene detto di visualizzare come è stato dato. Sto cercando sistemi o applicazioni che trattano // foo / var specialmente (non come un percorso sul filesystem) come fa Cygwin.
Stéphane Chazelas,

1
standard ( pubs.opengroup.org/onlinepubs/009695399/basedefs/… ) dice, come hai detto, "Un percorso che inizia con due barre successive può essere interpretato in modo definito dall'implementazione" (più di 2 si risolve in 1 /) . Un esempio trovato in rete: 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.... non esattamente unix, però ^^).
Olivier Dulac il

4
@DevSolar: davvero interessante (e sorprendente), ma dovremmo attenerci solo a POSIX, poiché su POSIX tutto è possibile ^^
Olivier Dulac

2
@edwardtorvalds perché il primo bit è l'URL:, file://simile a http://e simili. Su Chrome qui al lavoro è un percorso UNC di Windows che ho aperto ora file:////$MACHINE/$SHARENAME/index.html(anche se per qualche ragione capisce anche file://$MACHINE/...)
admalledd

Risposte:


90

Questa è una raccolta e un indice delle risposte fornite finora. Questo post è wiki della comunità , può essere modificato da chiunque abbia più di 100 reputazione e nessuno ne ottiene la reputazione. Sentiti libero di pubblicare la tua risposta e aggiungere un link qui (o attendere che io lo faccia). Idealmente, questa risposta dovrebbe essere solo un sommario (con voci brevi mentre le altre risposte individuali avrebbero i dettagli).

Sistemi attualmente gestiti attivamente:

Sistemi defunti

Applicazioni che trattano //foo/barappositamente per i percorsi


3
L'uso dello //spazio dei nomi è stato proposto da alcuni sviluppatori del kernel Linux per le strutture di metadati di Reiser4, ma non credo che questa proposta abbia mai preso piede all'interno di Namesys, né è mai stata implementata.
Jörg W Mittag,

Windows stesso implementa l'API POSIX ... come gestisce una doppia barra iniziale?
Kevin

1
Possiamo aggiungere che sul Web, le risorse che iniziano con una doppia barra definiscono una radice diversa rispetto alla barra singola.
Alex Gittemeier,

@Kevin, sì, ci credo anche (vedi la domanda), anche se penso che fosse un componente opzionale e solo su alcune varianti di Windows e ora interrotto. Se hai maggiori dettagli, aggiungi una risposta.
Stéphane Chazelas,


16

Alcune applicazioni in esecuzione su Mi piace di Unix, se non l'API di sistema, trattano in modo specifico i percorsi // foo / bar?

Sono a conoscenza di Perforce che utilizza //depot/A/B/C/DPercorsi per fare riferimento al deposito. Perforce supporta anche //Client/C/DPercorsi, quando il Cliente punta //depot/A/B/. Qui, il FileSystem locale potrebbe non avere questi percorsi.

p4 filelog //depot/A/B/C/Dmostrerà la cronologia di quel file, anche se non ci sono file /depot/A/B/C/D.

p4 filelog C/D mostrerà anche la cronologia di quel file, se eseguito dalla directory appropriata.

Riferimento: https://www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html


13

Diversi decenni fa, Tektronix Utek (Unix basato su BSD 4.2, prima su CPU National Semiconductors 32016 e poi Motorola 68020 s) stava fornendo qualcosa chiamato DFS (file system distribuito) in base al quale //foo/barsi riferiva al /barfile sul fooserver dfs. In seguito fu obsoleto da Sun NFS.

Sfortunatamente, non ho ancora fatto riferimento a questo, ma alla fine potrei trovare della documentazione di Utek nella mia cantina e aggiornare questa risposta.



@ StéphaneChazelas Credo che questo link alla discussione Usenet sia migliore. Quello che hai scelto ha Dominio / OS ma non Utek. O il messaggio successivo (dal tuo)


Le implementazioni di Tektronix / BSD RFS apparentemente montavano file system remoti su file regolari per evitare findad esempio di attraversare il punto di montaggio. L'autore esclude esplicitamente //foo/bar(o la connessione di Newcastle /../foo/bar) lì
Stéphane Chazelas,


7

Seguendo l'esempio di questa risposta . E leggendo la pagina 2-15 dal manuale di Bitsavers (grazie a @grawity ).

Dati condivisi
Il secondo principio di progettazione del file system distribuito Dominio / OS, la condivisione per impostazione predefinita, implica uno spazio dei nomi uniforme globale. Lo spazio dei nomi del file system distribuito appare agli utenti come quello di un file system di multiproprietà gigante. È uno spazio dei nomi gerarchico UNIX tradizionale, tranne per il fatto che i nomi di percorso assoluti possono iniziare con il nome della radice di rete (chiamato //). È anche possibile esprimere percorsi relativi alla radice del nodo locale (la directory /).

C'è anche un manuale più vecchio di "Prima stampa: luglio 1985". A pagina 1-4:

Le doppie barre (//) nella Figura 1-2 rappresentano il livello superiore dell'albero dei nomi, la directory radice della rete.

Quindi, abbiamo la conferma che il dominio / sistema operativo di Apollo utilizzato //per il root di rete.


Penso che il ragazzo della gravità sia un grande sviluppatore di Linux .
Mikeserv,


5

Il progetto ReactOS - che è un'implementazione gratuita e open source del kernel NT e delle API correlate - si è apparentemente impegnato a implementare anche il proprio sottosistema POSIX simile a Interix (sebbene anche il sottosistema OS / 2 originale di MS sia menzionato nel contesto , nessuna menzione è composto da un analogo ReactOS) .

Sebbene gli sforzi finora siano stati piccoli , fork()sembra essere una realtà. Ecco un estratto dalla pagina del progetto del sottosistema, come elencato in numeri aperti :

percorsi

Qual è il modo migliore per utilizzare i percorsi Win32 nelle applicazioni POSIX? idee:

  • translate //<device>/<path> in \\.\<device>\<path> (con un caso speciale per le lettere di unità - //<letter>/<path>=> <letter>:\<path>- e lo speciale escape //./<raw text>=> \\.\<raw text>. I percorsi UNC possono essere specificati con //unc/<path>) . //i percorsi sono riservati dallo standard per comportamenti specifici dell'implementazione e la //<letter>/sintassi per sfuggire ai percorsi Win32 è ampiamente utilizzata negli ambienti di compatibilità POSIX esistenti

  • euristica per riconoscere i percorsi "nudi" di Win32 come tali

  • ricerca senza distinzione tra maiuscole e minuscole per percorsi e //percorsi Win32 (lo standard consente questo tipo di comportamento specifico per l'implementazione per i //percorsi?) .

Non sono sicuro di come si qualifichi poiché non sono sicuro di quanto sia stato implementato, ma ho pensato che fosse una descrizione utilmente interessante del problema.


XENIX non aveva un sottosistema POSIX , Windows aveva AFAIK. XENIX era un Unix (inizialmente basato su Unix V7 di cui Microsoft ha acquistato una licenza da AT&T).
Stéphane Chazelas,

1
Bella lettura anche qui sul sottosistema POSIX di interix / Windows
Stéphane Chazelas,

@ StéphaneChazelas - abbastanza. Voglio quasi sostituire il mio link con esso, ma è un po 'basato sull'opinione alla fine e non funziona davvero come riferimento ... ma non cancellare il commento, per favore?
Mikeserv,

In ogni caso, non menziona la //foo/bargestione. Non ho trovato prove evidenti che il sottosistema POSIX di Windows o Interix li abbiano effettivamente gestiti finora.
Stéphane Chazelas,

@ StéphaneChazelas - Non so se fosse solo estremamente incoerente, o se tralasciare la parte facoltativa fosse solo una svista, ma il lsaclcomando MKS è tenuto a capire \\machinename\driveletter:\pathmentre il suo registrycomando è stato progettato per capire quella forma o facoltativamente in// entrambi i modi. Dato che il kit MKS era il predecessore di Interix ed era ciò che MS spediva per le versioni 1/2, penso che Interix avrebbe dovuto accettare una sintassi compatibile per una cosa così basilare.
Mikeserv,

4

Negli anni '80, SEL / Gould aveva un sistema operativo Unix chiamato UTX-32 in cui era equivalente a Solaris; cioè, accedere in remoto al percorso sull'host . Non riesco a trovare alcuna documentazione al riguardo, quindi non so se si trattasse di RFS o evoluzione parallela (o se AT&T//host/path/net/host/pathpathhostha rubato acquisito da Gould).


Grazie. Ti capita di avere qualche riferimento su questo ( //host/pathin UTX-32), per caso?
Stéphane Chazelas il

È possibile che io abbia un documento cartaceo in una scatola nella mia soffitta, ma è improbabile - (1) Non ricordo di aver mai avuto molta documentazione (ricordo un briefing orale di cinque minuti); (2) anche se lo avessi, non avrei potuto portarlo a casa; (3) anche se l'ho portato a casa, probabilmente l'ho buttato fuori un po 'di tempo negli ultimi 30 anni; e (4) anche se ce l'ho ancora, probabilmente non riuscirò a trovarlo. Oh, anche (0) ho passato cinque minuti a cercarlo su Google (inutilmente) prima di pubblicare la mia risposta.
Scott,

4

Ho una vaga memoria che la //host/pathnotazione è stata utilizzata su AT&T SysV.3 come parte della sua implementazione di RFS Remote File Sharing . Questo alla fine è stato abbandonato nel periodo in cui SysV.4 è stato rilasciato a favore della NFS più semplice ma più popolare di Sun Microsystems.

Tuttavia, non riesco a trovare riferimenti concreti alla sintassi e la documentazione che ho esaminato in questo momento sembra indicare che l'idea dell'utente che specifica esplicitamente un nome host remoto si sarebbe opposta al principio di design dell'indipendenza della posizione.

Riferimenti 1. Panoramica di RFS Architectural


3
Ho trovato questo su RFS. Non riesco a trovare riferimenti a //host/path. Sembra implicare che i file system di rete debbano essere montati esplicitamente.
Stéphane Chazelas,

Grazie per il promemoria. Questo è uno dei pezzi di "documentazione che ho esaminato", quindi aggiungerò un link se non ti dispiace. Sono ancora perplesso su questo; potrebbe venire da me il giorno dopo o così.
roaima,

4

POSIX afferma nel Razionale per A.4.12 Pathname risoluzione Paragrafi 9 e 10:

In alcuni sistemi in rete la costruzione /../hostname/ viene utilizzata per fare riferimento alla directory principale di un altro host e POSIX.1 consente questo comportamento.

Altri sistemi in rete usano il costrutto // nomehost per lo stesso scopo; cioè, viene utilizzata una doppia barra iniziale.

Ciò sembra confermare che //significa "root di rete", o almeno quello era l'idea quando la regola era inclusa in POSIX.


Le regole seguono per rimuovere qualsiasi significato //nel mezzo di un percorso per un /Nome percorso avviato:

... poiché le sequenze non iniziali di due o più caratteri <slash>
vengono trattate come un singolo <slash>, ...

Naturalmente, un //Pathname avviato può espandere o modificare l'uso di //Inside Pathname (non all'inizio). POSIX.1 lo consente. Quest'ultimo conferma che gli unici //ammessi sono all'inizio di un Pathname.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.