Git-Bash e WSL têm uma estrutura de diretório diferente

Git-Bash e WSL têm uma estrutura de diretório diferente

Atualmente, estou configurando e configurando meu WSL em minha estação de trabalho Windows 10 para poder usar algumas ferramentas de linha de comando muito úteis no Windows. Agora, tanto no WSL quanto no Git-Bash você tem acesso a todas as unidades e partições e a todos os arquivos do PC (aos quais seu usuário tem acesso), mas os caminhos são diferentes. Digamos que eu tenha um tempdiretório localizado em com alguns arquivos nele

tree C:\Temp
C:\TEMP
├───tempfile1.txt
├───tempfile2.txt
└───tempfile3.txt

Então, quando eu abro o Git-Bash (usandoesseSO Q&A) no C:\Tempdiretório execute o pwdcomando vejo o caminho como

/c/Temp

mas estranhamente, quando executo um lscomando no /Git-Bash, não vejo um cdiretório e nenhum mntdiretório também.

Agora para WSL, quando eu Open Linux Shell hereclico com o botão direito no menu de contexto no Windows Explorer e executo pwdele mostra o caminho como sendo

/mnt/c/Temp

Então, minha pergunta é a seguinte: o que e onde está o diretório '/' no Windows? E essas são apenas duas maneiras diferentes de "zombar" do diretório raiz?

Editar:
Versão do Windows: Windows 10 Enterprise Edition versão 1903 (Build 18362.267)
Versão WSL: 1809 (Build 17763) (versão mais recente no momento da escrita)

Responder1

Seu Git-Bash é um programa típico do Windows e funciona como tal. Ele é visto C:\como seu diretório raiz.

Seu WSL, entretanto, é diferente. Não tenho certeza se é um contêiner ou VM, mas independentemente disso, definitivamente não é um programa típico do Windows.
Ele ainda roda no Windows, mas qualquer coisa que você roda no WSL, essencialmente, se vê rodando no Linux, não no Windows. Isso faz com que ele siga os padrões do Linux, como a estrutura de diretórios do Linux.

Isso significa que ele possui seu próprio diretório raiz, que em vez de C:\é /. A localização deste diretório está em algum lugar do seu AppData e varia de acordo com a versão do WSL e se você está usando Ubuntu, OpenSUSE ou qualquer outro.

No Linux, as unidades não recebem letras. Eles recebem pontos de montagem. A raiz, /por exemplo, é o ponto de montagem da sua partição ou pasta raiz, no caso do WSL. Nem tudo abaixo /é a mesma unidade. Por exemplo, no meu laptop, /home/está em uma partição separada.

/mnt/é um diretório de montagem na estrutura de arquivos do Linux. É destinado a coisas externas.

/mnt/c/é seu C:\. Tem que ser assim porque o Linux não dá letras aos drives. Esta é a maneira correta e mais elegante de acessar arquivos do Windows a partir do WSL. É por isso que o bash no WSL tem um local diferente para o seu arquivo C:\.

Supondo que você tenha a distribuição WSL mais comum (Ubuntu), você /deve estar aqui:

%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

Se não estiver lá ou você usar uma distribuição diferente, veja aqui:

%LOCALAPPDATA%\Packages\

Mas esteja avisado, o Linux lida com as permissões de arquivo de maneira muito diferente do Windows. Não faça nada aqui usando ferramentas do Windows como o File Explorer. Se você precisar interagir entre sistemas operacionais, faça isso no WSL.

Responder2

simplesmente use este comando no seu bash

cd //wsl.localhost/dir

eu uso o comando abaixo para entrar no htdocs no meu lampp

cd //wsl.localhost/Ubuntu/opt/lampp/htdocs/

Responder3

A pasta / para WSL está presente C:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation e também pode ser encontrada como um recurso de rede \\wsl$\Ubuntu-18.04ou similar, dependendo de qual distribuição Linux você instalou para WSL.

Para git bash está localizado emC:\Program Files\Git

Você sempre pode encontrar a localização real de qualquer pasta digitando explorer.exe .git bash e wsl traduzirá o .caminho para você e o transmitirá aos aplicativos do Windows que você executa.

Dito isto, você não deve abrir arquivos dessas /pastas emuladas por meio de janelas em aplicativos, pois eles podem ter problemas para lê-los corretamente, especialmente com os WSL.

Esses programas emulam o sistema de arquivos Unix para você, sem criar uma máquina virtual com CPU segregada e alocações de memória. Eles apenas compartilham com o Windows como um aplicativo normal. (exceto no caso do WSLv2 que está executando uma VM completa usando o Windows 10 pro Hyper-V)

Os locais /cou /mnt/csão montagens de rede muito semelhantes ao mapeamento de uma unidade de rede no Windows para dizer Z:e fingir que é um disco local.

GIT bash e WSL estão montando suas unidades raiz do Windows como se fossem recursos de rede. No Linux, você monta a unidade em a /folderporque não existe esse conceito de letra de unidade.

Se desejar, você pode dizer ao WSL para montar as unidades da mesma forma que o git bash faz.

No tipo wsl edite o /etc/wsl.confarquivo

E adicione o seguinte:

[automount]
root = /

Salve o arquivo e faça LOG OFF do Windows e faça login novamente.

Agora, quando você iniciar o WSL, ele terá os mesmos caminhos do git bash para seus discos rígidos locais.

Além disso, lembre-se de que eles emulam o sistema de arquivos usado pelos sistemas operacionais Linux, mas não fazem isso perfeitamente e não fazem da mesma maneira.

Por exemplo, os sistemas de arquivos Unix têm permissões em arquivos, o git bash detectará automaticamente o que "DEVE SER" e o arquivo executável e adicionará o atributo +x. WSL não faz isso muito bem, geralmente apenas torna tudo executável.

informação relacionada