WSL Mastery

Windows Subsystem for Linux · Desde Cero hasta Nivel Master

¿Qué es WSL?

Nivel 1 · Principiante

El Windows Subsystem for Linux (WSL) es una capa de compatibilidad desarrollada por Microsoft que permite ejecutar un entorno GNU/Linux directamente sobre Windows, sin necesidad de máquinas virtuales ni dual boot.

Esto significa que puedes usar herramientas como bash, grep, git, python y cualquier aplicación Linux en tu máquina Windows sin salir de tu entorno habitual.

WSL vs WSL 2
WSL 1 traduce llamadas de sistema Linux a llamadas de Windows. WSL 2 usa un kernel Linux real dentro de una máquina virtual ligera (Hyper-V), siendo mucho más rápido y compatible. En 2024+, siempre usa WSL 2.

Arquitectura de WSL 2

WSL 2 corre un kernel Linux completo en una VM Hyper-V optimizada y liviana. Windows y Linux comparten el mismo sistema de archivos mediante un servidor 9P (protocolo de red para archivos).

Rendimiento Nativo
Kernel Linux real. Compilaciones hasta 20x más rápidas que WSL 1.
Compatibilidad Completa
Soporta syscalls de Linux al 100%, incluyendo Docker, ptrace y más.
Integración Windows
Accede a archivos de Windows desde Linux y viceversa sin fricción.
GUI Linux (WSLg)
Ejecuta aplicaciones gráficas Linux directamente en tu escritorio Windows.

WSL vs Máquina Virtual vs Dual Boot

Característica WSL 2 VM Completa Dual Boot
Tiempo de inicio~2 segundos1-3 minutos1-3 minutos
Uso de RAMDinámico (~300MB base)Fijo (mínimo 2GB)Solo Linux disponible
Integración WindowsNativa y bidireccionalLimitadaNinguna
Rendimiento I/ONativo en /homeBajoNativo
GUI Apps LinuxSí (WSLg)
Complejidad setupMuy bajaMediaAlta
¿Para quién es WSL? Para desarrolladores, ingenieros de datos, estudiantes de DevOps, o cualquier persona que necesite herramientas Linux pero prefiera usar Windows como sistema principal. Es ideal para aprender Linux sin arriesgar tu sistema.
Quiz — Módulo 1
1. ¿Qué versión de WSL se recomienda usar actualmente y por qué?
WSL 2 corre un kernel Linux completo en una VM Hyper-V ligera, lo que le da compatibilidad total con syscalls de Linux y un rendimiento muy superior para compilaciones y E/S en el sistema de archivos de Linux.
2. ¿Cómo comparte archivos WSL 2 entre Windows y Linux?
WSL 2 usa el protocolo de red 9P (Plan 9 Filesystem Protocol) para montar el sistema de archivos de Windows en Linux (/mnt/c, /mnt/d) y viceversa, permitiendo acceso bidireccional en tiempo real.
✅ ¡Excelente! Módulo 1 completado. Puedes avanzar al siguiente.

Instalación de WSL 2

Nivel 1 · Principiante
Requisitos previos: Windows 10 (build 19041+) o Windows 11. Virtualización habilitada en BIOS/UEFI. Privilegios de administrador.

Método 1: Un Solo Comando (Recomendado)

Desde Windows 10 build 2004 en adelante, puedes instalar WSL con un único comando en PowerShell como Administrador:

powershell (administrador)
# Instala WSL 2 con Ubuntu por defecto
wsl --install

# Si quieres elegir la distribución:
wsl --install -d Ubuntu-22.04
1
Abre PowerShell como Administrador
Presiona Win+X y selecciona "Terminal de Windows (Administrador)" o "Windows PowerShell (Administrador)".
2
Ejecuta el comando de instalación
Copia y pega wsl --install. Windows descargará e instalará WSL 2 y Ubuntu automáticamente.
3
Reinicia el sistema
Cuando termine la instalación, reinicia Windows. WSL requiere un reinicio para completar la configuración del kernel.
4
Configura tu usuario Linux
Ubuntu se abrirá automáticamente y te pedirá crear un nombre de usuario y contraseña para tu entorno Linux.

Ver Distribuciones Disponibles

powershell
# Listar distribuciones disponibles en la tienda
wsl --list --online

NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Ubuntu-22.04                    Ubuntu 22.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
openSUSE-42                     openSUSE Leap 42

# Ver distribuciones instaladas
wsl --list --verbose

  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
  Debian          Stopped         2

Comandos de Gestión de WSL

powershell
# Establecer WSL 2 como versión por defecto
wsl --set-default-version 2

# Convertir distro de WSL1 a WSL2
wsl --set-version Ubuntu 2

# Iniciar una distribución específica
wsl -d Ubuntu-22.04

# Apagar todas las distribuciones
wsl --shutdown

# Actualizar el kernel de WSL
wsl --update

# Ver versión actual
wsl --version
¡Instalación exitosa! Cuando veas el prompt username@HOSTNAME:~$ en tu terminal, WSL está funcionando correctamente.

Simulador: Primeros Pasos

Practica aquí los comandos básicos de verificación de WSL. Escribe un comando y presiona Enter o el botón Ejecutar.

WSL Simulator — Ubuntu 22.04
WSL Simulator v2.0 — AutoNovations Academy
Comandos disponibles: wsl --version, wsl --list, uname -a, whoami, echo, pwd
──────────────────────────────────────────────
PS C:\Users\user>
Quiz — Módulo 2
1. ¿Qué comando instala WSL con Ubuntu por defecto en un solo paso?
El comando wsl --install descarga e instala WSL 2 junto con Ubuntu automáticamente. Es el método oficial recomendado por Microsoft desde Windows 10 21H2.
2. ¿Qué flag usas para ver todas las distribuciones instaladas con su versión WSL?
wsl --list --verbose (o wsl -l -v) muestra todas las distribuciones instaladas, su estado (Running/Stopped) y la versión WSL (1 o 2).
✅ ¡Módulo 2 completado! Ya sabes instalar y gestionar WSL.

Terminal Linux Básico

Nivel 1 · Principiante

La terminal (shell) es la interfaz principal para trabajar en Linux. En WSL usarás principalmente Bash (Bourne Again Shell). Dominar los comandos básicos es fundamental.

Navegación del Sistema

bash — Navegación
# pwd — Print Working Directory (dónde estás)
pwd
/home/usuario

# ls — List files (listar archivos)
ls
Desktop  Documents  Downloads  Music  Pictures

# ls con detalles y archivos ocultos
ls -la
total 52
drwxr-xr-x 8 usuario usuario 4096 Jun 26 09:00 .
drwxr-xr-x 3 root    root    4096 Jun 25 18:00 ..
-rw-r--r-- 1 usuario usuario  220 Jun 25 18:00 .bash_logout
drwxr-xr-x 2 usuario usuario 4096 Jun 26 09:00 Documents

# cd — Change Directory (cambiar directorio)
cd Documents
cd ..          # Sube un nivel
cd ~           # Va al home del usuario
cd /           # Va a la raíz del sistema
cd -           # Va al directorio anterior

Crear y Manejar Archivos

bash — Archivos y Directorios
# Crear directorio
mkdir mi_proyecto
mkdir -p proyectos/web/css    # Crea directorios anidados

# Crear archivo vacío
touch archivo.txt

# Escribir en un archivo
echo "Hola WSL" > hola.txt      # Sobreescribe
echo "Segunda línea" >> hola.txt  # Agrega al final

# Leer archivos
cat hola.txt                     # Muestra el contenido
less archivo_largo.txt           # Lectura paginada
head -n 5 archivo.txt            # Primeras 5 líneas
tail -n 5 archivo.txt            # Últimas 5 líneas
tail -f /var/log/syslog          # Seguir un log en vivo

# Copiar, mover, eliminar
cp origen.txt destino.txt
mv archivo.txt nueva_ruta/
rm archivo.txt
rm -rf directorio/              # ¡Cuidado! Elimina todo
Precaución con rm -rf: En Linux no hay papelera de reciclaje. rm -rf elimina permanentemente sin confirmación. Siempre verifica el path antes de ejecutarlo.

Buscar Archivos y Contenido

bash — Búsqueda
# find — buscar archivos
find . -name "*.txt"             # Por nombre
find /home -size +10M            # Por tamaño (>10MB)
find . -type d                   # Solo directorios
find . -mtime -7                 # Modificados últimos 7 días

# grep — buscar dentro de archivos
grep "error" logfile.txt        # Busca "error"
grep -r "TODO" ./src/           # Recursivo
grep -i "usuario" config.txt    # Sin distinción mayúsculas
grep -n "error" app.log         # Con número de línea

# Combinar con pipes
cat access.log | grep "404" | wc -l  # Contar errores 404

Atajos Indispensables del Terminal

AtajoAcción
TabAutocompletar comandos y rutas
↑ / ↓Navegar historial de comandos
Ctrl+CInterrumpir proceso en ejecución
Ctrl+ZSuspender proceso (enviar a background)
Ctrl+LLimpiar la pantalla (como clear)
Ctrl+AIr al inicio de la línea
Ctrl+EIr al final de la línea
Ctrl+RBúsqueda reversa en el historial

Práctica Interactiva

Prueba los comandos básicos aquí. Intenta: ls, pwd, whoami, echo "hola", uname -a, date, mkdir test, cat /etc/os-release

ubuntu@DESKTOP-WSL:~$
Bienvenido al Simulador de Terminal Linux — WSL Mastery
usuario@wsl:~$
Quiz — Módulo 3
1. ¿Qué comando muestra el directorio de trabajo actual?
pwd = Print Working Directory. Muestra la ruta absoluta del directorio donde te encuentras actualmente.
2. ¿Qué hace el comando grep -r "TODO" ./src/?
El flag -r hace que grep busque de forma recursiva en todos los archivos y subdirectorios del path indicado, mostrando cada línea que contenga el patrón.
✅ ¡Módulo 3 completado! Dominas el terminal básico.

Sistema de Archivos en WSL

Nivel 2 · Intermedio

Uno de los aspectos más importantes de WSL es entender cómo se integran los sistemas de archivos de Windows y Linux. Ambos son accesibles desde cualquiera de los dos entornos.

Jerarquía del Sistema de Archivos Linux

/ # Raíz del sistema ├── home/ # Directorios de usuarios │ └── usuario/ # Tu home (~) ├── mnt/ # Montajes — aquí están tus discos Windows │ ├── c/ # Disco C: de Windows │ └── d/ # Disco D: de Windows ├── etc/ # Configuración del sistema ├── var/ # Datos variables (logs, cache) ├── usr/ # Aplicaciones y librerías ├── tmp/ # Archivos temporales ├── root/ # Home del superusuario └── proc/ # Sistema de archivos virtual (procesos)

Acceso Cruzado entre Windows y Linux

bash — Acceso a Windows desde Linux
# Acceder al escritorio de Windows
cd /mnt/c/Users/TuNombre/Desktop

# Acceder a Documentos
cd /mnt/c/Users/TuNombre/Documents

# Listar archivos de C:
ls /mnt/c/

# Copiar archivo de Windows a Linux
cp /mnt/c/Users/TuNombre/archivo.txt ~/

# Crear alias para acceso rápido
echo 'alias cdesktop="cd /mnt/c/Users/TuNombre/Desktop"' >> ~/.bashrc
source ~/.bashrc
powershell / explorer — Acceso a Linux desde Windows
# Abrir el home de Linux en el Explorador de Archivos
explorer.exe .     # Desde la terminal WSL

# En PowerShell, acceder a Linux via UNC path
dir \\wsl$\Ubuntu-22.04\home\usuario

# En el Explorador: busca "Linux" en el panel izquierdo
# O escribe en la barra: \\wsl$\Ubuntu-22.04
Regla de Oro de Rendimiento: Guarda tus proyectos dentro del sistema de archivos Linux (~/) y no en /mnt/c/. Las operaciones de I/O dentro de Linux son hasta 10x más rápidas que en la ruta montada de Windows.

Permisos de Archivos en Linux

Linux usa un sistema de permisos con tres categorías: propietario, grupo y otros. Cada uno puede tener permisos de read, write y execute.

bash — Permisos
# Ver permisos
ls -la script.sh
-rwxr-xr-- 1 usuario grupo 1234 Jun 26 09:00 script.sh
# │││├─ usuario: rwx (leer, escribir, ejecutar)
# ││├── grupo: r-x (leer, ejecutar)
# │└─── otros: r-- (solo leer)

# Cambiar permisos (chmod)
chmod +x script.sh      # Hacer ejecutable
chmod 755 script.sh     # rwxr-xr-x (octal)
chmod 644 archivo.txt   # rw-r--r--
chmod -R 755 directorio/ # Recursivo

# Cambiar propietario (chown)
sudo chown usuario:grupo archivo.txt
sudo chown -R usuario directorio/
Quiz — Módulo 4
1. ¿En qué ruta está montado el disco C: de Windows dentro de WSL?
WSL monta automáticamente todas las unidades de Windows en /mnt/. El disco C: está en /mnt/c, el D: en /mnt/d, etc.
2. ¿Qué hace chmod 755 script.sh?
755 en octal = 7(rwx) para propietario, 5(r-x) para grupo, 5(r-x) para otros. Es el permiso estándar para scripts y directorios públicos.
✅ ¡Módulo 4 completado! Dominas el sistema de archivos.

Gestión de Paquetes con APT

Nivel 2 · Intermedio

En Ubuntu/Debian (las distros más usadas en WSL), el gestor de paquetes es APT (Advanced Package Tool). Te permite instalar, actualizar y eliminar software de forma sencilla.

¿Qué es sudo?
sudo (Super User DO) te permite ejecutar comandos con privilegios de administrador (root). Es necesario para instalar software y modificar configuraciones del sistema. Se te pedirá tu contraseña de usuario Linux.

Comandos APT Esenciales

bash — APT Package Manager
# SIEMPRE actualiza la lista de paquetes primero
sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Reading package lists... Done
Building dependency tree... Done
42 packages can be upgraded.

# Actualizar paquetes instalados
sudo apt upgrade -y

# Instalar un paquete
sudo apt install git
sudo apt install python3 python3-pip -y

# Buscar un paquete
apt search nodejs
apt show curl         # Información detallada

# Eliminar paquetes
sudo apt remove paquete
sudo apt purge paquete  # Elimina también configuración
sudo apt autoremove     # Elimina dependencias huérfanas

# Limpiar cache
sudo apt clean

Software Esencial para Desarrolladores

bash — Dev Stack Setup
# Actualizar e instalar herramientas base
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl wget build-essential

# Python
sudo apt install -y python3 python3-pip python3-venv
python3 --version
Python 3.10.12

# Node.js (vía nvm - recomendado)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts
node --version
v20.14.0

# Git configuración inicial
git config --global user.name "Tu Nombre"
git config --global user.email "tu@email.com"
git config --global core.editor "code --wait"

Herramientas de Productividad

bash — Herramientas útiles
# htop — monitor de sistema interactivo
sudo apt install htop
htop

# tmux — multiplexor de terminal
sudo apt install tmux

# zsh + oh-my-zsh — shell mejorada
sudo apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# bat — cat con sintaxis coloreada
sudo apt install bat
batcat archivo.py

# fzf — buscador difuso
sudo apt install fzf

# tree — mostrar árbol de directorios
sudo apt install tree
tree -L 2 ./mi_proyecto
Quiz — Módulo 5
1. ¿Cuál es el orden correcto para instalar un paquete en Ubuntu?
Siempre debes ejecutar sudo apt update primero para refrescar la lista de paquetes disponibles. Luego sudo apt install para instalar.
2. ¿Qué diferencia hay entre apt remove y apt purge?
apt purge hace una desinstalación completa incluyendo los archivos de configuración en /etc. Usa purge cuando quieras empezar de cero con un servicio.
✅ ¡Módulo 5 completado! Dominas APT y la gestión de paquetes.

Configuración Avanzada de WSL

Nivel 2 · Intermedio

WSL es altamente configurable. Puedes ajustar recursos de hardware, comportamiento del sistema de archivos, integración con Windows y mucho más mediante archivos de configuración.

Archivo .wslconfig (Global)

Este archivo en C:\Users\TuNombre\.wslconfig controla los recursos globales de todas las distribuciones WSL.

ini — C:\Users\TuNombre\.wslconfig
[wsl2]
# Memoria RAM asignada a WSL (por defecto: 50% del sistema)
memory=8GB

# Núcleos de CPU (por defecto: todos los del sistema)
processors=4

# Memoria de swap
swap=2GB

# Habilitar soporte para GUI apps (WSLg)
guiApplications=true

# Networking — mirrored para mejor integración
networkingMode=mirrored

# Auto-reclamar memoria no usada
autoMemoryReclaim=gradual

# Habilitar DNS tunneling
dnsTunneling=true

# Habilitar firewall de Windows
firewall=true

Archivo /etc/wsl.conf (Por Distribución)

Este archivo dentro de cada distribución Linux controla su comportamiento individual.

ini — /etc/wsl.conf (dentro de WSL)
[automount]
# Montar drives de Windows automáticamente
enabled = true
root = /mnt/
# Opciones de montaje (drs: acceso a metadatos Windows)
options = "metadata,umask=22,fmask=11"
mountFsTab = true

[boot]
# Ejecutar systemd (WSL2 con kernel 5.15+)
systemd = true
# Ejecutar script al iniciar
command = "service ssh start"

[network]
# Nombre del host en la red
hostname = mi-wsl-dev
# Generar /etc/hosts automáticamente
generateHosts = true
generateResolvConf = true

[interop]
# Permitir ejecutar binarios de Windows desde Linux
enabled = true
appendWindowsPath = true

Personalizar el Shell con ~/.bashrc

bash — ~/.bashrc
# Agregar al final de ~/.bashrc

# Alias útiles
alias ll='ls -alF'
alias la='ls -A'
alias cls='clear'
alias update='sudo apt update && sudo apt upgrade -y'
alias myip='curl ifconfig.me'

# Acceso rápido al escritorio de Windows
export WIN_HOME="/mnt/c/Users/TuNombre"
alias cdesktop="cd $WIN_HOME/Desktop"
alias cdocs="cd $WIN_HOME/Documents"

# Prompt personalizado con colores
export PS1='\[\033[01;32m\]\u@wsl\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# Aplicar cambios
source ~/.bashrc
Systemd en WSL: Con systemd=true en wsl.conf puedes usar systemctl para gestionar servicios como en Ubuntu real: sudo systemctl start nginx
Quiz — Módulo 6
1. ¿Dónde se guarda el archivo .wslconfig global?
.wslconfig es un archivo de Windows que va en tu carpeta de usuario (%USERPROFILE%). Controla los recursos globales de WSL 2 como memoria y CPU.
2. ¿Qué opción en /etc/wsl.conf activa el soporte de systemd?
En la sección [boot] de /etc/wsl.conf, la opción systemd = true activa el gestor de servicios systemd, disponible desde el kernel de WSL 5.15+.
✅ ¡Módulo 6 completado! Sabes configurar WSL a fondo.

Redes y Puertos en WSL

Nivel 2 · Intermedio

WSL 2 tiene su propia interfaz de red virtual. Entender cómo funcionan las redes te permite exponer servicios, conectarte a bases de datos y configurar proxies correctamente.

Conceptos de Red en WSL

localhost
Un servicio en WSL es accesible desde Windows en localhost:puerto. WSL redirige automáticamente.
IP de WSL
WSL tiene su propia IP interna (ej: 172.x.x.x). Cambia con cada reinicio en modo NAT.
Modo Mirrored
Con networkingMode=mirrored, WSL comparte la IP de Windows, simplificando enormemente la red.
bash — Comandos de Red
# Ver IP de WSL
ip addr show eth0
hostname -I
172.20.48.1

# Ver puertos en uso
ss -tulpn
netstat -tulpn

# Probar conectividad
ping google.com -c 4
curl -I https://google.com

# Desde WSL, obtener IP del host Windows
cat /etc/resolv.conf | grep nameserver
nameserver 172.20.48.1   # Esta es la IP del host Windows

# Configurar una variable de entorno con la IP del host
export HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
echo $HOST_IP

Exponer un Servidor Web de WSL

bash — Servidor Python desde WSL
# Iniciar servidor web simple en puerto 8080
python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

# Ahora en Windows, abre el navegador en:
# http://localhost:8080
# WSL redirige el puerto automáticamente

# Instalar y levantar Nginx
sudo apt install nginx
sudo service nginx start
# → Abre http://localhost en Windows

SSH desde WSL

bash — SSH
# Instalar cliente SSH (ya viene instalado)
ssh usuario@servidor.com
ssh -p 2222 usuario@192.168.1.100

# Generar clave SSH en WSL
ssh-keygen -t ed25519 -C "tu@email.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/usuario/.ssh/id_ed25519):

# Copiar clave pública al servidor
ssh-copy-id usuario@servidor.com

# Configurar SSH para múltiples hosts
nano ~/.ssh/config
Quiz — Módulo 7
1. Si levantas un servidor en WSL en el puerto 3000, ¿cómo accedes desde Windows?
WSL 2 redirige automáticamente los puertos de Linux al host Windows. Cualquier servicio que escuche en 0.0.0.0 o localhost en WSL es accesible desde Windows en localhost:puerto.
✅ ¡Módulo 7 completado! Entiendes las redes en WSL.

Dev Tools y Docker en WSL

Nivel 3 · Avanzado

VS Code + WSL (Remote Extension)

La integración de VS Code con WSL es una de las mejores funciones. Editas código en Windows, pero el servidor de lenguaje, el terminal y las extensiones corren en Linux.

bash — Abrir VS Code en WSL
# Desde cualquier directorio en WSL, abre VS Code
code .

# Abre un archivo específico
code archivo.py

# VS Code detecta automáticamente que estás en WSL
# e instala el servidor "VS Code Server" en Linux
Instala la extensión "WSL" (anteriormente Remote - WSL) en VS Code. Esto te da acceso completo al entorno Linux: IntelliSense, debugging, testing, todo dentro de WSL.

Docker Desktop con Backend WSL 2

Docker Desktop usa WSL 2 como su motor de contenedores, dando rendimiento nativo de Linux en Windows.

1
Instala Docker Desktop para Windows
Descarga de docker.com/products/docker-desktop. Durante la instalación, selecciona "Use WSL 2 based engine".
2
Habilita integración con tu distro
En Docker Desktop → Settings → Resources → WSL Integration → activa tu distribución Ubuntu.
3
Usa Docker desde WSL
Ahora puedes usar docker y docker compose directamente en tu terminal WSL.
bash — Docker en WSL
# Verificar Docker funciona en WSL
docker --version
Docker version 25.0.3, build 4debf41

# Correr tu primer contenedor
docker run hello-world

# Correr Nginx en Docker
docker run -d -p 8080:80 --name mi-nginx nginx
# → Abre http://localhost:8080 en Windows

# Ver contenedores activos
docker ps

# Docker Compose
docker compose up -d
docker compose logs -f
docker compose down

Bases de Datos en WSL

bash — PostgreSQL y MySQL
# PostgreSQL
sudo apt install postgresql postgresql-contrib
sudo service postgresql start
sudo -u postgres psql

# MySQL
sudo apt install mysql-server
sudo service mysql start
sudo mysql

# Redis
sudo apt install redis-server
sudo service redis-server start
redis-cli ping
PONG

# Con systemd activado, usa systemctl
sudo systemctl enable postgresql
sudo systemctl start postgresql
Quiz — Módulo 8
1. ¿Qué comando abre VS Code desde el terminal WSL en el directorio actual?
code . lanza VS Code desde WSL. Si tienes la extensión WSL instalada, VS Code se conecta automáticamente al entorno Linux y ejecuta el servidor de lenguaje ahí.
✅ ¡Módulo 8 completado! Sabes configurar tu entorno de desarrollo completo.

Shell Scripting en Bash

Nivel 3 · Avanzado

El scripting en Bash te permite automatizar tareas repetitivas, crear pipelines de datos, configurar entornos de desarrollo y mucho más. Es una habilidad fundamental para cualquier ingeniero.

Tu Primer Script

bash — hello_wsl.sh
#!/bin/bash
# La primera línea (shebang) indica qué intérprete usar

# Variables
NOMBRE="AutoNovations"
FECHA=$(date +"%Y-%m-%d")  # Capturar salida de comando

# Echo con colores
echo -e "\033[36m=== WSL Master Script ===\033[0m"
echo "Hola desde $NOMBRE — $FECHA"

# Condicionales
if [ -d "/tmp/test" ]; then
    echo "El directorio /tmp/test existe"
else
    mkdir /tmp/test
    echo "Directorio creado: /tmp/test"
fi

# Bucle for
for i in 1 2 3 4 5; do
    echo "Iteración: $i"
done

# Funciones
saludar() {
    local nombre=$1
    echo "¡Bienvenido, $nombre!"
}

saludar "DevOps Engineer"
bash — Ejecutar el script
# Crear el archivo
nano hello_wsl.sh

# Hacerlo ejecutable
chmod +x hello_wsl.sh

# Ejecutarlo
./hello_wsl.sh
=== WSL Master Script ===
Hola desde AutoNovations — 2024-06-26
Directorio creado: /tmp/test
Iteración: 1
Iteración: 2
Iteración: 3
Iteración: 4
Iteración: 5
¡Bienvenido, DevOps Engineer!

Script Real: Setup de Proyecto Dev

bash — setup_project.sh
#!/bin/bash
# Script para configurar un nuevo proyecto Python

set -e  # Salir si hay algún error

PROJECT_NAME=${1:-"mi_proyecto"}  # Parámetro o default
PYTHON=python3

echo "🚀 Creando proyecto: $PROJECT_NAME"

# Crear estructura
mkdir -p $PROJECT_NAME/{src,tests,docs}
cd $PROJECT_NAME

# Entorno virtual
$PYTHON -m venv .venv
source .venv/bin/activate

# Archivos base
cat > README.md <<EOF
# $PROJECT_NAME
Proyecto creado con WSL + AutoNovations setup script.
EOF

touch src/__init__.py tests/__init__.py
echo "requests\npytest" > requirements.txt
pip install -r requirements.txt -q

# Inicializar git
git init && git add . && git commit -m "Initial commit"

echo "✅ Proyecto $PROJECT_NAME listo en $(pwd)"

Automatización con Cron

bash — Cron Jobs
# Abrir el editor de cron del usuario actual
crontab -e

# Formato: MIN HORA DIA MES DIASEMANA COMANDO

# Ejecutar backup.sh cada día a las 2:00 AM
0 2 * * * /home/usuario/scripts/backup.sh

# Ejecutar cada 5 minutos
*/5 * * * * /home/usuario/scripts/monitor.sh

# Ver cron jobs activos
crontab -l
Quiz — Módulo 9
1. ¿Qué hace la línea #!/bin/bash al inicio de un script?
El shebang (#!) seguido de la ruta del intérprete dice al kernel qué programa usar para ejecutar el script. #!/bin/bash usa Bash, #!/usr/bin/env python3 usaría Python.
2. ¿Cómo capturas la salida de un comando en una variable Bash?
La sintaxis $(...) se llama "command substitution". Ejecuta el comando dentro y captura su salida stdout como string. Por ejemplo: FECHA=$(date)
✅ ¡Módulo 9 completado! Dominas el scripting en Bash.

Nivel Master: WSL Avanzado

Nivel 3 · Master

Exportar e Importar Distribuciones

Puedes crear backups completos de tu distribución WSL y restaurarlos en otro equipo.

powershell — Backup y Restore
# Exportar distro a archivo .tar
wsl --export Ubuntu-22.04 C:\backups\ubuntu-dev.tar

# Importar en otro equipo o con otro nombre
wsl --import Ubuntu-Dev C:\WSL\Ubuntu-Dev C:\backups\ubuntu-dev.tar

# Verificar importación
wsl --list --verbose

# Iniciar la distro importada
wsl -d Ubuntu-Dev

WSLg: Aplicaciones GUI Linux

Con WSL 2 y WSLg puedes ejecutar aplicaciones gráficas de Linux directamente en tu escritorio Windows sin configuración adicional.

bash — Aplicaciones GUI
# Instalar Gedit (editor de texto gráfico)
sudo apt install gedit
gedit &   # Se abre en tu escritorio Windows

# Instalar navegador Firefox
sudo apt install firefox
firefox &

# Instalar Nautilus (explorador de archivos GNOME)
sudo apt install nautilus
nautilus &

# Ver variable DISPLAY (debería estar configurada)
echo $DISPLAY
:0

Múltiples Distribuciones y Gestión Avanzada

powershell — Multi-distro
# Instalar múltiples distribuciones
wsl --install -d Ubuntu-22.04
wsl --install -d Debian
wsl --install -d kali-linux

# Establecer distribución por defecto
wsl --set-default Ubuntu-22.04

# Ejecutar comando en una distro específica
wsl -d Debian -- apt list --installed

# Terminar una distro específica
wsl --terminate Debian

# Eliminar una distro completamente
wsl --unregister Debian

Optimización de Rendimiento

bash + .wslconfig — Optimización
# Ver uso de memoria del sistema Linux free -h total used free Mem: 7.8Gi 1.2Gi 6.6Gi Swap: 2.0Gi 0B 2.0Gi # Ver procesos por uso de CPU top -bn1 | head -20 htop # Ver uso de disco df -h du -sh * | sort -h # Tamaño de cada item, ordenado # Compactar el VHD de WSL (libera espacio en Windows) wsl --shutdown # Luego en PowerShell como admin: # Optimize-VHD -Path "$env:LOCALAPPDATA\Packages\...\LocalState\ext4.vhdx" -Mode Full

Seguridad y SSH Keys para GitHub/GitLab

bash — SSH para GitHub
# Generar clave SSH Ed25519 (más segura) ssh-keygen -t ed25519 -C "tu@email.com" -f ~/.ssh/github_key # Iniciar el agente SSH eval "$(ssh-agent -s)" ssh-add ~/.ssh/github_key # Ver tu clave pública (cópiala a GitHub Settings > SSH Keys) cat ~/.ssh/github_key.pub # Configurar ~/.ssh/config para múltiples cuentas nano ~/.ssh/config # Dentro del archivo: Host github.com HostName github.com User git IdentityFile ~/.ssh/github_key # Probar conexión ssh -T git@github.com Hi username! You've successfully authenticated.
Quiz Final — Módulo 10
1. ¿Qué comando exporta una distribución WSL completa para hacer un backup?
wsl --export <Distro> <archivo.tar> guarda el sistema de archivos completo en un tar. Luego puedes restaurarlo en cualquier equipo con wsl --import.
2. ¿Qué tipo de clave SSH se recomienda usar hoy en día para mayor seguridad?
Ed25519 usa curvas elípticas y es más seguro y rápido que RSA. Es el estándar recomendado por GitHub, GitLab y la mayoría de servicios modernos. Genera claves más cortas pero con mayor seguridad criptográfica.
🏆 ¡FELICIDADES! Completaste todos los módulos del curso WSL Mastery.
Certificado de Completación
Has completado con éxito el curso WSL Mastery de AutoNovations University. Dominas el Windows Subsystem for Linux desde instalación básica hasta configuración avanzada, scripting y DevOps.
Volver al inicio