Por que ls // fica pendurado no Cygwin?

0

Quando executo o comando ls // é o Cygwin, o shell trava por cerca de 12 segundos e, em seguida, informa o erro ls: reading directory '//': Permission denied . Lembro-me de ler em algum lugar que /some//path é interpretado como /some/path em caminhos POSIX e, consequentemente, quando executo o comando em uma máquina virtual Ubuntu, não há atraso e ls produz o conteúdo de / .

Não consigo encontrar nada sobre // na documentação especial de nomes de arquivos do Cygwin, então por que isso acontece e como posso reduzir o atraso?

Editar:

Acontece que \* caminhos são caminhos de rede no Windows. Quando eu desconectar meu computador de todas as redes, ls \ retornará uma listagem vazia imediatamente. Quando me conecto a algumas redes, recebo uma listagem de hosts na rede, mas em outras redes, encontro o problema descrito acima. Considerando isso, é a maneira de configurar o Windows para que o atraso seja reduzido, mesmo no caso de um erro de permissão?

    
por Vaelus 23.03.2016 / 17:13

3 respostas

1

Não é um problema do Cygwin, é um problema do Unix. Nos primeiros dias da rede de computadores, antes da Sun (Solaris) introduzir a sintaxe /net/hostname para acessar sistemas de arquivos remotos 1 , e o NFS permitia que sistemas de arquivos remotos fossem montados em pontos de montagem arbitrários (por exemplo, /mnt ou /home/username ) algumas versões do Unix implementadas uma sintaxe //hostname/pathname para o mesmo fim. Consulte Em quais sistemas é //foo/bar diferente de /foo/bar ? Ao longo dos anos, essa sintaxe caiu em desuso, cedendo (principalmente?) ao NFS.

No entanto, para permitir que esses sistemas legados sejam compatíveis com POSIX, o padrão explicitamente permite que // signifique algo diferente de / (no início de um caminho) :

If a pathname begins with two successive <slash> characters, the first component following the leading <slash> characters may be interpreted in an implementation-defined manner, although more than two leading <slash> characters shall be treated as a single <slash> character.
        (from near the end of the “Pathname Resolution” section)

- embora não especifique o que deve significar (se houver).

O Cygwin interpreta // praticamente o mesmo que o antigo /net , conforme documentado aqui . Ele faz referência à pasta “Rede” (pseudo-) do Windows - o que contém “This Computer” e outras máquinas detectáveis.

Veja também Unix: diferença entre o caminho que começa com / e // .

por 23.12.2017 / 04:14
0

link

Há também um diretório virtual // que permite enumerar os servidores de arquivos conhecidos na máquina local com ls.

    
por 26.03.2016 / 09:30
0

No meu computador, ls // também é executado lentamente, imprimindo alguns cannot access '//some-computer-name': No such file or directory e, no final, imprimindo alguns nomes de computador. Esses são PCs com Windows na rede local e, aparentemente, ls tenta se conectar a eles (não sabe para quê).

Por outro lado, dir \ é executado rapidamente e imprime os mesmos nomes de computador (sem mensagens de erro).

Eu não acho que haja uma maneira de configurar o Windows para evitar isso, parece-me um problema do Cygwin (ou recurso ). O melhor seria escrever para a lista de discussão do Cygwin sobre isso, pedindo para corrigir isso.

De qualquer forma, posso perguntar por que você executa ls // ?

    
por 20.04.2016 / 17:34