Git-Bash y WSL tienen una estructura de directorios diferente

Git-Bash y WSL tienen una estructura de directorios diferente

Actualmente estoy en el proceso de configurar y configurar mi WSL en mi estación de trabajo con Windows 10 para poder usar algunas herramientas de línea de comandos muy útiles en Windows. Ahora, tanto en WSL como en Git-Bash, tiene acceso a todas las unidades, particiones y todos los archivos de la PC (a los que su usuario tiene acceso), pero las rutas son diferentes. Digamos que tengo un tempdirectorio ubicado en con algunos archivos en él.

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

Luego, cuando abro Git-Bash (usandoesteSO Q&A) en el C:\Tempdirectorio ejecute el pwdcomando. Veo la ruta como

/c/Temp

pero, curiosamente, cuando ejecuto un lscomando /en Git-Bash no veo un cdirectorio ni mnttampoco ningún directorio.

Ahora a WSL, cuando lo hago Open Linux Shell herea través del menú contextual del botón derecho en el Explorador de Windows y pwdlo ejecuto, muestra que la ruta es

/mnt/c/Temp

Entonces mi pregunta es la siguiente: ¿Qué y dónde está el directorio '/' en Windows? ¿Y son estas sólo 2 formas diferentes de "burlarse" del directorio raíz?

Editar:
Versión de Windows: Windows 10 Enterprise Edition, versión 1903 (compilación 18362.267)
Versión WSL: 1809 (compilación 17763) (versión más reciente al momento de escribir este artículo)

Respuesta1

Su Git-Bash es un programa típico de Windows y funciona como tal. Lo ve C:\como su directorio raíz.

Sin embargo, tu WSL es diferente. No estoy seguro de si es un contenedor o una máquina virtual, pero de todos modos, definitivamente no es un programa típico de Windows.
Todavía se ejecuta en Windows, pero cualquier cosa que ejecute en WSL, esencialmente, se ve como ejecutándose en Linux, no en Windows. Esto hace que siga los estándares de Linux, como la estructura de directorios de Linux.

Esto significa que tiene su propio directorio raíz, que en lugar de C:\, es /. La ubicación de este directorio está en algún lugar de su AppData y varía según la versión de WSL y si está usando Ubuntu, OpenSUSE o cualquier otra cosa.

En Linux, las unidades no reciben letras. Se les dan puntos de montaje. La raíz, /por ejemplo, es el punto de montaje de su partición o carpeta raíz, en el caso de WSL. No todo lo que aparece a continuación /es el mismo disco. Por ejemplo, en mi computadora portátil, /home/está en una partición separada.

/mnt/es un directorio de montaje en la estructura de archivos de Linux. Está destinado a cosas externas.

/mnt/c/es tuyo C:\. Tiene que ser así porque Linux no da letras a las unidades. Esta es la forma correcta y más elegante de acceder a archivos de Windows desde WSL. Es por eso que bash en WSL tiene una ubicación diferente para su archivo C:\.

Suponiendo que tienes la distribución WSL más común (Ubuntu), deberías /estar aquí:

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

Si no está allí o usas una distribución diferente, mira aquí:

%LOCALAPPDATA%\Packages\

Pero tenga cuidado, Linux maneja los permisos de archivos de manera muy diferente a Windows. No hagas nada aquí usando herramientas de Windows como el Explorador de archivos. Si necesita interactuar entre sistemas operativos, hágalo desde WSL.

Respuesta2

simplemente usa este comando en tu bash

cd //wsl.localhost/dir

Utilizo el siguiente comando para acceder a htdocs en mi lámpara

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

Respuesta3

La carpeta / para WSL se encuentra C:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation y también se puede encontrar como un recurso de red \\wsl$\Ubuntu-18.04o similar, dependiendo de la distribución de Linux con la que instaló para WSL.

Para git bash está ubicado enC:\Program Files\Git

Siempre puede encontrar la ubicación real de cualquier carpeta ingresando en ella escribiendo explorer.exe .git bash y wsl traducirá la .ruta por usted y la pasará a las aplicaciones de Windows que ejecute.

Dicho esto, no debes abrir archivos, estas /carpetas emuladas a través de Windows en las aplicaciones, ya que pueden tener problemas para leerlos correctamente, especialmente con las WSL.

Estos programas emulan el sistema de archivos Unix sin crear una máquina virtual con asignaciones de memoria y CPU segregadas. Simplemente comparten con Windows como lo hace una aplicación normal. (excepto en el caso de WSLv2 que ejecuta una máquina virtual completa usando Windows 10 pro Hyper-V)

Las ubicaciones /co /mnt/cson montajes de red muy similares a mapear una unidad de red en Windows para decir Z:y pretender que es un disco local.

GIT bash y WSL están montando sus unidades raíz de Windows como si fueran recursos de red. En Linux, se monta la unidad en a /folderporque no existe tal concepto de letra de unidad.

Si lo desea, puede decirle a WSL que monte las unidades de la misma manera que lo hace git bash.

En wsl escriba editar el /etc/wsl.confarchivo

Y agregue lo siguiente:

[automount]
root = /

Guarde el archivo, cierre sesión en Windows y vuelva a iniciar sesión.

Ahora, cuando inicie WSL, tendrá las mismas rutas que git bash para sus discos duros locales.

Además, ten en cuenta que estos están emulando el sistema de archivos que utilizan los sistemas operativos Linux pero no lo hacen a la perfección y no lo hacen de la misma manera.

Por ejemplo, los sistemas de archivos Unix tienen permisos sobre archivos, git bash detectará automáticamente qué "DEBE SER" y qué archivo ejecutable y agregará el atributo +x. WSL no hace esto muy bien, por lo general simplemente hace que todo sea ejecutable.

información relacionada