"""Tareas comunes de Linux en castellano, mapeadas al comando.

El puente que las man pages no dan: estan en ingles, y "cambiar permisos" no se
parece a "change file mode bits". Aqui viven las tareas del dia a dia dichas
como las diria el usuario, con el comando y una linea de como se usa. Es
curado a mano a proposito: son las 50 cosas que de verdad se piden, y una
traduccion buena vale mas que mil man pages mal recuperadas.

Se anaden al indice como entradas normales, asi que se buscan igual que todo lo
demas y ademas se llevan el impulso por palabras exactas.
"""

# (lo que se pide en castellano, el comando, como se usa)
TAREAS = [
    ("cambiar los permisos de un fichero o carpeta", "chmod",
     "chmod 755 fichero (rwx dueño, rx resto). chmod +x da permiso de ejecucion."),
    ("cambiar el dueño de un fichero", "chown",
     "chown usuario:grupo fichero. Con -R para una carpeta entera."),
    ("comprimir una carpeta en un archivo", "tar",
     "tar czf archivo.tar.gz carpeta/ comprime. tar xzf archivo.tar.gz extrae."),
    ("descomprimir un zip", "unzip", "unzip archivo.zip. Con -d carpeta para donde."),
    ("buscar texto dentro de ficheros", "grep",
     "grep -r 'texto' carpeta/ busca en todo. grep -i ignora mayusculas."),
    ("buscar ficheros por nombre", "find",
     "find /ruta -name '*.txt' busca por nombre. -type f solo ficheros."),
    ("ver los puertos abiertos en escucha", "ss",
     "ss -tlnp lista los puertos TCP en escucha con su proceso."),
    ("ver que procesos consumen mas", "top",
     "top o htop en tiempo real. ps aux --sort=-%cpu para una foto."),
    ("matar un proceso", "kill",
     "kill PID lo termina. kill -9 PID a la fuerza. pkill nombre por nombre."),
    ("ver el espacio libre en disco", "df", "df -h muestra el espacio por particion."),
    ("ver cuanto ocupa una carpeta", "du", "du -sh carpeta/ el tamaño total."),
    ("ver la memoria libre", "free", "free -h muestra RAM y swap."),
    ("descargar un fichero de internet", "wget",
     "wget URL descarga. curl -O URL tambien. curl -L sigue redirecciones."),
    ("copiar ficheros a un servidor", "scp",
     "scp fichero usuario@servidor:/ruta lo sube. scp -r para carpetas."),
    ("sincronizar carpetas", "rsync",
     "rsync -av origen/ destino/ copia solo lo cambiado. -z comprime en red."),
    ("editar un fichero de texto", "nano",
     "nano fichero (facil) o vim fichero. Ctrl+O guarda y Ctrl+X sale en nano."),
    ("ver el contenido de un fichero", "cat",
     "cat fichero. less fichero para leer largo. head/tail para principio/final."),
    ("ver los ultimos cambios de un fichero de log", "tail",
     "tail -f log sigue en vivo. tail -n 50 las ultimas 50 lineas."),
    ("ver los servicios del sistema", "systemctl",
     "systemctl status servicio. start/stop/restart para manejarlo."),
    ("ver los mensajes del sistema", "journalctl",
     "journalctl -xe lo reciente. journalctl -u servicio de un servicio."),
    ("montar un disco o usb", "mount",
     "mount /dev/sdX1 /mnt monta. lsblk lista los discos. umount desmonta."),
    ("ver la configuracion de red", "ip",
     "ip a las interfaces y sus IP. ip r la tabla de rutas."),
    ("escanear una red o unos puertos", "nmap",
     "nmap -sV objetivo detecta servicios. nmap -p- todos los puertos."),
    ("ver el uso de red en vivo", "iftop", "iftop o nload muestran el trafico en vivo."),
    ("cambiar de directorio y listar", "ls",
     "ls -la lista con detalles y ocultos. cd carpeta entra. pwd dice donde estas."),
    ("crear una carpeta", "mkdir", "mkdir carpeta. mkdir -p a/b/c crea la ruta entera."),
    ("mover o renombrar", "mv", "mv origen destino mueve o renombra."),
    ("copiar ficheros", "cp", "cp origen destino. cp -r para carpetas."),
    ("borrar ficheros", "rm",
     "rm fichero. rm -r carpeta. CUIDADO: no hay papelera, es definitivo."),
    ("dar permisos de administrador a un comando", "sudo",
     "sudo comando lo ejecuta como root. Pide tu contraseña."),
    ("ver el historial de comandos", "history", "history lista lo tecleado. Ctrl+R busca."),
    ("programar una tarea periodica", "cron",
     "crontab -e edita tus tareas. Formato: min hora dia mes diasemana comando."),
    ("ver la temperatura y el hardware", "sensors",
     "sensors muestra temperaturas. lscpu la CPU, lspci los dispositivos."),
    ("gestionar paquetes en Debian", "apt",
     "apt install paquete, apt update actualiza la lista, apt upgrade el sistema."),
    ("ver o cambiar variables de entorno", "export",
     "export VAR=valor la pone. env las lista. echo $VAR la muestra."),
    ("comprobar si un comando esta instalado", "which",
     "which comando dice donde esta, o nada si no esta. type comando tambien."),
    ("ver diferencias entre dos ficheros", "diff",
     "diff a b muestra las diferencias. diff -u formato de parche."),
    ("contar lineas palabras o bytes", "wc",
     "wc -l lineas, wc -w palabras. cat fichero | wc -l cuenta lineas."),
    ("conectarse a una base de datos", "psql",
     "psql -U usuario base para Postgres. mysql -u usuario -p para MySQL."),
    ("ver quien esta conectado", "who", "who los usuarios. w con lo que hacen."),
]


def entradas():
    for pide, cmd, como in TAREAS:
        yield {
            "tipo": "tarea", "herramienta": cmd, "perfil": "LINUX",
            "fichero": f"tarea comun: {cmd}",
            "texto": f"Para {pide}: usa {cmd}. {como}",
        }
