Configuración del entorno en la CLI. Terminal WSL / Windows

Hay personas que pasan la mayor parte de su tiempo de trabajo en la consola, hay quienes usan el terminal si es necesario, ejecutando algo de acuerdo con las instrucciones. Pero creo que todo especialista en TI, ya sea desarrollador, administrador de sistemas, ingeniero de redes o incluso desarrollador senior de yaml, utiliza la interfaz de línea de comandos. No todos piensan en mejorar el entorno de trabajo en la CLI y aumentar la productividad en la terminal. Me gustaría compartir mi experiencia configurando el entorno para trabajar con Linux desde Windows.



En el artículo aprenderá qué herramientas y qué terminal se utilizan actualmente para ejecutar aplicaciones Linux en Windows 10. Hablaremos sobre WSL 2 y Windows Terminal , que está ganando cada vez más popularidad entre los usuarios que necesitan Linux para trabajar. Dado que la mayoría de mis casos de uso están relacionados con la conexión remota a través de SSH, la mayor parte de la información será relevante para casos de conexiones remotas, con todas las características asociadas con esto (reenvío de claves ssh a través del agente ssh, reenvío del servidor X, administración de conexiones, etc.) )

Atencion Debajo del corte muchas imágenes y gifs reducidos, pero a veces voluminosos, se recomienda abrir el artículo si tiene acceso apropiado a Internet. Conozca a cat si está interesado en ejecutar las utilidades de Linux en Windows, optimizar su trabajo en el entorno CLI, o simplemente le gustan los textos técnicos y los terminales en color. Traté de aclarar el texto con capturas de pantalla y capturas de pantalla del terminal, para que no fuera aburrido.

Introduccion


Tanto en mi computadora portátil de mi casa como en mi trabajo, el único sistema operativo que tengo actualmente es Windows 10, y este año finalmente cambié a usar solo WSL en lugar de VM / dualboot / Cygwin / MinGW. Ahora mi terminal predeterminada es el shell WSL local, donde puedo ejecutar casi cualquier tarea, como en Linux nativo. Además, el miniservidor Intel NUC se ejecuta en la red doméstica, en la que Proxmox se implementa con contenedores LXC y KVM, en el que Docker está girando. Voy a todas las máquinas virtuales a través de SSH, con claves del directorio de Windows. Mucho tiempo en la actividad profesional se lleva a cabo en la CLI, con el mismo servidor y red. Por lo tanto, siempre hay un deseo de lidiar con herramientas para un trabajo más cómodo en la terminal, y en Windows siempre hubo problemas con esto. Pero ahora todo está cambiando.



Este y los artículos posteriores se centran más en los entusiastas que buscan soluciones nuevas y quieren bombear su caparazón. Pero para los principiantes, algo debería ser interesante, aunque el artículo resultó estar bastante inmerso en el tema y sugiere que el lector tiene algunos conocimientos fundamentales en Linux. Toda la información se recopila sobre la base de la experiencia personal usando WSL, un terminal, así como la paginación interminable de problemas de Stack Overflow y Github en el proceso de mejorar constantemente las configuraciones y encontrar herramientas convenientes para el trabajo.

Subsistema de Windows para Linux (WSL) 2


Hay varios artículos normales sobre WSL en Internet y sobre Habr ( una vez un artículo sobre la instalación / configuración de WSL con un servidor X, dos notas sobre WSL 2, tres artículos sobre el desarrollo de Python en VSCode con WSL) que describen la instalación y configuración del sistema. Sin embargo, no todas las acciones de instalación ya son relevantes, así como las restricciones con trampas son cada vez menos. No me detendré en la instalación en detalle, las instrucciones para instalar la versión actual (segunda) de WSL están en el sitio web de Microsoft , y también puede encontrar tutoriales breves en Internet.



Ahora WSL aún está en desarrollo activo y recientemente ( junio de 2019 ) se lanzó una nueva versión de WSL 2, que actualmente está disponible solo para versiones nuevas de Windows para miembros de Windows Insiders. Si es posible, le aconsejo que actualice inmediatamente WSL a la versión 2, ya que mejoró el trabajo de las llamadas al sistema, al trabajar con la red, el FS y, en general, se basa en una arquitectura diferente y, según algunos informes, aumenta la velocidad en 20 veces en comparación con la primera versión.

Puede ver la versión de Windows 10 y la compilación del sistema operativo en Inicio -> Configuración -> Sistema -> Acerca de , para instalar WSL 2, necesita Windows 1903 y al menos compilar la versión 18917 . Si no es miembro del Programa Windows Insider , lo más probable es que las actualizaciones no lleguen hasta una versión estable. Entonces, si desea actualizar a la última versión, puede habilitar el acceso temprano ( Rápido ) en Inicio -> Configuración -> Actualización y seguridad -> Programa Windows Insider , actualizar y deshabilitar actualizaciones adicionales. Vale la pena considerar que aún no se instalarán actualizaciones probadas en masa, lo que puede afectar la estabilidad.

Debe tenerse en cuenta que antes de la versión de compilación 18995, WSL tenía un error al trabajar con archivos en discos de Windows montados, expresado como un error de entrada / salida, solo reinicia WSL ( wsl --shutdown en PowerShell) ayuda. En general, hay muchos errores corregidos que todavía están presentes en la versión 1 de WSL (que está configurada de manera predeterminada) y en las distribuciones de Windows que no son de vista previa. Si las actualizaciones de su sistema operativo están reguladas por políticas corporativas, lo más probable es que no lleguen las últimas actualizaciones y debe tener esto en cuenta. En una de las computadoras portátiles tengo la compilación 18956 y no hay actualizaciones, a pesar de que la opción Rápido está seleccionada en la configuración del Programa Insider. Hace unos meses se instaló un sistema limpio en otra computadora portátil, y periódicamente se reciben actualizaciones que se instalan.

Instalar WSL 2


WSL requiere que Hyper-V esté habilitado porque las distribuciones de Linux se ejecutan en máquinas virtuales livianas que utilizan la virtualización de Hyper-V.



A continuación, daré una breve instrucción de instalación de la distribución CLI PowerShell de WSL usando Kali Linux como ejemplo). Si prefiere Ubuntu u otra distribución de Linux disponible, reemplace el enlace y los nombres con los apropiados.

Verifique la versión de compilación de Windows:

Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | Select CurrentBuild

Active los componentes VirtualMachinePlatform y Microsoft-Windows-Subsystem-Linux:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform


Reiniciar
A continuación, instale la distribución desde Microsoft Store ( https://aka.ms/wslstore ) o continúe ejecutándose en PowerShell:

curl.exe -L -o kali.appx https://aka.ms/wsl-kali-linux-new
Add-AppxPackage .\kali.appx
rm .\kali.appx


Inicie la consola WSL (la distribución debe aparecer en el menú Inicio, busque por el nombre de la distribución), espere la invitación para instalar un nuevo usuario, cierre la consola.

Ahora la distribución debería aparecer en la lista si se ejecuta en PowerShell:

wsl -l -v

Si es necesario, convierta la distribución al formato WSL versión 2:

wsl --set-version kali-linux 2
wsl --set-default-version 2


Hacer root al usuario predeterminado (opcional):

kali config --default-user root

Si obtiene el error "Un intento de conexión falló porque la parte conectada no respondió correctamente después de un período de tiempo, o la conexión establecida falló porque el host conectado no pudo responder" , entonces tiene una compilación en la que el siguiente (ya solucionado en versiones recientes) error. Como de costumbre, hay una solución alternativa , o utilizo la distribución de Ubuntu, no tuve problemas con la misma, no con la última versión de la compilación.

Si es necesario, puede mover el disco virtual WSL a otra partición (diferente de C :) según las instrucciones . Es mejor hacerlo de inmediato, ya que no todo puede salir bien.

Descargo de responsabilidad sobre seguridad . En WSL y en otros servidores Linux en la red doméstica, no ejecuto ningún sistema crítico, y no hay otros usuarios (excepto yo) en la red, así que voy a rootear en casi todas partes, con autenticación ssh mediante claves. Sé que esta no es la mejor práctica, pero estoy hablando de un entorno de desarrollo personal y no veo el punto de crear un usuario no root. Los problemas de seguridad no se considerarán en este artículo, voy a escribir sobre esto algún día (sobre cómo organizar la interacción de los servicios a través de TLS con una renovación de certificado centralizada en una red doméstica; sobre la sincronización ~ / .ssh / config entre servidores, reenvío puertos y llaves, etc.).

Configuración de WSL


A partir de la compilación 17093 , el archivo de configuración principal de WSL se encuentra en el sistema de distribución FS en /etc/wsl.conf , describe la configuración que se aplicará cada vez que se inicie la distribución:

  • Automount - unidades automount de Windows
  • Red: generar archivos resolv.conf, hosts
  • Interoperabilidad: inicie procesos de Windows y agregue Windows $ PATH a Linux $ PATH

Inicialmente, WSL no tiene esta configuración, debe registrarse manualmente:

[automount]
enabled = true
root = /mnt
options = "metadata,umask=22,fmask=11"
mountFsTab = true

[network]
generateHosts = true
generateResolvConf = true

[interop]
enabled = true
appendWindowsPath = true


Algunas configuraciones se usan con el valor predeterminado y con /etc/wsl.conf vacío, pero para la operación correcta con los archivos debe registrar al menos el parámetro de opciones , de lo contrario los archivos de Windows estarán con permisos 777 y esto no se puede cambiar desde Linux.



Puede reiniciar la distribución desde PowerShell con el comando:

wsl -t kali-linux

Después de eso, puede actualizar los paquetes y ajustar el sistema operativo usted mismo. No tocaré la configuración de shell y el entorno en Linux, lo dejaré para el próximo artículo.

apt -y update && apt -y upgrade

Sistema de archivos WSL 2 y rendimiento


Los archivos dentro de WSL versión 2 se almacenan en el disco virtual VHDX, ext4 se usa como sistema de archivos. Puede acceder a rootfs WSL a través de una ruta en este formato:

\\wsl$\{DistroName}\

O bien, puede escribir "explorer.exe". En la CLI y se abrirá un navegador de Windows en el directorio actual.

WSL versión 1 no usaba VHDX y tenía fácil acceso al directorio donde estaban ubicados los archivos de Linux, y Microsoft desaconsejó cambiar los archivos de Linux de Windows. En la nueva versión de WSL, se proporciona acceso al FS en un disco virtual utilizando el servidor de archivos del Protocolo del sistema de archivos Plan 9 .



En versiones anteriores de WSL, había problemas de rendimiento del sistema de archivos porque las llamadas al sistema se emulaban a través de la API de Windows, el acceso a los archivos era lento e inestable. A finales de 2019, WSL 2 cambió su arquitectura y usó el núcleo nativo de Linux. A juzgar por la diapositiva de la presentación de YouTube del nuevo subsistema de Windows para la arquitectura Linux: una inmersión profunda , el rendimiento de las operaciones de disco aumentó en 2-5 veces.

La capacidad máxima del disco se limita a 256 GB, si se excede este volumen, deberá cambiar el tamaño, las instrucciones se encuentran en la documentación .

WSL inicialmente tuvo problemas para liberar recursos después de usar RAM. Build 19013 resolvió este problema. Si ejecuta tareas exigentes (por ejemplo, ensamblar una aplicación oxidada ), notará que el proceso Vmmem estará en la parte superior del Administrador de tareas, pero el consumo de memoria ha disminuido significativamente en las versiones recientes de WSL.



Red


El nombre de host (nombre de host) en Linux se toma del nombre de la PC en Windows, independientemente de lo que esté escrito en / etc / hostname o con el comando hostnamectl set-hostname .

A diferencia de la primera versión, en WSL 2 la red funciona a través de un conmutador virtual Hyper-V:

❯❯ ipconfig.exe | grep IPv4
IPv4 Address. . . . . . . . . . . : 192.168.88.200
IPv4 Address. . . . . . . . . . . : 172.31.160.1
IPv4 Address. . . . . . . . . . . : 172.27.144.1

❯❯ ip -br -4 ad show dev eth0
eth0 UP 172.27.150.196/20
❯❯ ip ro list default
default via 172.27.144.1 dev eth0




En este caso, la red 172.27.144.0/20 se usa bajo WSL, su primera dirección ( 172.27.144.1 ) es el sistema host de Windows.

Desde Linux, puede acceder a los servicios de host (que se ejecutan en Windows) a través de la red, por ejemplo, de esta manera:

❯❯ nmap -p 3389 $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')

La dirección IP de Windows se toma de /etc/resolv.conf , donde se genera automáticamente de acuerdo con la configuración de wsl.conf .

Por el contrario, si necesita una conexión a un socket Linux desde una aplicación de Windows, debe acceder a la dirección IP de WSL. Hay una advertencia: en Linux, el servicio no debe ejecutarse en localhost (127.0.0.1) , sino en la dirección 0.0.0.0 . Por ejemplo, para elevar rápidamente el proxy SOCKS5 a su VPS, debe iniciar SSH con el parámetro de reenvío de puerto dinámico :

❯❯ ssh -D 0.0.0.0:2299 -N -f proxy.example.com

Después de eso, en la aplicación de Windows, por ejemplo Chrome, como la dirección SOCKS5, registre no el host local , sino la dirección WSL, en este caso 172.27.150.196 . Por cierto, de una manera tan simple de canalizar el tráfico a través de VPS en Chrome, es posible usar el acceso a los sitios a través de IPv6.



Linux cambiará su dirección IP después de un reinicio cada vez, por lo que en los escenarios en los que necesita tener un reenvío de puertos que funcione constantemente y se inicie automáticamente, debe buscar una solución alternativa. Hay muchas formas de resolver este problema, de diversos grados de muletas, puede leer más en este número en github. Utilicé la utilidad go-wsl2-host , que implementa el Servicio de Windows, que agrega automáticamente la dirección IP WSL al archivo de hosts de Windows, para que pueda registrar un nombre de host como ubuntu.wsl en el sistema host y acceder a Linux en él. Sin embargo, todo esto no funciona muy bien, queda esperar a que Microsoft solucione estos problemas.



UPD Mientras escribía este artículo, descubrí que había actualizaciones (compilación 18945 ), en las que era posible pasar de servicios a través de localhost a servicios que se ejecutan en WSL. Es cierto que resultó que había un error debido al cual todavía no funcionaba para todos, la solución en la compilación de agosto es 18970 . Como no todos reciben actualizaciones, incluso si era miembro del programa Windows Insiders, no ajusté la información, tal vez ayude a alguien a configurar la interacción de red.

OpenSSH en Windows y servicios de inicio automático


Windows 10, como Windows Server 2019, viene con una bifurcación OpenSSH , que incluye todas las utilidades familiares ssh-keygen, ssh-add, scp y otras, incluidas ssh-agent y el servidor sshd. Tanto el cliente como el servidor se pueden instalar a través de Aplicaciones> Aplicaciones y características> Administrar características opcionales, pero la versión del cliente ssh no será la última. Me encontré con un error que no me permitía conectarme al host a través del host de salto con la opción ProxyJump y resultó que este problema se solucionó, pero tuve que actualizar manualmente el SSH del cliente. Puede instalar la versión actual de Win32 OpenSSH descargando zip desde la sección de Versiones en el github y descomprimiéndolo, por ejemplo, en C: \ Archivos de programa \ OpenSSH . El software de terceros ssh.exe (por ejemplo, cuando se usa el modo de Desarrollo remoto en VSCode) se llama desde $ PATH ( % SYSTEMROOT% \ System32 \ OpenSSH \ ), debe cambiar la variable de entorno. Las variables de entorno se cambian a través de la GUI en Inicio> Editar las variables de entorno del sistema ( Inicio> Cambiar variables de entorno del sistema ), allí debe poner una nueva forma por encima de la versión anterior.

Dado que Systemd no funciona en WSL, hay un problema con el inicio de los servicios con el inicio del sistema. Hay varias formas de configurar el inicio automático del servidor ssh en WSL, la forma más fácil es crear una tarea en el Programador de tareas, donde puede especificar el comando de inicio del servidor. En Internet, puede encontrar diferentes instrucciones de inicio a través de los scripts vbs , ps1 o bat . El problema con casi todos los métodos es que el desencadenante es iniciar el sistema operativo Windows principal, es decir, si WSL falla y tiene que reiniciar el sistema ( wsl -t ), Linux se iniciará sin un servicio en ejecución. Cuando se inicia Windows, la distribución WSL solo comienza cuando se accede por primera vez.

Utilizo el servidor SSH en una computadora portátil dentro de WSL para poder ir de una máquina a otra de forma remota. Y, debido al hecho de que uso técnicas de reenvío de puertos ssh y una configuración centralizada bien pensada de clientes SSH, puedo ir de manera transparente a todos mis servidores, ingresando un nombre de host en lugar de direcciones. Es decir, incluso si conecta una de las computadoras portátiles a la red móvil, el demonio autossh se conectará al host de salto y aún puedo ir a la computadora, sin NAT será un obstáculo. Por lo tanto, es importante para mí que sshd siempre esté activo.



La única forma de acceder a SSH en WSL es reenviar el puerto SSH. Esto se puede hacer desde el propio WSL usando RemoteForward , o desde otro servidor en la red doméstica. Pocas personas lo necesitan, y este ya es un nivel avanzado, así que solo daré un comando de trabajo:

❯❯ ssh -R '*:2363:*:22' -N -f mt.example.com

Ahora, cuando se conecta a la dirección mt.example.com:2263, puede acceder directamente al WSL.

Si planea elevar el servidor SSH en WSL, debe recordar configurar los parámetros de inicio del servidor necesarios en / etc / ssh / sshd_config . Para evitar conflictos con el enlace del servicio en el puerto 22, el servidor OpenSSH en Windows debe deshabilitarse o eliminarse por completo si está instalado ( Aplicaciones> Aplicaciones y características> Administrar características opcionales ).

X reenvío


Resultó ser un momento agradable que en Windows 10 hay una utilidad clip.exe que le permite redirigir stdout directamente al portapapeles de Windows. Esto es conveniente para usar en programas como tmux, y gracias al reenvío del servidor X, el texto también se puede copiar desde hosts remotos. Para que todo funcione, siempre debe tener un servidor X ejecutándose en Windows y la variable $ DISPLAY configurada correctamente.

Una pequeña teoría aburrida. En los sistemas * nix que ejecutan X, existen diferentes tipos de portapapeles ( primario, secundario, portapapeles ), en el contexto de este artículo esto no es tan importante, pero es importante para una comprensión general del mecanismo de trabajo. Hay dos utilidades (xclip y xsel) para trabajar con portapapeles en Linux. Ambas utilidades tienen una funcionalidad similar, en xsel es un poco más grande, pero la funcionalidad básica necesaria para reenviar el contenido del búfer es la misma. En las aplicaciones X, el texto seleccionado cae en la selección primaria, se inserta con el botón central del mouse, en xclip y xsel la selección primaria se usa por defecto.

Por ejemplo, para copiar el contenido de una variable al búfer predeterminado, debe pasar stdout a stdin de la utilidad xclip, sin parámetros adicionales:

❯❯ echo -n $DISPLAY | xclip

Y para mostrar el contenido del búfer predeterminado, ejecute xclip con el modificador -o :

❯❯ xclip -o
172.20.160.1:0


Para que el portapapeles se redirija a través del servidor X y las aplicaciones gráficas se ejecuten en el servidor X local, debe establecer la dirección IP, que es la puerta de enlace predeterminada para WSL, en la variable $ DISPLAY . Hasta ahora, no se ha inventado nada mejor que tomarlo de resolv.conf (que es generado automáticamente por Windows). Por lo tanto, la forma más fácil es registrar la exportación de la variable $ DISPLAY en el perfil del shell (por ejemplo, ~ / .zshrc para zsh).

❯❯ echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.zshrc



Como servidor X, elegí el VcXsrv gratuito, puede funcionar con el búfer, tiene diferentes modos de visualización de ventana y se inicia desde la línea de comandos con las opciones prescritas. Usando el enlace a gist, puede ver todas las opciones.

Puede crear una tarea de ejecución automática para el servidor X en el Programador de tareas de esta manera:

Triggers: At startup
Actions: Start a program
____Program: "%ProgramFiles%\VcXsrv\vcxsrv.exe"
____Arguments: -wgl -dpi auto -ac -multiwindow


Teclas ssh


Para que los programas de Windows puedan usar claves SSH (por ejemplo, un editor cuando se trabaja con un repositorio remoto de GitHub), y al mismo tiempo no hay una segunda copia de claves en WSL, lo mejor es generar claves en Windows % HOMEPATH% /. Ssh y crear enlaces simbólicos en el hogar Directorios WSL.

ssh-keygen -f /mnt/c/Users/${WIN_USER}/.ssh/id_rsa -b 4096
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa ${HOME}/.ssh/id_rsa
ln -sf /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub ${HOME}/.ssh/id_rsa.pub


O, en ~ / .ssh / config, puede especificar el parámetro IdentityFile especificando la ruta a las claves en el disco de Windows:

Host *
IdentityFile /mnt/c/Users/${WIN_USER}/.ssh/id_rsa


Si las claves se copiaron de alguna parte y los permisos del archivo no están configurados correctamente, corrija los permisos:

chmod 600 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa
chmod 644 /mnt/c/Users/${WIN_USER}/.ssh/id_rsa.pub
chmod 700 /mnt/c/Users/${WIN_USER}/.ssh




Por lo tanto, cuando se configura más el acceso mediante claves SSH, el usuario se identifica de manera única mediante un conjunto de claves en un solo lugar, tanto cuando se utilizan aplicaciones de Windows como de Linux. Ahora puede agregar la clave pública al servidor / servicios, donde deberá ir desde esta computadora. Si hay otros dispositivos en la red doméstica que requieren acceso SSH, entonces será correcto copiar su clave pública en estos servidores ( ssh-copy-id ), pero no necesita copiar las claves de un servidor a otro. Como es posible (y necesario) usar ssh-agent cuando se trabaja a través de SSH, cuando se conecta de un servidor a otro, el agente se encarga de que la autorización se produzca en la clave reenviada. Para que todo funcione correctamente y como se espera, debe cuidar el archivo ~ / .ssh / config , en el que debe registrar todas las opciones necesarias.

Host *
TCPKeepAlive yes
ServerAliveInterval 30
ServerAliveCountMax 3
ForwardAgent yes
AddKeysToAgent yes
ForwardX11 yes
ForwardX11Trusted yes


Qué terminal elegir para trabajar en Linux en Windows


Primero, quiero hacer una pequeña revisión de los shells de terminal existentes para Windows que pueden ejecutar WSL. Entre los usuarios, el procesador funcional MobaXterm es popular , que puede crear varias sesiones, incluidas las gráficas (WSL, bash / zsh, Mosh, RDP, VNC, etc.), le permite crear macros y ejecutar scripts, tiene muchas configuraciones y características, ssh agent, autorun ssh port forwarding, e incluso tiene un servidor ftp / tftp / http incorporado, pero el producto es de código cerrado y, además, pagado. Hyper es otro emulador de terminal más moderno que le permite ejecutar el shell WSL, el terminal está construido en HTML / JS / CSS y se expande utilizando complementos en forma de módulos node.js ( lista impresionante ). Hay otros terminales que le permiten ejecutar WSL con diversos grados de muletas ( ConEmu , su fork Cmder , WSLtty , etc.), pero los dejaré desatendidos.



Más adelante en este artículo hablaremos sobre la Terminal de Windows , a la que cambié recientemente, y hasta ahora solo estoy experimentando emociones positivas. Terminal todavía está en beta, pero funciona de manera bastante estable. De las características implementadas actualmente multitab, separación de paneles (división), perfiles personalizados de conexiones de terminales, esquemas de color, bueno, no hay nada más que enumerar. Pero esta funcionalidad es suficiente, incluso me gusta que el software no esté sobrecargado de superfluo, como si los desarrolladores se adhirieran al principio KISS .

Terminal evolucionó del proyecto de la consola de Windows (ConPTY), aprendiendo a admitir secuencias ANSI / VT, color verdadero RGB de 24 bits y UTF-8. Siguiendo los enlaces ( comienzo , continuación ) en Habré, una maravillosa traducción de una serie de publicaciones de blog de la línea de comandos de Windows: Dentro de la Consola de Windows , que cuenta sobre la historia de la creación de terminales, estándares relacionados para transferir secuencias de escape, páginas de códigos, Unicode, la aparición de emuladores de terminales y en el futuro Ya es una evolución de la línea de comandos de Windows. Los tecnólogos pueden estar interesados. El equipo de ingeniería que trabaja en este proyecto de código abierto mantiene el devlog de la línea de comandos de Windows , que está más que totalmente dedicado a WSL y Windows Terminal. Nunca hubiera creído antes de ese momento que estaría observando con interés el desarrollo de productos de MS, pero lo que hacen como parte del desarrollo de WSL, Terminal y VSCode realmente merece respeto. La forma en que comenzó el desarrollo de WSL se describe en Microsoft Open Source Stories (hay una traducción en Habré). Por cierto, Microsoft ha sido miembro platino de la Fundación Linux desde 2016.

Instalar y configurar Windows Terminal


Puede instalar Windows Terminal desde la Tienda Windows , o descargando el binario desde la sección de Versiones en el github del proyecto, también encontrará toda la información relevante, instrucciones y preguntas frecuentes. El terminal requiere al menos una versión de Windows 1903 y compilación 18362 . Es preferible instalarlo a través de la Tienda Windows, ya que es más fácil de actualizar en este caso, directamente desde la tienda. Las actualizaciones se emiten regularmente; se ha presentado una hoja de ruta de la primera versión del terminal en el github. Por el momento, todas las características de la versión 1 ya se han implementado (de acuerdo con el plan, para implementar todas las mejoras antes de fines de 2019), luego de unos meses de trabajo para corregir errores y en abril de 2020 se planea el lanzamiento oficial de Terminal v1.0. Es bueno que MS esté ahora en el github, su software ha aprendido a mostrar registros, errores inteligibles y cualquier problema se busca fácilmente en Google.



Todavía no hay muchas configuraciones en el terminal, pero son suficientes para un trabajo cómodo, el producto se está desarrollando activamente, hay en github donde los usuarios pueden crear una solicitud de función o informe de error. Los desarrolladores participan en la discusión de problemas con los usuarios, a menudo ofreciendo soluciones alternativas cuando se descubre un error.



La configuración se almacena en formato json, después de guardarla se aplica inmediatamente. Esto es conveniente solo porque puede aplicar buenas prácticas para administrar la configuración del entorno de trabajo: almaceno todas las configuraciones de Linux en el repositorio de git, en Windows utilizo solo VSCode de la herramienta de trabajo, que puede sincronizar la configuración a través de github gist y guardar la configuración del espacio de trabajo local por separado en archivos de puntos . Entonces Terminal se mueve en la misma dirección, usando las mismas teclas de acceso rápido y el formato de configuración que VSCode. Por cierto, editar una configuración es conveniente a través de VSCode, especialmente si ya usa este excelente editor de MS. El archivo de configuración del terminal ya contiene muchas configuraciones predeterminadas, y el editor correcto le permite ver todas las opciones con una descripción de las opciones de clave y valor del esquema (esto es especialmente conveniente cuando el proyecto aún no tiene la documentación completa). Además, todos los chips IDE están disponibles en forma de autocompletado, intellisense, verificación de sintaxis, formateo, etc.



La documentación para desarrolladores está disponible aquí , pero aquí hay una pequeña página de documentación para usuarios por ahora. Se dedica una página separada a la configuración que se escribe en el archivo de configuración json. A partir de ahí, puede descubrir que estructuralmente la configuración se divide en:

  • Global (perfil predeterminado, tamaño inicial de la ventana de terminal, tema, etc.)
  • Atajos de teclas
  • Perfiles (configuraciones específicas para cada terminal)
  • Esquemas (esquemas de color)

Existen perfiles dinámicos, aparecen en la configuración automáticamente y tienen la propiedad de origen . WSL Azure Cloud Shell. WSL (, Ubuntu), GUID , source , commandline wsl -d {DistroName} .


- , . :


Uso la fuente del programador Fira Code tanto en el terminal como en el editor. Admite la mayoría de los caracteres utilizados en el diseño de programas CLI e interfaces de consola, ligaduras, y tampoco hay problemas para mostrar emojis en el terminal.



La fuente se instala en Windows utilizando el instalador de fuentes del sistema operativo. Para hacer esto, descargue la última versión de la fuente que desee del archivo de versiones de github e instale manualmente la fuente en el sistema.

Puede ver el nombre de la fuente (configurando el terminal fontFace ) durante la instalación o más tarde en la aplicación Mapa de caracteres ( Tabla de símbolos ). Además, en Inicio -> Configuración -> Personalización -> Fuentes puede ver cómo se representa la fuente en diferentes modos y, al mismo tiempo, comprobar cómo se dibujan las ligaduras.



Conclusión


El resultado fue un artículo muy extenso, en un lugar se recopila toda la información relevante sobre la instalación, configuración y uso de Windows Terminal junto con WSL. En el futuro, quiero escribir artículos sobre ZSH y tmux de la misma manera, y escribir mi experiencia de implementar configuraciones en VM y sincronizar archivos de puntos entre hosts. Todo está dentro del marco de la automatización de la red doméstica, pero será útil para desarrolladores / desarrolladores / ingenieros de sistemas. Otro tema sin resolver fue el lanzamiento de Docker en WSL 2 , pero no necesito ejecutar Docker en una computadora personal, ya que hay un servidor dedicado para esto.

Espero que nadie se haya arrepentido de haber leído el artículo y haber sacado nuevos conocimientos. Si alguien tiene algo que agregar, compartamos nuestros pensamientos en los comentarios. Si tiene algún comentario sobre el texto, escriba al Primer Ministro, quiero mantener esta guía actualizada.

Referencias


Source: https://habr.com/ru/post/481746/


All Articles