Em toda a especificação POSIX, há provisão ( 1 , 2 , 3 ...) para permitir que as implementações tratem um caminho que começa com dois /
especialmente.
Um aplicativo POSIX (um aplicativo gravado na especificação POSIX para ser portátil em todos os sistemas compatíveis com POSIX) não pode assumir //foo/bar
o mesmo valor /foo/bar
(embora eles possam assumir ///foo/bar
o mesmo valor /foo/bar
).
Agora, quais são os sistemas POSIX (históricos e ainda mantidos) que tratam //foo
especialmente? Eu acreditava (agora estou provado errado ) que a provisão POSIX foi enviada pela Microsoft pela sua variante Unix (XENIX) e possivelmente pela camada POSIX do Windows (alguém pode confirmar isso?).
É usado pelo Cygwin, que também é uma camada semelhante ao POSIX para Microsoft Windows. Existem sistemas que não sejam do Microsoft Windows? OpenVMS?
Em sistemas onde //foo/bar
é especial, para que é usado? //host/path
para acesso a sistemas de arquivos de rede? Sistemas de arquivos virtuais?
Alguns aplicativos em execução no estilo Unix - se não a API do sistema - tratam os //foo/bar
caminhos especialmente (em contextos onde eles tratam /foo/bar
como o caminho no sistema de arquivos)?
Edit , desde então, fiz uma pergunta na lista de discussão do grupo austin sobre a origem do //foo/bar
manuseio nas especificações, e a discussão é uma leitura interessante (pelo menos do ponto de vista da arqueologia).
fonte
ls -ld ///
também será exibido///
,ls
apenas exibe o arquivo que está sendo solicitado a exibir como foi fornecido. Estou procurando por sistemas ou aplicativos que tratem // foo / var especialmente (não como um caminho no sistema de arquivos) como o Cygwin.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.
... não exatamente unix, no entanto ^^).file://
mesma formahttp://
e assim por diante . Em cromo aqui no trabalho um caminho janelas UNC que eu tenho aberto agora éfile:////$MACHINE/$SHARENAME/index.html
(embora por algum motivo ele também entendefile://$MACHINE/...
)Respostas:
Esta é uma compilação e índice das respostas dadas até agora. Este post é um wiki da comunidade , pode ser editado por qualquer pessoa com mais de 100 reputação e ninguém obtém reputação dele. Sinta-se à vontade para postar sua própria resposta e adicionar um link aqui (ou aguarde que eu faça isso). Idealmente, essa resposta deve ser apenas um resumo (com entradas curtas enquanto outras respostas individuais teriam os detalhes).
Sistemas atualmente mantidos ativamente:
//host/file
caminhos de compartilhamento de arquivos de rede.//pathname
solicitações para conjuntos de dados MVS , não para arquivos de rede. Exemplo .Sistemas extintos
@BinaryZebra Apollo Domain / OS (confirmado). Também mencionada na Descrição Oficial UNC (Convenção Universal de Nomenclatura) como a possível origem das
//host/path
notações ( consulte também a página 2-15).De acordo com Donn Terry , foi a HP (que adquiriu a Apollo Computers) que promoveu a inclusão dessa provisão nas especificações POSIX para Domain / OS.
@jillagre Tektronix Utek ( corroborado ), onde
//host/path
é um caminho em um sistema de arquivos distribuído .//123/path
/path
//host/path
nosistema de compartilhamento remoto de arquivos RFS (descontinuado em SVR4).//host/path
.Aplicativos que tratam
//foo/bar
especialmente para caminhos//depot/A/B/C/D
se refere a um caminho em um depósito .//
prefixo para caminhos relativos (para a combinação associada ao bloco de dados) .fonte
//
namespace foi proposto por alguns desenvolvedores de kernel Linux para os recursos de metadados do Reiser4, mas acho que essa proposta nunca ganhou força no Namesys, nem foi implementada.Estou ciente do Perforce, que usa
//depot/A/B/C/D
Caminhos para se referir ao Depósito. O Perforce também suporta//Client/C/D
Caminhos, quando o Cliente está apontando//depot/A/B/
. Aqui, o sistema de arquivos local pode não ter esses caminhos.p4 filelog //depot/A/B/C/D
mostrará o histórico desse arquivo, mesmo que não haja nenhum arquivo/depot/A/B/C/D
.p4 filelog C/D
também mostrará o histórico desse arquivo, se executado a partir do diretório apropriado.Referência: https://www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html
fonte
Várias décadas atrás, a Tektronix Utek (Unix baseado em BSD 4.2, primeiro nas CPUs National Semiconductors 32016 e depois na Motorola 68020 s) estava fornecendo algo chamado DFS (sistema de arquivos distribuído) sob o qual
//foo/bar
se referia ao/bar
arquivo nofoo
servidor dfs. Mais tarde, foi obsoleto pelo NFS da Sun.Infelizmente, ainda não fiz referência a isso, mas posso encontrar alguma documentação da Utek em minha adega e atualizar esta resposta.
fonte
find
por exemplo, atravessar o ponto de montagem. O autor descarta explicitamente//foo/bar
(ou as conexões de Newcastle/../foo/bar
) láSeguindo o exemplo de esta resposta . E lendo a página 2-15 do manual da Bitsavers (obrigado @grawity ).
Há também um manual mais antigo da "Primeira impressão: julho de 1985". Na página 1-4:
Portanto, temos a confirmação de que o domínio / sistema operacional da Apollo usou
//
como raiz da rede.fonte
Outra aplicação: O Blender trata um líder
//
como uma referência ao diretório do projeto (o diretório em que o.blend
arquivo é salvo). Aqui está a página do manual relevante .Isso também é válido para sistemas operacionais que não sejam do tipo Unix (ou seja, Windows).
fonte
O projeto ReactOS - que é uma implementação livre e de código aberto do kernel do NT e APIs relacionadas - aparentemente se comprometeu a implementar também seu próprio subsistema POSIX, semelhante ao Interix (embora o subsistema OS / 2 original da MS também seja mencionado no contexto , sem menção) é feito de um análogo do ReactOS) .
Embora os esforços até agora tenham sido pequenos ,
fork()
é aparentemente uma realidade. Aqui está um trecho da página do projeto do subsistema, conforme listado em edições em aberto :Não tenho certeza de como isso se qualifica, pois não tenho certeza de quanto disso foi implementado, mas achei que era uma descrição útil e interessante do problema.
fonte
//foo/bar
manuseio. Não encontrei fortes evidências de que o subsistema Windows POSIX ou o Interix realmente os tenha manipulado até agora.lsacl
comando MKS deve entender\\machinename\driveletter:\path
enquanto seuregistry
comando deve entender essa forma ou opcionalmente de//
qualquer maneira. Como o kit MKS foi o antecessor do Interix e foi o que a Microsoft enviou para as versões 1/2, eu acho que o Interix deve ter aceitado uma sintaxe compatível para algo tão básico.Nos anos 80, a SEL / Gould possuía um sistema operacional Unix chamado UTX-32, equivalente ao Solaris; ou seja, acessar remotamente o caminho no host . Não consigo encontrar nenhuma documentação, portanto não sei se isso foi RFS ou evolução paralela (ou se a AT&T
//host/path
/net/host/path
path
host
roubouadquirida de Gould).fonte
//host/path
no UTX-32), por acaso?Tenho uma vaga memória de que a
//host/path
notação foi usada no AT&T SysV.3 como parte de sua implementação de Compartilhamento Remoto de Arquivos RFS . Isso acabou sendo abandonado na época em que o SysV.4 foi lançado em favor do NFS mais simples, porém mais popular, da Sun Microsystems.No entanto, não consigo encontrar referências concretas à sintaxe, e a documentação que revi agora parece indicar que a idéia do usuário especificando explicitamente um nome de host remoto teria se oposto ao princípio de design da independência de local.
Referências 1. Visão geral da arquitetura do RFS
fonte
//host/path
. Parece implicar que os sistemas de arquivos de rede precisam ser montados explicitamente.O POSIX declara no Racional para A.4.12 Parâmetros de Resolução de Nome de Caminho 9 e 10:
Isso parece confirmar que
//
significa "raiz da rede", ou pelo menos essa foi a ideia quando a regra foi incluída no POSIX.As regras seguem para remover qualquer significado
//
no meio de um caminho para um nome de/
caminho iniciado:Obviamente, um nome de
//
caminho iniciado pode expandir ou alterar o uso de//
dentro de um nome de caminho (não no início). O POSIX.1 permite isso. Este último confirma que os únicos//
permitidos estão no início de um nome de caminho.fonte