Windows Linux Subsystem - Acessando arquivos fora do Ubuntu


90

Por que, quando crio um arquivo no Windows, por exemplo, não consigo vê-lo no subsistema Linux no Windows 10 (bash.exe)

A captura de tela deve explicar.

Pasta: OMG foi criado no Windows Explorer. A pasta OMGBash foi criada com o subsistema Linux bash.exe

Quando uma pasta OU arquivo é criado fora do bash.exe, nunca consigo vê-lo, independentemente de permissões e propriedade.

Para mostrar as informações que tive que usar o Cygwin para mostrar permissões de arquivo, também alterei as permissões para ver se a pasta seria exibida. (As duas janelas de comando na parte inferior)

Captura de tela mostrando permissões de pasta, bash.exe e Cygwin:

insira a descrição da imagem aqui

Estou tentando mover todos os meus scripts Cygwin para o subsistema Linux, mas não gosto de recriar todos os arquivos, depois copiar e colar usando o bash, reformatar e usar o Dos2unix (muito longo).

Encontrei isso no GitHub para o subsistema Linux:

copiar diretamente para o subsistema Linux do Windows não é suportado, de acordo com a discussão em outros tickets. Há um diretório em AppData em algum lugar (eu esqueço onde) que parece conter os arquivos do sistema de arquivos WSL. Mas se você colocar novos arquivos ou modificar os arquivos existentes, suas alterações não serão refletidas corretamente na WSL.

Meu melhor palpite é que o Linux precisa armazenar metadados diferentes (e mais informações de armazenamento em cache, etc, já que seu modelo de buffer de disco também é diferente) sobre seus arquivos do que o Windows, e que isso é atualmente implementado armazenando a cópia principal da estrutura do sistema de arquivos Linux em um banco de dados de algum tipo, e apenas usando o sistema de arquivos Windows como uma loja BLOB conveniente para esse banco de dados.

Se você realmente precisar fazer isso, uma solução alternativa seria escrever um script .bat de arrastar e soltar ou algo do tipo bash.exe -c "mv% 1 / home / $ USER /". (Você precisará fazer um trabalho inteligente com sed e tr, provavelmente, para converter% 1 em um caminho WSL válido.)

Como alternativa - você poderia colocar seus arquivos em um diretório do Windows e, dentro da WSL, faça "cd ~; ln -s / mnt / c / caminho / para / meus / arquivos" para que eles pareçam estar no seu homedir da WSL?


É possível montar o Windows HDD no ambiente Linux? Dessa forma ele deve mostrar todos os arquivos em tempo real ... (ou mesmo apenas o diretório da casa Cygwin)
Hastur

3
Ótima idéia, mas infelizmente os arquivos não estão visíveis. A maneira de contornar isso é copiar arquivos do diretório do Windows para o diretório do sub-sistema Linux via Bash.exe. Dessa forma, é necessário remover cp -r --no-preserve=all as permissões anteriores. Ainda assim, se você quiser fazer alterações pesadas, não poderá usar um aplicativo do Windows para editar o arquivo no LinuxSubSystem. É necessário editá-lo no diretório do Windows e copiá-lo. Agora eu sei que isso, a sua viável, mas eu estava sob a impressão do Sub Sistema Linux era mais nativa / integrado ao Windows que um OS Isolated
Dave Hamilton

Você pode acompanhar o andamento desse problema (manipulação de arquivos entre Windows e WLS) em github.com/Microsoft/BashOnWindows/issues/1051
Gaia

Se você instalar uma distribuição da Windows Store, o sistema de arquivos estará em %LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs.
Ian Kemp

Respostas:


101

Não tenho certeza se estou entendendo mal a sua pergunta, mas o ubuntu bash (janela superior direita) deve ter acesso aos seus discos baseados no Windows em /mnt. Por exemplo, na minha máquina /mnt/c/Users/Scott/Desktopestá a área de trabalho do Windows e posso ler / gravar arquivos no vi para ex. Não acredito que o oposto seja verdadeiro ainda. Ou seja, não acho que você possa explorar o mundo do bash a partir do Windows Explorer.

O que tenho feito como desenvolvedor é hospedar projetos no meu d: e apontar as ferramentas baseadas em linux para essa /mnt/d/projects/someproject/pasta.

Atualize as compilações do Windows periodicamente, pois elas parecem estar corrigindo muitos problemas com cada compilação, especialmente em links simbólicos e cruzando os limites do FS entre Linux / Windows.


11
Você está correto, acho que pulei a arma um pouco. Enquanto o Bash pode acessar arquivos do Windows, o Windows não pode copiar arquivos para o diretório Linux Subsystem. (ele pode ser copiado, mas o Bash não pode vê-los, pois preserva as permissões dos arquivos) Quando instalei o bash, pensei que a coisa mais lógica era mover meus projetos de um ambiente Linux para outro (tentativa de excluir Cwygin) e é isso que me levou a seguir o caminho das dores de cabeça. Eu configurei meu Bashrc agora para ter um diretório inicial do meu ambiente Linux anterior agora e trabalhar a partir daí. Obrigado pela sua resposta.
Dave Hamilton

Espere, como você consegue / mnt / d aparecer? por exemplo, quando conecto um telefone via MTP, ele aparece sob um caminho como "This PC \ PhoneName", mas não há uma letra de unidade associada a ele.
Michael

Os links simbólicos funcionam se você não tiver uma barra final. Além disso, você precisa ter os arquivos no lado do Windows do sistema de arquivos para fazer coisas como projetos Django executadas localmente e acessá-los no navegador
Zags

mas os arquivos linux não são atualizados quando eu modifico os arquivos do windows?!?!
PrimitiveNom

20

@ scottt732 respondeu lindamente.

Apenas uma dica para desenvolvedores que trabalhariam no Windows e gostariam de acessar esses arquivos rapidamente no Subsistema Linux. Você pode usar links simbólicos .

Por exemplo, se você estiver trabalhando em um projeto d:/projects/web-project, poderá criar um link simbólico no local /var/www/web-projecte todos os arquivos alterados no Windows estarão prontamente disponíveis para serem acessados ​​no Linux Bash.

Para isso, você usará lncomandos como este

ln -s  /mnt/d/projects/web-project  /var/www/web-project

Na linha acima, /mnt/ddeveria ser a sua unidade d no Windows. Configure seu host virtual Apache para esse caminho e você estará pronto para começar.


na verdade, ele não é sincronizado ... a menos que eu tenha que reiniciar o servidor toda vez?
PrimitiveNom

@ Anthony seu link simbólico, portanto você não precisa reiniciar o servidor para isso. Na verdade, isso não é sincronizado, está apenas apontando para essa pasta / caminho.
Riz

11
Eu descobri o problema. Foi porque o arquivo CSS teve um traço no nome, como, por exemplo css-file.css,. Eu postei sobre esse problema aqui .
PrimitiveNom

9

Recomendamos que você não copie / crie / atualize arquivos Linux usando aplicativos do Windows .

Em vez disso, armazene arquivos no sistema de arquivos do Windows (por exemplo c:\dev\project) que você deseja editar arquivos usando as ferramentas do Windows e / ou construa / teste / execute usando as ferramentas / tempos de execução / plataformas do Linux (por exemplo, via /mnt/c/dev/project).

Em seu cenário específico, se você quiser copiar seus arquivos Cygwin em Bash, então Bash aberta e copie os arquivos de sua pasta Cygwin em C: na ~/, como este: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/)

HTH.


1

Eu precisava trabalhar com PyCharm / eclipse no Windows 10, enquanto que para executar / testind precisava de um ambiente Linux;

Eu tive problemas para fazer check-out do git no subsistema Linux e editar com arquivos PyCharm não eram vistos imediatamente e tinham problemas;

devcode=/DevCode

if [ ! -L $devcode ]; then
     ln -s /mnt/c/DevCode /DevCode 
fi

Eu tinha o exposto acima no meu .bashrc na área Ubuntu. Está funcionando perfeitamente. Eu poderia editar o Windows e executar / testar no Ubuntu sem problemas.


0

Eu tinha uma necessidade semelhante de copiar arquivos entre o WSL e o win10. Acabei ativando o sshd na instalação do Ubuntu para que eu pudesse ssh no Linux a partir do win10. Então eu uso o winscp para copiar arquivos para frente e para trás. Não é o ideal, mas não copio arquivos com muita frequência. Tentei encontrar a postagem que usei para ativar o sshd, mas não consigo localizá-la.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.