WSL - Onde estão os arquivos?
Durante muito tempo utilizei apenas Linux para tudo; servidor e desktop.
Porém, há pouco mais de um ano, comecei a trabalhar para uma empresa que forneceu um notebook deles para executar o trabalho.
Tive que voltar a utilizar o Windows.
Ainda bem que hoje em dia existe o WSL!
(Não é perfeito. Não é rápido. Mas é bom o suficiente para eu agradecer a existência.)
WSL?
Para quem ainda não está familiarizado com o assunto...
Não estou falando do World Surf League, nem do Medina ou da Tatiana. : ))
O WSL em questão é o Windows Subsystem for Linux, ou Subsistema Windows para Linux.
Um recurso que permite executar um ambiente Linux dentro do Windows de forma nativa, sem a necessidade de máquinas virtuais pesadas ou de dual boot, soluções que utilizei no passado.
Enfim... Com o tal WSL não me sinto um peixe fora d'água utilizando o Windows.
Mas, afinal, onde estão os arquivos?
No Linux a pasta raiz, onde estão todas as subpastas e arquivos do sistema, é a "/".
No Windows a pasta raiz (simplificando) é a "C:\".
Acontece que, ao acessar o Linux com o WSL o conteúdo que vemos na pasta raiz é diferente do que vemos na pasta raiz do Windows, mesmo estando na mesma máquina.
OK. Confesso que era até esperado isso. Cada ambiente possui sua própria árvore de diretórios e seu próprio sistema de arquivos.
Mas, e aí? Como vemos no Windows um arquivo que criei no Linux, ou vice-versa?
Daí a pergunta: onde estão os arquivos?
Vamos utilizar como exemplo uma pasta que, como programador, tenho o costume de criar: "dev", onde centralizo meus projetos.
No Windows crio uma pasta "dev" na minha pasta de usuário. O caminho completo dessa pasta fica assim: "C:\Users\anselmo\dev".
No Linux (WSL), da mesma forma, crio uma pasta "dev" na minha pasta de usuário. O caminho completo dessa pasta fica assim: "/home/anselmo/dev".
Caso você estranhe esses caminhos, não vou me aprofundar muito aqui, mas vou esclarecer três pontos:
- Para separar cada parte do caminho é utilizado:
- Em Windows: barra invertida ("\").
- Em Linux: barra normal ("/").
- Caminhos iniciam:
- Em Windows: Sempre com uma letra, identificadora de um disco local, seguida de dois pontos (":"). Ou duas barras invertidas ("\\") seguidas do nome de um servidor.
- Em Linux: Sempre apenas com uma barra normal ("/").
- Variações de maiúsculas e minúsculas nos nomes de arquivos e pastas:
- Em Windows: São ignoradas. Ou seja, uma pasta "User" pode ser acessada como "user"
- Em Linux: Não são ignoradas. Ou seja, uma pasta "User" não é acessada como "user".
Tendo em vista esse contexto...
Estando no Linux (WSL), como acesso arquivos do Windows?
Do ponto de vista do Linux o "C:\" do Windows se encontra no "/mnt/c/".
Desta forma, para listar o conteúdo da minha pasta "dev" no Windows utilizo o seguinte comando:
ls -la /mnt/c/Users/anselmo/dev/
Estando no Windows, como acesso arquivos do Linux (WSL)?
Do ponto de vista do Windows o "/" do Linux se encontra no "\\wsl.localhost\NomeDaDistribuição\".
Como saber qual é o "NomeDaDistribuição"?
Basta acessar, pelo Explorer, o endereço "\\wsl.localhost"
A maioria das pessoas que usam o WSL só terá uma subpasta nesse local. E provavelmente terá o nome "Ubuntu", afinal, essa é a distribuição padrão do WSL.
É possível instalar mais de um sistema Linux no WSL e, nesse caso, aparecerão mais subpastas, uma para cada sistema. Esse cenário será justamente o exemplo da próxima seção.
Vamos assumir então que o caminho é "\\wsl.localhost\Ubuntu\".
Desta forma, estando no Windows, para listar o conteúdo da minha pasta "dev" no Linux utilizo o seguinte comando:
dir \\wsl.localhost\Ubuntu\home\anselmo\dev
Caso especial: dois Linux
Desenvolvi um programa em um Linux (WSL), um Ubuntu, e queria testá-lo em outro Linux sem nada instalado.
A solução mais simples que me ocorreu foi utilizar outro sistema Linux (WSL) que eu já havia inicializado: um Debian.
Então surgiu a dúvida:
Estando em um Linux (WSL), como acesso arquivos de outro Linux (WSL)?
As receitas de bolo já citadas não encaixam nesse cenário.
Efetivamente não há uma solução pronta para esse acesso. Mas não é difícil resolver isso.
Precisamos criar um ponto de montagem, que nada mais é que uma pasta, e montar nela o acesso ao outro Linux.
Nesse caso, eu queria acessar o Ubuntu a partir do Debian.
Assim, primeiro criei uma pasta onde seria acessado o outro sistema. Por convenção, criei a subpasta dentro de "/mnt/". Utilizei o seguinte comando:
mkdir /mnt/ubuntu
Depois executei o comando que monta o compartilhamento do outro Linux nessa pasta.
Esse tal "compartilhamento" já foi visto acima. Trata-se do "\\wsl.localhost\Ubuntu\". Porém ajustando as barras para o padrão Linux.
O comando ficou assim:
sudo mount -t drvfs '//wsl.localhost/Ubuntu' /mnt/ubuntu
Obs.: O uso do "sudo" no início da linha exige que seja digitada a senha do usuário no Linux.
E é só isso. A partir desse momento, para listar o conteúdo da pasta "dev" do Ubuntu, utilizo o seguinte comando:
ls -la /mnt/ubuntu/home/anselmo/dev/
Pronto!
Agora você sabe onde estão todos os arquivos de todos os sistemas.
Quer dizer, você sabe de qualquer sistema acessar os arquivos de qualquer outro sistema.