
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 temp
directorio 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:\Temp
directorio ejecute el pwd
comando. Veo la ruta como
/c/Temp
pero, curiosamente, cuando ejecuto un ls
comando /
en Git-Bash no veo un c
directorio ni mnt
tampoco ningún directorio.
Ahora a WSL, cuando lo hago Open Linux Shell here
a través del menú contextual del botón derecho en el Explorador de Windows y pwd
lo 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.04
o 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 /c
o /mnt/c
son 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 /folder
porque 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.conf
archivo
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.