Categoría: Varios

  • Espanse – El poder de los atajos (Ubuntu)

    Espanse – El poder de los atajos (Ubuntu)

    Espanso es una de esas herramientas pequeñas que, cuando encajan en tu forma de trabajar, te roban minutos al reloj cada día y luego no los devuelven nunca. Y eso es bueno.

    Dicho sin épica innecesaria: Espanso es un expansor de texto a nivel de sistema.

    Escribes algo corto… y se transforma automáticamente en algo largo.

    Es el autocomplete de tu cerebro.

    Instalación en Ubuntu

    Antes de empezar. Espanso funciona de forma fiable en X11, no en Wayland.
    En Ubuntu moderno eso importa.

    Comprobar si estás en X11 o Wayland

    Abre una terminal y ejecuta:

    
    
    
    
    
    echo $XDG_SESSION_TYPE
    • x11 → perfecto, continúa
    • waylandrecomendado cambiar a X11

    Cambiar a X11 (GNOME)

    1. Cierra sesión
    2. En la pantalla de login, pulsa ⚙️
    3. Elige “Ubuntu on Xorg”
    4. Inicia sesión
    5. Comprueba otra vez con echo $XDG_SESSION_TYPE

    Descargar Espanso (versión X11)

    Ve a la web oficial: https://espanso.org/docs/install/linux/#deb-x11

    Descarga el paquete:

    • espanso-debian-x11-amd64.deb

    Opción recomendada: dpkg

    Evita problemas de permisos con _apt.

    
    
    
    
    
    sudo dpkg -i espanso-debian-x11-amd64.deb
    

    Si salen errores de dependencias:

    
    
    
    
    
    sudo apt -f install

    Espanso usa systemd de usuario.
    Si no lo registras, no arrancará solo.

    
    
    
    
    
    espanso service register
    

    Introduce tu contraseña si la pide.


    Arrancar Espanso

    
    
    
    
    
    espanso start
    

    Comprobar estado:

    
    
    
    
    
    espanso status
    

    Resultado esperado:

    
    
    
    
    
    espanso is running
    

    Probar que funciona

    Abre cualquier sitio donde puedas escribir:

    • Terminal
    • VS Code
    • Navegador
    • Editor de texto

    Escribe:

    
    
    
    
    
    :date
    

    Si se sustituye por la fecha → funciona.


    Dónde se configura Espanso

    Ruta principal:

    
    
    
    
    
    ~/.config/espanso/
    

    Atajos (lo importante):

    
    
    
    
    
    ~/.config/espanso/match/
    

    Ejemplo de atajo simple:

    
    
    
    
    
    matches:
      - trigger: ":hola"
        replace: "Hola mundo 👋"
    

    Después de editar:

    
    
    
    
    
    espanso restart
    

    Arranque automático (comprobación)

    Espanso debería arrancar solo al iniciar sesión.
    Puedes verificarlo con:

    
    
    
    
    
    systemctl --user status espanso

    Posibles problemas

    ProblemaCausa habitualSolución
    espanso is not runningEl servicio no está registradoEjecutar:~~~bashespanso service registerespanso start~~~
    No expande textoEstás en Wayland o Espanso no está activo• Comprobar sesión X11:~~~bashecho $XDG_SESSION_TYPE~~~• Probar en un editor gráfico (VS Code, navegador, etc.)• Reiniciar Espanso:~~~bashespanso restart~~~
    Error al instalar Espanso X11 teniendo WaylandConflicto entre paquetes espanso-wayland y espanso-x11Desinstalar primero Wayland:~~~bashsudo apt remove espanso-wayland~~~Luego instalar la versión X11

    ​Crear atajos en Espanso

    En Ubuntu los atajos de Espanso se guardan en ~/.config/espanso/match y se editan en archivos YAML como base.yml.

    Localizar la carpeta de Espanso en Ubuntu

    • Ruta por defecto (si no tocaste XDG): ~/.config/espanso (es decir, /home/tu_usuario/.config/espanso).

    También puedes verlo ejecutando:

    
    
    
    
    
    espanso path
    

    que te mostrará la ruta exacta de configuración en tu sistema.​

    Entra en la carpeta de matches:

      cd ~/.config/espanso/match
      

      Abre (o crea) base.yml con tu editor favorito, por ejemplo:

      
      
      
      
      
      nano base.yml
      

      Asegúrate de que al menos tenga esta estructura básica:

      
      
      
      
      
      matches:     
         - trigger: ":hola"      replace: "Hola, ¿qué tal?"
      • matches: es la clave raíz y cada - define un atajo.
      • trigger es lo que escribes y replace lo que Espanso inserta.

      Ejemplos pensados para Ubuntu

      Puedes añadir estos ejemplos bajo matches: en el mismo base.yml:

      
      
      
      
      
      matches:
        # Saludo rápido
        - trigger: ":saludo"
          replace: "Hola, ¿qué tal estás?"
      
        # Comando típico de actualización
        - trigger: ":aptup"
          replace: "sudo apt update && sudo apt upgrade -y"
      
        # Firma para correos
        - trigger: ":firma"
          replace: "Un saludo,\nTu Nombre"
      
        # Fecha actual (útil para documentación)
        - trigger: ":hoy"
          replace: "{{hoy}}"
          vars:
            - name: hoy
              type: date
              params:
                format: "%Y-%m-%d"
      
      • Estos snippets funcionan en cualquier app donde Espanso esté activo (terminal, editor, navegador, etc.).

      La variable date permite generar la fecha en el formato indicado.

      Recargar Espanso para aplicar cambios

      • Después de guardar base.yml, recarga Espanso:
      espanso restart
      

      Si lo tienes como servicio de usuario (systemd), puede ser algo como:

      
      
      
      
      
      systemctl --user restart espanso
      

      según cómo lo instalases en Ubuntu.

    1. TGPT desde la terminal (Windows · Linux · macOS)

      TGPT desde la terminal (Windows · Linux · macOS)

      Manual de instalación y uso de tgpt

      1. ¿Qué es tgpt y para qué sirve?

      tgpt es un cliente no oficial que permite interactuar con modelos tipo ChatGPT directamente desde la terminal, sin navegador y sin iniciar sesión en OpenAI.

      Se usa mucho para:

      • Resolver dudas técnicas rápidas
      • Explicar comandos Linux
      • Generar scripts
      • Pedir ejemplos de código
      • Documentar procesos
      • Automatizar consultas desde scripts

      No sustituye el razonamiento humano. Es un copiloto, no el piloto.



      2. Instalación en Windows

      Instalar Node.js

      1. Descargar desde: https://nodejs.org
      2. Instalar la versión LTS
      3. Verificar desde PowerShell o CMD:
      
      
      
      
      
      node -v
      npm -v
      

      Si aparecen versiones, todo va bien.


      Instalar tgpt

      En PowerShell o CMD:

      
      
      
      
      
      npm install -g tgpt
      

      Comprobar instalación:

      
      
      
      
      
      tgpt --help
      

      Primer uso en Windows

      Ejemplo simple:

      
      
      
      
      
      tgpt "¿Qué es un firewall?"
      

      Ejemplo técnico:

      
      
      
      
      
      tgpt "Explícame el comando netstat en Windows con ejemplos"
      

      3. Instalación en Linux (Ubuntu, Debian, Kali, Parrot…)

      curl -sSL https://raw.githubusercontent.com/aandrew-me/tgpt/main/install | bash -s /usr/local/bin
      

      Comprobar:

      
      
      
      
      
      tgpt --help
      

      Primer uso en Linux

      Ejemplo OSINT:

      
      
      
      
      
      tgpt "¿Qué es OSINT y qué tipos de fuentes existen?"
      

      Ejemplo Linux:

      
      
      
      
      
      tgpt "Explícame el comando grep con ejemplos reales"
      

      Ejemplo scripting:

      
      
      
      
      
      tgpt "Hazme un script bash para comprobar si un host responde a ping"
      

      4. Instalación en macOS

      5.1 Instalar Homebrew (si no está instalado)

      En Terminal:

      
      
      
      
      
      brew install tgpt

      Verificar:

      
      
      
      
      
      tgpt --help
      

      Ejemplo programación:

      
      
      
      
      
      tgpt "Dame un ejemplo sencillo de una API REST"
      

      Ejemplo sistemas:

      
      
      
      
      
      tgpt "Diferencias entre TCP y UDP explicadas para principiantes"
      

      5. Uso básico de tgpt

      Consulta directa

      
      
      
      
      
      tgpt "Explícame qué es un hash"
      

      Respuestas más técnicas

      
      
      
      
      
      tgpt "Explícame qué es SHA-256 con un ejemplo práctico"
      

      Modo conversación

      
      
      
      
      
      tgpt -c
      

      Permite hacer varias preguntas seguidas manteniendo contexto.


      Salida sin colores (útil para logs o scripts)

      
      
      
      
      
      tgpt --no-color "Qué es un IDS"
      

      6. Buenas prácticas

      • No copiar y pegar sin entender
      • Verificar comandos antes de ejecutarlos
      • Usar tgpt como ayuda, no como sustituto del aprendizaje
      • Contrastar respuestas técnicas
      • Documentar qué pregunta se hizo y por qué

      7. Ejemplos

      Ejemplo 1 – Linux

      
      
      
      
      
      tgpt "Explícame paso a paso cómo funciona chmod"
      

      Ejemplo 2 – Ciberseguridad

      
      
      
      
      
      tgpt "Diferencias entre IDS y IPS con ejemplos"
      

      Ejemplo 3 – OSINT

      
      
      
      
      
      tgpt "Herramientas OSINT que se pueden usar desde terminal"
      

      Ejemplo 4 – Programación

      
      
      
      
      
      tgpt "Ejemplo de conexión a MySQL en PHP usando PDO"
      

      8. Problemas comunes

      • command not found → tgpt no está en el PATH
      • Permisos npm → usar sudo en Linux
      • Node muy antiguo → actualizar Node.js
      • Respuestas erróneas → recordar que la IA puede equivocarse

      Opciones y flags con ejemplos reales

      Uso básico (sin flags)

      
      
      
      
      
      tgpt "¿Qué es un IDS?"
      

      Esto lanza una consulta directa y devuelve una respuesta estándar, con colores y formato amigable.

      Es el modo “háblame como a un humano”.


      -m → Elegir modelo (cuando está disponible)

      El flag -m permite indicar el modelo que se quiere usar.
      No siempre todos los modelos están activos, pero el concepto es clave didácticamente.

      
      
      
      
      
      tgpt -m gpt-3.5-turbo "Explícame qué es OSINT"
      

      Ejemplo técnico:

      
      
      
      
      
      tgpt -m gpt-3.5-turbo "Dame un ejemplo de escaneo pasivo"
      


      Prueba a comparar la misma pregunta con y sin -m y analizar diferencias de detalle, precisión o estilo.


      -s → Modo shell / respuesta corta y directa

      Este flag es oro para Linux.

      -s (shell mode) intenta responder como si fuera una ayuda de terminal: más conciso, menos charla.

      
      
      
      
      
      tgpt -s "comando para listar puertos abiertos en linux"
      

      Salida típica: comandos directos, sin narrativa larga.

      Ejemplo muy útil:

      
      
      
      
      
      tgpt -s "como ver mi ip publica en linux"
      

      -c → Modo conversación (contexto persistente)

      Activa un modo interactivo.
      tgpt recuerda lo que se ha dicho en esa sesión.

      
      
      
      
      
      tgpt -c
      

      Luego:

      
      
      
      
      
      ¿qué es nmap?
      ¿y en qué se diferencia de masscan?
      ponme un ejemplo práctico
      

      Esto es perfecto para:

      • razonamiento progresivo
      • tutoría guiada
      • simulación de mentor técnico

      El contexto se pierde al salir del programa.


      --no-color → Sin colores (scripts, logs, redirecciones)

      Cuando la salida se va a:

      • un archivo
      • un pipe
      • un script bash

      Los colores estorban.

      
      
      
      
      
      tgpt --no-color "qué es un hash" > hash.txt
      

      O encadenado:

      
      
      
      
      
      tgpt --no-color -s "comando para ver procesos" | less
      


      -q → Modo silencioso (solo respuesta)

      El flag -q elimina encabezados y texto adicional.

      
      
      
      
      
      tgpt -q "comando para ver usuarios conectados"
      

      Muy útil cuando:

      • quieres solo la respuesta
      • estás comparando resultados
      • lo usas como apoyo rápido

      Combinando flags (aquí está la magia)

      Ejemplo 1 – Linux puro

      
      
      
      
      
      tgpt -s -q "ver uso de disco en linux"
      

      Respuesta directa, corta, sin ruido.


      Ejemplo 2 – OSINT

      
      
      
      
      
      tgpt -s "herramientas osint que funcionen desde terminal"
      

      Ejemplo 3 – Para scripting

      
      
      
      
      
      tgpt --no-color -s "script bash para comprobar si un host responde a ping"
      

      Ejemplo 4 – Clase de ciberseguridad

      
      
      
      
      
      tgpt -c -s
      

      Y dentro:

      
      
      
      
      
      que es un firewall
      diferencia entre firewall y waf
      ejemplo en entorno real
      

      Ver todas las opciones disponibles

      Siempre recordar a los alumnos:

      
      
      
      
      
      tgpt --help
      

      Esto refuerza un hábito clave: leer la ayuda antes de preguntar.


      Ejercicios

      1. Ejecuta la misma pregunta de 3 formas:
        • sin flags
        • con -s
        • con -s -q
      2. Pregunta:
        • ¿Cuál es más útil para terminal?
        • ¿Cuál para aprender?
        • ¿Cuál para automatizar?

      Ejemplo de pregunta base:

      "comando para ver conexiones activas en linux"
      

      Chuleta rápida de tgpt


      tgpt no es ChatGPT, es una interfaz.
      Lo interesante no es la IA, sino cómo la integras en tu flujo de trabajo Linux:


    2. Ollama – Chatbot IA Local en 5 Minutos

      Ollama – Chatbot IA Local en 5 Minutos

      ¿cuándo usar tgpt y cuándo usar Ollama?

      En el ecosistema actual de IA aplicada a terminal y ciberseguridad aparecen dos enfoques muy distintos:

      • tgpt → un cliente que conecta con modelos en la nube
      • Ollama → un motor local que ejecuta modelos en tu propio sistema

      Ambos usan IA. Pero resuelven problemas distintos.


      1. Qué es tgpt (en una frase honesta)

      tgpt es un puente entre tu terminal y modelos en la nube.

      • No ejecuta IA local
      • Envía tus prompts a un servicio externo
      • Devuelve la respuesta en texto, integrada en la terminal

      Mentalmente:

      “Un ChatGPT sin navegador, pegado a la shell.”


      2. Qué es Ollama (en una frase honesta)

      Ollama es una plataforma para ejecutar modelos de IA localmente.

      • Los modelos están en tu disco
      • El razonamiento ocurre en tu máquina
      • No depende de Internet
      • Tú controlas datos, logs y flujos

      Mentalmente:

      “Un motor de IA como si fuera un servicio más del sistema.”


      3. Comparativa

      AspectotgptOllama
      TipoClienteMotor local
      Dónde se ejecuta la IANubeTu servidor
      Requiere InternetNo
      PrivacidadBaja–mediaAlta
      Consumo de recursos localesMuy bajoMedio–alto
      Facilidad de usoMuy altaMedia
      Control del sistemaNuloTotal
      Ideal paraConsultas rápidasIntegración técnica
      Uso en producciónNo
      Valor educativo en ciberConceptualArquitectónico

      4. Cuándo es mejor usar tgpt

      Usa tgpt cuando:

      • Quieres rapidez
      • Estás aprendiendo conceptos
      • Necesitas ayuda puntual con:
        • comandos
        • sintaxis
        • explicaciones
      • No te importa que el contenido viaje a la nube
      • Estás en un equipo con pocos recursos

      Ejemplos reales:

      • “Explícame este error de Bash”
      • “¿Qué hace este comando?”
      • “Dame una idea rápida”

      tgpt es ideal como calculadora mental avanzada.


      5. Cuándo es mejor usar Ollama

      Usa Ollama cuando:

      • Trabajas con:
        • logs reales
        • datos sensibles
        • salidas de herramientas de ciber
      • Quieres offline
      • Necesitas:
        • automatización
        • integración con scripts
        • auditoría y control
      • Estás enseñando arquitectura y seguridad
      • No quieres depender de terceros

      Ejemplos reales:

      • Analizar auth.log
      • Resumir resultados de nmap
      • Asistir en scripting
      • Crear un copiloto de terminal seguro
      • Laboratorios en red aislada

      Requisitos mínimos Ollama (realistas)

      Antes de tocar nada, conviene saber qué espera Ollama del hierro:

      • Ubuntu Server 24.04 LTS (OK)
      • Arquitectura x86_64
      • CPU decente (funciona sin GPU, pero paciencia)
      • RAM recomendada:
        • 8 GB → modelos pequeños (phi, tinyllama)
        • 16 GB o más → llama3, mistral, etc.
      • Acceso a internet

      Comprueba lo básico:

      lsb_release -a
      uname -m
      free -h
      



      Instalación

      Ollama se instala con un único script oficial. No snaps, no flatpaks, no dramas.

      
      
      
      
      
      curl -fsSL https://ollama.com/install.sh | sh
      

      Qué hace este script (para tu tranquilidad mental):

      • Descarga el binario de Ollama
      • Lo instala en /usr/bin/ollama
      • Crea un servicio systemd
      • Arranca Ollama automáticamente

      Comprobar que el servicio está vivo

      En un server, systemd manda:

      
      
      
      
      
      systemctl status ollama
      

      Deberías ver algo como:

      • Active: active (running)
      • Escuchando en 127.0.0.1:11434

      Si no está activo:

      
      
      
      
      
      sudo systemctl enable --now ollama
      

      Probar Ollama desde terminal

      Aquí viene la parte bonita: usar IA sin navegador.

      Prueba con un modelo ligero primero:

      
      
      
      
      
      ollama run phi
      

      O uno más conocido:

      
      
      
      
      
      ollama run llama3
      

      La primera vez:

      • Descarga el modelo
      • Puede tardar (no está roto, está pensando)

      Cuando veas un prompt tipo:

      
      
      
      
      
      >>> 
      

      Ya tienes un LLM local funcionando. Sin nube. Sin vender tu alma.


      Ver modelos instalados

      
      
      
      
      
      ollama list
      

      Descargar modelos sin ejecutarlos:

      
      
      
      
      
      ollama pull mistral
      ollama pull llama3:8b
      

      Uso como servicio (API local)

      Ollama levanta una API REST en local:

      • URL: http://localhost:11434

      Prueba rápida:

      
      
      
      
      
      curl http://localhost:11434/api/tags
      

      Esto es oro puro para:

      • Scripts Python
      • Herramientas OSINT
      • Automatización en ciber
      • Integrarlo con apps web internas

      Permitir acceso desde otra máquina (opcional)

      ⚠️ Ojo sysadmin: por defecto SOLO escucha en localhost.

      Si quieres que otros equipos accedan (por ejemplo, alumnos o un frontend):

      Edita el servicio:

      
      
      
      
      
      sudo systemctl edit ollama
      

      Añade:

      
      
      
      
      
      [Service]
      Environment="OLLAMA_HOST=0.0.0.0:11434"
      

      Luego:

      
      
      
      
      
      sudo systemctl daemon-reload
      sudo systemctl restart ollama
      

      Y abre firewall si procede:

      
      
      
      
      
      sudo ufw allow 11434/tcp
      

      Dónde guarda Ollama los modelos

      Importante para servidores con discos separados:

      • Por defecto:
        /usr/share/ollama/.ollama

      Puedes moverlo usando:

      
      
      
      
      
      export OLLAMA_MODELS=/ruta/grande/ollama-models
      

      En server con /data o /mnt, esto es muy recomendable.


      Desinstalar

      sudo systemctl stop ollama
      sudo rm /usr/bin/ollama
      sudo rm /etc/systemd/system/ollama.service
      sudo rm -rf /usr/share/ollama
      

      Modelos Ollama – Tamaño en disco y recursos

      ModeloParámetros (B)RAM recomendadaTamaño en disco aprox.VelocidadUso típico
      tinyllama1.1B2–4 GB~0.7 GBMuy altaPruebas rápidas
      qwen2.5:0.5b0.5B2–3 GB~0.4 GBMuy altaComandos simples
      phi2.7B4–6 GB~1.6 GBMuy altaTerminal, docencia
      orca-mini3B6–8 GB~2.0 GBAltaExplicaciones
      mistral7B8 GB~4.1 GBAltaUso técnico
      qwen2.5:7b7B8 GB~4.0 GBAltaCódigo
      llama3:8b8B8–10 GB~4.7 GBAltaCiber, logs
      codellama7B8–10 GB~3.8–4.2 GBMediaProgramación
      deepseek-coder6–7B8–12 GB~3.5–4.0 GBMediaCódigo
      nous-hermes7–13B8–16 GB~4.5–8.0 GBMediaRazonamiento
      mixtral:8x7bMoE16–32 GB~26–28 GBMediaAnálisis complejo
      llama3:70b70B64+ GB~40–45 GBBajaServidores grandes
      gemma:7b7B8 GB~4.0 GBAltaLenguaje
      yi:6b6B8 GB~3.5 GBMediaMultilenguaje
      yi:34b34B32+ GB~20–22 GBBajaAnálisis profundo

      Comprobar que Ollama está instalado y activo

      En tu Ubuntu Server 24:

      
      
      
      
      
      ollama --version
      systemctl status ollama
      

      Si ves versión y estado active (running), seguimos.


      Instalar (descargar) el modelo codellama

      Instalar un modelo en Ollama es simplemente hacer un pull:

      
      
      
      
      
      ollama pull codellama
      

      Qué ocurre aquí:

      • Se descarga el modelo
      • Se guarda en disco
      • No se ejecuta todavía
      • Puede tardar (son ~4 GB)

      Paciencia de sysadmin.


      Verificar que el modelo está instalado

      
      
      
      
      
      ollama list
      

      Deberías ver algo así:

      
      
      
      
      
      NAME           ID            SIZE     MODIFIED
      codellama      xxxx          ~4.0 GB  …
      

      Usar el modelo

      Modo interactivo

      
      
      
      
      
      ollama run codellama
      

      Te aparecerá:

      
      
      
      
      
      >>>
      

      Ejemplo:

      
      
      
      
      
      >>> escribe un script bash que liste usuarios conectados
      

      Responderá orientado a código, no a charla.


      Uso directo (una sola petición)

      
      
      
      
      
      ollama run codellama "escribe un script en bash para hacer backup de /etc"
      

      Perfecto para redirecciones:

      
      
      
      
      
      ollama run codellama "crea un script de backup de /etc" > backup.sh
      chmod +x backup.sh
      

      Elegir tamaño de codellama (muy importante)

      codellama tiene variantes. Puedes pedir una concreta:

      VarianteRAM recomendadaDisco aprox.
      codellama:7b8–10 GB~3.8 GB
      codellama:13b14–18 GB~7–8 GB
      codellama:34b32+ GB~20 GB

      Ejemplo explícito:

      
      
      
      
      
      ollama pull codellama:7b
      

      Si no indicas nada, Ollama suele traer la variante por defecto (normalmente 7B).

      Uso de Ollama en ejecución del sistema

      Ollama puede:

      • Generar comandos
      • Generar scripts
      • Generar código
      • Analizar salidas de comandos
      • Decidir qué comando habría que ejecutar

      Pero alguien tiene que ejecutarlos. Ese alguien eres tú… o un wrapper.

      El esquema mental sano es este:

      
      
      
      
      
      [ Usuario ] → [ Ollama (razona) ] → [ Script intermedio ] → [ Sistema ]
      

      Nunca:

      
      
      
      
      
      IA → root → caos

      Ollama puede generar contenido:

      
      
      
      
      
      
      
      
      
      
      ollama run llama3 "Escribe un README.md sobre este proyecto" > README.md
      

      Aquí sí crea archivos, pero porque la shell redirige la salida.
      Ollama sigue sin tocar el sistema.


      El peligro real

      El riesgo no es Ollama.
      El riesgo es esto:

      #Peligro
      eval "$(ollama run llama3 'dame un comando para limpiar el sistema')"

      Ejecutar comandos con control (wrapper en Bash)

      #!/bin/bash
      if [ $# -gt 0 ]; then
        pregunta$1
      else
          read -p "Pregunta a la IA: " pregunta
      fi
      
      
      
      respuesta=$(ollama run phi "$pregunta. Devuelve SOLO un comando seguro.")
      
      echo "La IA propone ejecutar:"
      echo "$respuesta"
      
      read -p "¿Ejecutar? (s/n): " ok
      if [[ "$ok" == "s" ]]; then
          eval "$respuesta"
      fi
      

      Qué ocurre aquí:

      • Ollama propone
      • El humano autoriza
      • El sistema ejecuta

      En Linux, un comando es solo:

      • un archivo ejecutable
      • ubicado en un directorio que esté en $PATH

      Si eso se cumple → se ejecuta desde cualquier sitio.

      Compruébalo:

      
      
      
      
      
      echo $PATH
      

      Verás cosas como:

      • /usr/bin
      • /usr/local/bin
      • /bin

      Ahí es donde viven los comandos “del sistema”.


      Opción recomendada: /usr/local/bin (limpio y correcto)

      Supongamos que tu script se llama ollama-shell.sh.

      Mover el script

      
      
      
      
      
      sudo mv ollama-shell.sh /usr/local/bin/ollama-shell
      

      Nota:

      • Quitamos .sh → parece un comando real
      • Linux no necesita extensión

      Dar permisos de ejecución

      
      
      
      
      
      sudo chmod +x /usr/local/bin/ollama-shell
      

      Probar desde cualquier sitio

      
      
      
      
      
      cd /tmp
      ollama-shell
      

      Script Wraper avanzado

      Aquí tienes un script con muchas mas opciones:

      #!/usr/bin/env bash
      set -euo pipefail
      
      # -----------------------------
      # Ollama Shell Assistant (Seguro)
      # - Pregunta a un modelo Ollama local
      # - Fuerza español usando modelo "llama3-es"
      # - Devuelve un único comando
      # - Valida contra lista blanca
      # - Pide confirmación antes de ejecutar
      # - Registra todo en /var/log/ollama-shell.log
      # -----------------------------
      
      MODEL="${MODEL:-llama3-es}"
      LOG_FILE="${LOG_FILE:-/var/log/ollama-shell.log}"
      
      MODE="${MODE:-ask}"  # ask | exec
      TIMEOUT_SECS="${TIMEOUT_SECS:-120}"
      
      # Lista blanca básica de comandos permitidos (ajústala a tu contexto)
      ALLOW_CMDS=(
        "ls" "ll" "pwd" "cd"
        "cat" "less" "head" "tail"
        "grep" "egrep" "fgrep" "awk" "sed" "cut" "sort" "uniq" "wc"
        "find" "locate" "which" "whereis"
        "ip" "ss" "netstat" "ping" "traceroute" "dig" "nslookup" "curl" "wget"
        "ps" "top" "htop" "free" "df" "du" "uptime" "uname" "lsblk"
        "systemctl" "journalctl"
        "who" "w" "id" "groups" "last" "lastb"
        "tar" "gzip" "gunzip" "zip" "unzip"
        "apt" "apt-get" "dpkg" "snap"
        "nmap"
      )
      
      print_help() {
        cat <<'EOF'
      Uso:
        ollama-shell [-e] [-m MODELO] "pregunta..."
        ollama-shell --suggest "pregunta..."
        ollama-shell --exec "pregunta..."
        ollama-shell --help
      
      Opciones:
        -m, --model     Modelo Ollama a usar (por defecto: llama3-es)
        -e, --exec      Permite ejecutar (con confirmación humana)
        --suggest       Solo sugiere (no ejecuta)
        --log FILE      Archivo de log (por defecto: /var/log/ollama-shell.log)
      
      Variables:
        MODEL=llama3-es
        MODE=ask|exec
        LOG_FILE=/var/log/ollama-shell.log
        TIMEOUT_SECS=120
      
      Notas:
      - El modelo debe devolver SOLO UN comando.
      - Se valida el comando contra una lista blanca básica.
      EOF
      }
      
      die() {
        echo "ERROR: $*" >&2
        exit 1
      }
      
      ensure_ollama() {
        command -v ollama >/dev/null 2>&1 || die "No encuentro 'ollama' en PATH. ¿Está instalado?"
        systemctl is-active --quiet ollama 2>/dev/null || true
      }
      
      ensure_log_writable() {
        # Intentar escribir en LOG_FILE; si no se puede, degradar a ~/.ollama-shell.log
        if ! (touch "$LOG_FILE" 2>/dev/null); then
          LOG_FILE="$HOME/.ollama-shell.log"
          touch "$LOG_FILE" || die "No puedo escribir logs ni en /var/log ni en HOME."
        fi
      }
      
      log_line() {
        local msg="$1"
        printf '%s | user=%s | cwd=%s | %s\n' "$(date '+%F %T')" "${USER:-unknown}" "$(pwd)" "$msg" >> "$LOG_FILE"
      }
      
      trim() {
        sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
      }
      
      first_token() {
        # Devuelve el primer token (comando base), ignorando sudo si aparece
        local s="$1"
        s="$(echo "$s" | trim)"
        if [[ "$s" == sudo\ * ]]; then
          echo "$s" | awk '{print $2}'
        else
          echo "$s" | awk '{print $1}'
        fi
      }
      
      is_allowed_cmd() {
        local cmd="$1"
        for a in "${ALLOW_CMDS[@]}"; do
          [[ "$cmd" == "$a" ]] && return 0
        done
        return 1
      }
      
      looks_dangerous() {
        # Filtros anti-destrucción básicos (no exhaustivos)
        local s="$1"
        s="$(echo "$s" | trim)"
        [[ -z "$s" ]] && return 0
      
        # Cosas típicas peligrosas
        if echo "$s" | grep -Eqi 'rm\s+-rf\s+/' ; then return 0; fi
        if echo "$s" | grep -Eqi 'mkfs|dd\s+if=|:\(\)\s*\{\s*:\|\s*:\s*;\s*\}\s*;|shutdown|reboot|poweroff' ; then return 0; fi
        if echo "$s" | grep -Eqi '>\s*/etc/|>\s*/bin/|>\s*/usr/bin/|chown\s+root|chmod\s+4[0-7]{3}|chmod\s+u\+s' ; then return 0; fi
      
        # Inyección obvia
        if echo "$s" | grep -Eqi '\$\(|`' ; then return 0; fi
      
        return 1
      }
      
      ask_ollama_for_command() {
        local question="$1"
      
        local prompt
        prompt=$(
          cat <<EOF
      Eres un asistente técnico experto en Linux y ciberseguridad.
      Respondes SIEMPRE en español.
      Tu tarea: proponer EXACTAMENTE UN comando de terminal (una sola línea) para ayudar con la petición del usuario.
      REGLAS:
      - Devuelve SOLO el comando. Sin explicaciones. Sin comillas. Sin markdown.
      - El comando debe ser lo más seguro posible (preferir lectura/consulta a escritura).
      - Evita acciones destructivas. No uses rm, mkfs, dd, ni cambios de permisos peligrosos.
      Petición del usuario:
      $question
      EOF
        )
      
        # Timeout para evitar bloqueos largos
        # Nota: 'timeout' suele estar en coreutils
        if command -v timeout >/dev/null 2>&1; then
          timeout "$TIMEOUT_SECS" ollama run "$MODEL" "$prompt" 2>/dev/null | head -n 1 | trim
        else
          ollama run "$MODEL" "$prompt" 2>/dev/null | head -n 1 | trim
        fi
      }
      
      confirm() {
        local msg="$1"
        read -r -p "$msg (s/n): " ans
        [[ "${ans,,}" == "s" ]]
      }
      
      main() {
        local question=""
        local explicit_mode=""
        local explicit_model=""
        local explicit_log=""
      
        while [[ $# -gt 0 ]]; do
          case "$1" in
            -m|--model) explicit_model="$2"; shift 2 ;;
            -e|--exec) explicit_mode="exec"; shift ;;
            --suggest) explicit_mode="ask"; shift ;;
            --log) explicit_log="$2"; shift 2 ;;
            -h|--help) print_help; exit 0 ;;
            *)
              # Resto como pregunta (permitimos comillas)
              question="$*"
              break
              ;;
          esac
        done
      
        [[ -n "$explicit_model" ]] && MODEL="$explicit_model"
        [[ -n "$explicit_mode" ]] && MODE="$explicit_mode"
        [[ -n "$explicit_log" ]] && LOG_FILE="$explicit_log"
      
        [[ -z "$question" ]] && die "Falta la pregunta. Usa --help para ver ejemplos."
      
        ensure_ollama
        ensure_log_writable
      
        log_line "question=$(printf '%q' "$question") model=$MODEL mode=$MODE"
      
        local cmd
        cmd="$(ask_ollama_for_command "$question")"
      
        log_line "raw_cmd=$(printf '%q' "$cmd")"
      
        [[ -z "$cmd" ]] && die "El modelo no devolvió un comando."
      
        # Validaciones básicas
        if looks_dangerous "$cmd"; then
          log_line "blocked_reason=dangerous_pattern"
          die "Comando bloqueado por patrón peligroso: $cmd"
        fi
      
        local base
        base="$(first_token "$cmd")"
        if ! is_allowed_cmd "$base"; then
          log_line "blocked_reason=not_in_allowlist base=$base"
          die "Comando bloqueado (no está en la lista blanca): $base"
        fi
      
        echo "$cmd"
      
        if [[ "$MODE" == "exec" ]]; then
          if confirm "¿Ejecutar el comando anterior?"; then
            log_line "exec=YES cmd=$(printf '%q' "$cmd")"
            # Ejecuta tal cual (sin eval). Bash interpretará la línea como comando.
            bash -lc "$cmd"
          else
            log_line "exec=NO"
            echo "Cancelado."
          fi
        else
          echo "Modo sugerencia (no ejecuto nada). Usa --exec para permitir ejecución con confirmación."
        fi
      }
      
      main "$@"
      

      Instalación global (para todo el sistema)

      1. Mueve el script a /usr/local/bin y dale permisos:
      
      
      
      
      
      sudo mv ollama-shell /usr/local/bin/ollama-shell
      sudo chmod +x /usr/local/bin/ollama-shell
      
      1. Prueba:
      
      
      
      
      
      ollama-shell "muestra los puertos en escucha"
      
      1. Para permitir ejecución (con confirmación):
      
      
      
      
      
      ollama-shell --exec "muestra los últimos intentos de login fallidos"
      

      Forma más simple: usar el modelo por defecto

      En el script que te pasé, al principio tienes:

      
      
      
      
      
      MODEL="${MODEL:-llama3-es}"
      

      Eso significa:

      • Si no indicas nada, usa llama3-es
      • Es el comportamiento por defecto

      Ejemplo:

      
      
      
      
      
      ollama-shell "lista los usuarios conectados"
      

      Usa automáticamente llama3-es.


      Indicar el modelo en la llamada (recomendado)

      El script soporta el parámetro -m o --model.

      Ejemplo:

      
      
      
      
      
      ollama-shell -m codellama-es "crea un script bash para hacer backup de /etc"
      

      Aquí:

      • No tocas el script
      • Cambias el modelo solo para esa ejecución
      • Ideal para comparar modelos en clase

      Forzar el modelo con variable de entorno

      Esto es muy Unix y muy elegante.

      Para una sola ejecución

      
      
      
      
      
      MODEL=codellama-es ollama-shell "analiza este script"
      

      Para toda la sesión

      
      
      
      
      
      export MODEL=codellama-es
      ollama-shell "genera un Makefile sencillo"
      

      Hasta que cierres la terminal, siempre usará ese modelo.


      Cambiar el modelo por defecto en el script

      Si quieres que siempre use codellama-es, edita el script:

      
      
      
      
      
      nano /usr/local/bin/ollama-shell
      

      Busca:

      
      
      
      
      
      MODEL="${MODEL:-llama3-es}"
      

      Y cambia a:

      
      
      
      
      
      MODEL="${MODEL:-codellama-es}"
      

      A partir de ahí, ese será el modelo base.


      Ver qué modelo se está usando (opcional pero didáctico)

      Si quieres que el script lo muestre, añade justo antes de llamar a Ollama:

      
      
      
      
      
      echo "Modelo en uso: $MODEL"
      

      O loguéalo:

      
      
      
      
      
      log_line "model_in_use=$MODEL"
      

      Esto es muy bueno para auditoría


      Ejemplos

      ComandoQué ocurre
      ollama-shell "ver procesos"Usa modelo por defecto
      ollama-shell -m phi "ver procesos"Usa phi
      MODEL=codellama-es ollama-shell "crear script"Usa codellama-es
      ollama-shell --exec -m llama3-es "ver puertos"Ejecuta con llama3-es

      Comandos básicos que conviene conocer

      
      
      
      
      
      ollama run llama3:8b # Ejecutar modelo
      ollama list # Modelos instalados 
      ollama pull mistral # Descargar modelo 
      ollama rm mistral # Borrar modelo 
      ollama ps # Modelos en uso 
      ollama stop llama3:8b # Detener modelo

      Instalación en Mac-os

      1️⃣ Descarga

      https://ollama.com/download/mac

      Pulsa Download for macOS


      2️⃣ Instala

      • Abre el .dmg
      • Arrastra Ollama a Applications
      • Ábrelo (la primera vez macOS pedirá permiso)

      📌Ollama se queda ejecutándose en segundo plano (daemon).


      3️⃣ Verifica desde Terminal

      Abre Terminal y ejecuta:

      
      
      
      
      
      ollama --version
      

      Si ves algo como:

      
      
      
      
      
      ollama version x.x.x
      

      ✔️ Instalación correcta


      Primer uso: ejecutar un modelo

      Descargar y ejecutar LLaMA 3 (8B)

      
      
      
      
      
      ollama run llama3:8b
      

      La primera vez:

      • Descarga el modelo (varios GB)
      • Luego entras directamente en modo conversación
    3. Actividad: Del píxel al polígono

      Actividad: Del píxel al polígono

      Arqueología del videojuego y evolución del hardware

      Contexto de la actividad

      En esta sesión realizaremos una actividad práctica y lúdica utilizando Raspberry Pi con juegos retro y gafas de realidad virtual (VR). El objetivo no es solo jugar, sino analizar un videojuego clásico como producto tecnológico, entendiendo el hardware en el que nació, comparándolo con ordenadores profesionales de su época y reflexionando sobre cómo podría adaptarse al hardware actual.

      Los videojuegos retro son un excelente ejemplo de cómo la creatividad y el diseño se adaptaban a fuertes limitaciones técnicas. Esta actividad te propone investigar, comparar y soñar… pero siempre con base técnica.


      Desarrollo de la actividad

      Fase 1 · Exploración del juego (en clase)

      Durante la sesión en clase:

      • Utilizarás una Raspberry Pi con emuladores y mandos.
      • Seleccionarás un único videojuego retro de cualquiera de las plataformas disponibles (arcade, NES, SNES, Mega Drive, PlayStation, etc.).
      • Jugarás durante un tiempo limitado con el objetivo de observar, no de completar el juego.

      Debes fijarte especialmente en:

      • Tipo de controles
      • Gráficos y estilo visual
      • Sonido y música
      • Dificultad
      • Ritmo del juego

      Fase 2 · Ficha técnica del videojuego

      En el trabajo a entregar deberás incluir una ficha con la siguiente información:

      • Nombre del videojuego
      • Año aproximado de lanzamiento
      • Plataforma o plataformas originales
      • Tipo de juego (plataformas, shooter, puzzle, etc.)

      Fase 3 · Análisis de la plataforma original

      Analiza el hardware original para el que fue creado el juego:

      • Número de bits de la plataforma (8, 16, 32 bits, etc.)
      • Tipo de CPU (si se conoce)
      • Memoria aproximada
      • Resolución gráfica típica
      • Tipo de soporte (cartucho, CD, placa arcade…)

      Reflexiona brevemente sobre qué limitaciones técnicas tenía esa plataforma y cómo influyeron en el diseño del juego.


      Mientras jugábamos… ¿qué usaban los profesionales?

      Fase 4 · Hardware profesional contemporáneo

      Investiga qué ordenadores u estaciones de trabajo de uso profesional existían en la misma época que la plataforma de tu juego.

      Debes elegir al menos uno y responder:

      • Nombre del equipo
      • CPU utilizada
      • Cantidad de memoria
      • Sistema operativo
      • Uso principal (científico, empresarial, diseño, programación, etc.)

      Ejemplos orientativos (puedes usar otros):

      • IBM PC / PC-AT
      • Apple Macintosh
      • Commodore Amiga
      • Atari ST
      • Estaciones Sun, DEC, SGI, NeXT…

      Fase 5 · Comparación técnica

      Compara el hardware del videojuego con el ordenador profesional investigado:

      • ¿Cuál tenía más potencia?
      • ¿Cuál tenía más memoria?
      • ¿Cuál tenía mejores capacidades gráficas reales?
      • ¿Cuál era más caro?
      • ¿Por qué, pese a existir hardware más potente, los juegos se desarrollaban para consolas?

      Fase 6 · De lo profesional a lo doméstico

      Reflexiona sobre la evolución tecnológica:

      • ¿Qué tecnologías que antes eran profesionales hoy son comunes?
        • Gráficos acelerados
        • Sonido digital
        • Multitarea
        • Redes
      • ¿En qué momento los ordenadores domésticos superaron a las consolas clásicas?

      Fase 7 · El salto a la actualidad: Raspberry Pi

      Analiza el papel de la Raspberry Pi:

      • ¿Qué tipo de ordenador es?
      • ¿Se parece más a una consola antigua o a un PC profesional antiguo?
      • ¿Qué usos profesionales reales tiene hoy?
        • Servidores
        • Automatización
        • IoT
        • Educación

      Fase 8 · Imaginando el juego en Realidad Virtual

      Durante la sesión podrás probar gafas VR.

      En el trabajo deberás responder:

      • ¿Cómo se podría adaptar tu juego a realidad virtual?
        • Tipo de vista (primera persona, tercera persona, maqueta…)
        • Controles
        • Escala del mundo
      • ¿Qué elementos deberían mantenerse para que siga siendo el mismo juego?
      • ¿Qué problemas técnicos podrían aparecer?
        • Mareos
        • Latencia
        • Precisión de controles
        • Rendimiento

      Pregunta final de reflexión

      Responde de forma razonada:

      Si tuvieras que explicar qué es una Raspberry Pi a alguien de la época de tu videojuego, usando solo comparaciones con hardware antiguo… ¿qué dirías?


      Entrega del trabajo

      • Formato: PDF
      • Extensión: entre 3 y 5 páginas
      • Contenido: texto claro, imágenes opcionales (capturas, hardware, esquemas)

      Se valorará especialmente:

      • Comprensión técnica
      • Capacidad de análisis y comparación
      • Reflexión crítica
      • Creatividad con base tecnológica