Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hay varias consideraciones que debe tener en cuenta al trabajar entre sistemas de archivos Windows y Linux. En esta guía se han descrito algunos de ellos, incluidos algunos ejemplos de compatibilidad de interoperabilidad con la combinación de comandos basados en Windows y Linux.
Almacenamiento de archivos y rendimiento en sistemas de archivos
Recomendamos no trabajar entre sistemas operativos con sus archivos, a menos que tenga una razón específica para hacerlo. Para obtener la velocidad de rendimiento más rápida, almacene los archivos en el sistema de archivos WSL si trabaja en una línea de comandos de Linux (Ubuntu, OpenSUSE, etc.). Si trabaja en una línea de comandos de Windows (PowerShell, símbolo del sistema), almacene los archivos en el sistema de archivos de Windows.
Por ejemplo, al almacenar los archivos de proyecto de WSL, haz lo siguiente:
- Usa el directorio raíz del sistema de archivos de Linux:
/home/<user name>/Project
- No es el directorio raíz del sistema de archivos de Windows:
/mnt/c/Users/<user name>/Project$
oC:\Users\<user name>\Project
.
Cuando vea /mnt/
en la ruta de acceso del archivo de una línea de comandos de WSL, significa que está trabajando desde una unidad montada. Por lo tanto, la unidad C:/ del sistema de archivos de Windows (C:\Users\<user name>\Project
) tendrá este aspecto cuando se monte en una línea de comandos de WSL: /mnt/c/Users/<user name>/Project$
. Es posible almacenar los archivos del proyecto en una unidad montada, pero la velocidad de rendimiento mejorará si las almacena directamente en la \\wsl$
unidad.
Visualización del directorio actual en el Explorador de archivos de Windows
Para ver el directorio donde se almacenan los archivos, abra el Explorador de archivos de Windows desde la línea de comandos mediante:
explorer.exe .
Como alternativa, también puede usar el comando : powershell.exe /c start .
asegúrese de agregar el punto al final del comando para abrir el directorio actual.
Para ver todas las distribuciones de Linux disponibles y sus sistemas de archivos raíz en el Explorador de archivos de Windows, en la barra de direcciones, escriba: \\wsl$
Sensibilidad a las mayúsculas y minúsculas de archivos y directorios
La sensibilidad a las mayúsculas determina si las letras mayúsculas (FOO.txt) y minúsculas (foo.txt) se manejan como distintas (sensibles a las mayúsculas) o equivalentes (insensibles a las mayúsculas) en un nombre de archivo o directorio. Los sistemas de archivos de Windows y Linux manejan las mayúsculas de manera diferente: Windows es insensible a mayúsculas y Linux es sensible a mayúsculas. Obtenga más información sobre cómo ajustar la distinción entre mayúsculas y minúsculas, especialmente al montar discos con WSL, en el artículo Cómo ajustar la distinción entre mayúsculas y minúsculas.
Interoperabilidad entre comandos de Windows y Linux
Las herramientas y comandos de Windows y Linux se pueden usar indistintamente con WSL.
- Ejecute herramientas de Windows (es decir, notepad.exe) desde una línea de comandos de Linux (es decir, . Ubuntu).
- Ejecute herramientas de Linux (es decir, grep) desde una línea de comandos de Windows (es decir, . PowerShell).
- Compartir variables de entorno entre Linux y Windows. (Compilación 17063+)
Ejecución de herramientas de Linux desde una línea de comandos de Windows
Ejecute archivos binarios de Linux desde el símbolo del sistema de Windows (CMD) o PowerShell mediante wsl <command>
(o wsl.exe <command>
).
Por ejemplo:
C:\temp> wsl ls -la
<- contents of C:\temp ->
Archivos binarios invocados de esta manera:
- Utilice el mismo directorio de trabajo que la consola actual de CMD o PowerShell.
- Ejecute como usuario predeterminado de WSL.
- Tener los mismos derechos administrativos de Windows que el proceso de llamada y el terminal.
El comando de Linux siguiente wsl
(o wsl.exe
) se controla como cualquier ejecución de comandos en WSL. Elementos como sudo, piping y la redirección de archivos funcionan.
Ejemplo de uso de sudo para actualizar la distribución predeterminada de Linux:
C:\temp> wsl sudo apt-get update
El nombre de usuario de distribución de Linux predeterminado se mostrará después de ejecutar este comando y se le pedirá la contraseña. Después de escribir correctamente la contraseña, la distribución descargará las actualizaciones.
Combinación de comandos de Linux y Windows
Estos son algunos ejemplos de combinación de comandos de Linux y Windows mediante PowerShell.
Para usar el comando ls -la
de Linux para enumerar archivos y el comando findstr
de PowerShell para filtrar los resultados de las palabras que contienen "git", combine los comandos:
wsl ls -la | findstr "git"
Para usar el comando dir
de PowerShell para enumerar archivos y el comando grep
de Linux para filtrar los resultados de las palabras que contienen "git", combine los comandos:
C:\temp> dir | wsl grep git
Para usar el comando ls -la
de Linux para enumerar archivos y el comando > out.txt
de PowerShell para imprimir esa lista en un archivo de texto denominado "out.txt", combine los comandos:
C:\temp> wsl ls -la > out.txt
Los comandos pasados a wsl.exe
se reenvían al proceso de WSL sin modificaciones. Las rutas de acceso de archivo deben especificarse en el formato WSL.
Para usar el comando ls -la
de Linux para enumerar archivos en la ruta de acceso del /proc/cpuinfo
sistema de archivos de Linux, use PowerShell:
C:\temp> wsl ls -la /proc/cpuinfo
Para usar el comando ls -la
de Linux para enumerar archivos en la ruta de acceso del C:\Program Files
sistema de archivos de Windows, mediante PowerShell:
C:\temp> wsl ls -la "/mnt/c/Program Files"
Ejecución de herramientas de Windows desde Linux
WSL puede ejecutar herramientas de Windows directamente desde la línea de comandos de WSL mediante [tool-name].exe
. Por ejemplo: notepad.exe
.
Las aplicaciones se ejecutan de esta manera tienen las siguientes propiedades:
- Conserve el directorio de trabajo como la línea de comandos de WSL (en su mayor parte, las excepciones se explican a continuación).
- Tenga los mismos derechos de permiso que el proceso de WSL.
- Ejecute como usuario activo de Windows.
- Aparece en el Administrador de tareas de Windows como si se ejecutara directamente desde el CMD.
Los ejecutables de Windows que se ejecutan en WSL se controlan de forma similar a los ejecutables nativos de Linux: la canalización, las redirecciones e incluso el trabajo en segundo plano funcionan como se espera.
Para ejecutar la herramienta de ipconfig.exe
Windows, use la herramienta de grep
Linux para filtrar los resultados de "IPv4" y luego use la herramienta de cut
Linux para eliminar los campos de columna; desde una distribución de Linux (por ejemplo, Ubuntu) escriba:
ipconfig.exe | grep IPv4 | cut -d: -f2
Vamos a probar un ejemplo de combinación de comandos de Windows y Linux. Abra la distribución de Linux (es decir, Ubuntu) y crear un archivo de texto: touch foo.txt
. Ahora use el comando ls -la
de Linux para enumerar los archivos directos y sus detalles de creación, además de la herramienta findstr.exe
de Windows PowerShell para filtrar los resultados, por lo que solo foo.txt
el archivo se muestra en los resultados:
ls -la | findstr.exe foo.txt
Las herramientas de Windows deben incluir la extensión de archivo, coincidir con el caso del archivo y ser ejecutable. No ejecutables, incluidos los scripts por lotes. Comandos nativos de CMD como dir
se pueden ejecutar con el comando cmd.exe /C
.
Por ejemplo, enumere el contenido del directorio C:\ del sistema de archivos de Windows; para ello, escriba:
cmd.exe /C dir
O bien, use el ping
comando para enviar una solicitud de eco al sitio web de microsoft.com:
ping.exe www.microsoft.com
Los parámetros se pasan al archivo binario de Windows sin modificar. Por ejemplo, el siguiente comando abrirá C:\temp\foo.txt
en notepad.exe
.
notepad.exe "C:\temp\foo.txt"
Esto también funcionará:
notepad.exe C:\\temp\\foo.txt
Uso compartido de variables de entorno entre Windows y WSL con WSLENV
WSL y Windows comparten una variable de entorno especial, WSLENV
, creada para puentear las distribuciones de Windows y Linux que se ejecutan en WSL.
Propiedades de la WSLENV
variable:
- Es compartido; existe en entornos de Windows y WSL.
- Es una lista de variables de entorno para compartir entre Windows y WSL.
- Puede dar formato a las variables de entorno para que funcionen bien en Windows y WSL.
- Puede ayudar en el flujo entre WSL y Win32.
Nota:
Antes de la versión 17063, solo la variable de entorno de Windows a la que WSL podía tener acceso era PATH
(por lo que podía iniciar ejecutables win32 desde en WSL). A partir de la versión 17063, se comienza a admitir WSLENV
.
WSLENV distingue mayúsculas de minúsculas.
Marcas WSLENV
Hay cuatro marcas disponibles en WSLENV
para influir en cómo se traduce la variable de entorno.
WSLENV
Banderas:
-
/p
- traduce la ruta entre los caminos de estilo WSL/Linux y los caminos de Win32. -
/l
: indica que la variable de entorno es una lista de rutas de acceso. -
/u
: indica que esta variable de entorno solo debe incluirse al ejecutar WSL desde Win32. -
/w
: indica que esta variable de entorno solo debe incluirse al ejecutar Win32 desde WSL.
Las marcas se pueden combinar según sea necesario.
Obtenga más información sobre WSLENV, incluidas las preguntas más frecuentes y ejemplos de cómo asignar el valor de WSLENV a una concatenación de otras variables de entorno predefinidas, cada una con un sufijo con una barra diagonal seguida de indicadores para especificar cómo se debe traducir y pasar variables mediante un script. En este artículo también se incluye un ejemplo para configurar un entorno de desarrollo con el lenguaje de programación Go, configurado para compartir un GOPATH entre WSL y Win32.
Deshabilitación de la interoperabilidad
Los usuarios pueden deshabilitar la capacidad de ejecutar herramientas de Windows para una sola sesión de WSL ejecutando el siguiente comando como raíz:
echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop
Para volver a habilitar los archivos binarios de Windows, salga de todas las sesiones de WSL y vuelva a ejecutar bash.exe o ejecute el siguiente comando como raíz:
echo 1 > /proc/sys/fs/binfmt_misc/WSLInterop
Deshabilitar la interoperabilidad no persistirá entre sesiones de WSL: la interoperabilidad se habilitará de nuevo cuando se inicie una nueva sesión.
Windows Subsystem for Linux