Aprende Linux Jugando con GameShell

Domina la terminal Linux creando un entorno Docker inmutable para GameShell. Resuelve misiones y forja tu memoria muscular sin riesgos.

Un joven aprendiz que debe dominar los caminos ocultos de un reino medieval superando diversas pruebas

Hace poco me topé con un repositorio en GitHub que me pareció interesante. Se trata de GameShell, un proyecto realizado por el Laboratoire de Mathématiques de la Université de Savoie, Francia.

Muchas personas se enfrentan a un desafío cuando utilizan por primera vez un entorno basado en Linux. Aunque muchas distribuciones han hecho cambios para ser más accesibles a usuarios menos experimentados, el uso de la terminal y saber comandos básicos sigue siendo una tarea a la que tarde o temprano se tienen que enfrentar. Incluso puede generar miedo o temor el enfrentarse a una línea de comandos, por el hecho de no recordar qué comando ejecutar, o ejecutar mal el comando y obtener una salida inesperada. Ahi entra GameShell.

Mediante una serie de misiones, iremos ejecutando comandos de Linux en un entorno seguro, y de manera lúdica, entenderemos mejor los comando de Linux. La historia es simple: somos un joven aprendiz que debe dominar los caminos ocultos de un reino medieval superando diversas pruebas. Dichas misiones se deben superar usando comandos de Linux.

Entre los comandos de Linux que aprenderemos son: cd para movernos en el escenario, ls para saber qué tenemos en nuestra ubicación actual, pwd para saber en dónde estamos, y muchos otros.

Para esto, he generado un Dockerfile que nos ayudará a cargar todas las dependencias que necesita GameShell.

# Se fija la imagen oficial estable basada en Debian Trixie Slim
FROM debian:trixie-20261005-slim

ARG DEBIAN_FRONTEND=noninteractive
ARG USERNAME=sysadmin
ARG USER_UID=1000
ARG USER_GID=1000

# Integración de variables de entorno, incluyendo SHELL y DISPLAY virtual
ENV LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    TERM=xterm-256color \
    DISPLAY=:99 \
    SHELL=/bin/bash

# Capa única: actualización, dependencias base + descubiertas y configuración de sudoers
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        ca-certificates curl wget procps psmisc net-tools \
        git sudo less vim gettext-base gawk make \
        ncal nano xvfb x11-apps tree; \
    groupadd --gid "${USER_GID}" "${USERNAME}"; \
    useradd --uid "${USER_UID}" --gid "${USER_GID}" --create-home --shell /bin/bash "${USERNAME}"; \
    echo "${USERNAME} ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/${USERNAME}"; \
    chmod 0440 "/etc/sudoers.d/${USERNAME}"; \
    visudo -c -f "/etc/sudoers.d/${USERNAME}"; \
    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
    apt-get clean; \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Conmutación al usuario no privilegiado antes de clonar
USER ${USERNAME}
WORKDIR /home/${USERNAME}

# Clonación directa del repositorio
RUN git clone https://github.com/phyver/GameShell.git

# Fijación del directorio de trabajo definitivo
WORKDIR /home/${USERNAME}/GameShell

# Creación del script de inicialización (entrypoint) que levanta Xvfb y ejecuta GameShell
RUN echo '#!/bin/bash\n\
Xvfb :99 -screen 0 800x600x16 > /dev/null 2>&1 &\n\
exec ./start.sh "$@"' > entrypoint.sh && \
    chmod +x entrypoint.sh

STOPSIGNAL SIGTERM

# Definición del script de entrada por defecto
ENTRYPOINT ["./entrypoint.sh"]

Ahora debemos construir la imagen. Desde la terminal nos ubicamos donde se encuentre nuestro archivo Dockerfile y ejecutamos el siguiente comando:

docker build -t gameshell-lab:debian-13-v1 .

Una vez finalizada la creación de la imagen, podemos levantar un contenedor y ejecutar GameShell.

docker run -it --name linux-gameshell-v1 gameshell-lab:debian-13-v1

A partir de este punto empieza nuestra aventura.

Inicia la aventura

Para empezar, podemos ver la ayuda disponible con el comando:

[mission 1] $ gsh help

Esto nos muestra algunos de los comandos que podemos ejecutar durante la aventura.

  • gsh check: muestra el estado actual de la misión.
  • gsh exit: finaliza GameShell, y finaliza el contenedor.
  • gsh goal [N]: muestra el objetivo de la misión (si no le pasamos un número N, muestra el objetivo de la misión actual).
  • gsh help: muestra la ayuda.
  • gsh reset: reinicia la misión actual.

Por ejemplo, veamos qué nos pide la misión 1, que es con la que empezamos. Al ejecutar el comando gsh goal (o gsh goal 1), nos dice lo siguiente:

Mission Goal: Go to the top of the main tower of the castle.

Y nos lista algunos comandos útiles. Veamos cómo completarla, es decir, llegar a la cima de la torre principal del castillo.

  1. Primero veamos dónde estamos. Si ejecutamos el comando pwd nos dice que estamos en /home/sysadmin/GameShell/World, es decir, estamos en el Mundo.
  2. Ahora veamos qué tenemos al frente. Al ejecutar el comando ls, nos lista los siguientes lugares:
    • Castle
    • Forest
    • Garden
    • Mountain
    • Stall
  3. Entonces debemos dirigirnos al castillo (Castle). Para ello ejecutamos el comando cd Castle.
  4. Nuevamente ejecutemos el comando ls. Ahora nos lista estos lugares dentro del castillo:
    • Cellar
    • Great_hall
    • Main_building
    • Main_tower
    • Observatory
  5. Diríjamonos a la torre principal (Main_tower), y, al listar los lugares nuevamente con ls, solo tenemos el primer piso (First_floor).
  6. Vamos al primer piso con el comando cd First_floor, y, al listar los lugares nuevamente con ls, tenemos el segundo piso (Second_floor).
  7. Al entrar al segundo piso con cd Second_floor y listar los lugares con ls, vemos que nos muestra Top_of_the_tower.
  8. Finalmente, al dirigirnos a la cima de la torre con el comando cd Top_of_the_tower, habremos llegado y cumplido la misión.
  9. Para comprobarlo, si ejecutamos el comando gsh check, nos felicitará por haber cumplido la misión, y automáticamente pasará a la misión 2.

Poco a poco, avanzaremos al cumplir las missiones mientras aprendemos a movernos y ejecutar algunas acciones con los comandos de Linux.

Repositorio

Fuentes

  1. Hyvernat, P., & Lepigre, R. (s.f.). GameShell: A game to learn (or teach) how to use standard commands in a Unix shell [Código fuente]. GitHub. https://github.com/phyver/GameShell
  2. Afolabi, O. (2026, 4 de septiembre). I stopped memorizing Linux commands and started playing this instead. MakeUseOf. https://www.makeuseof.com/i-stopped-memorizing-linux-commands-and-started-playing-this-instead/