comandle: un Wordle de comandos de Linux que se juega en la terminal
Cada día hay un comando de Linux o de seguridad para adivinar en seis intentos, y al final te explica qué hace. Cómo se juega, cómo elige el comando del día y qué cuenta la web.
En este artículo
Cada día hay un comando de Linux o de seguridad para adivinar en seis intentos. Escribís uno con la misma cantidad de letras y cada letra queda verde si está en su lugar, amarilla si está en otra posición y gris si no está. Cuando termina la ronda, ganes o pierdas, aparece la ficha del comando: qué hace, tres ejemplos y una nota de seguridad.
Se llama comandle y lo armé para practicar comandos un rato por día. Se juega en el navegador, en comandle.valentorassa.com, o en la terminal:
go install github.com/legiosai/comandle@latest
comandleEs gratis, no pide cuenta y el comando del día es el mismo en los dos lados. El #1 salió el 20 de octubre.
Cómo se juega #
La categoría se ve desde el primer intento: archivos, texto, procesos, redes, permisos, sistema, seguridad, paquetes, git o contenedores. Hay 75 comandos cargados, de 4 a 8 letras, en tres niveles: básico, intermedio y avanzado.
Si le errás, el juego destapa pistas: la primera con dos intentos fallidos, la segunda con cuatro y la última con cinco. Solo valen nombres de comandos reales, de una lista de 651, así que no se puede tantear con letras sueltas. En la terminal, ? muestra los válidos con esa cantidad de letras; en la web están en la lista de comandos, y tab completa.
Al terminar copiás el resultado, que muestra cómo te fue sin decir cuál era. Esta es una ronda del #1:
comandle #1 3/6
🟨⬛⬛🟨
🟩⬛⬛🟩
🟩🟩🟩🟩
comandle.valentorassa.comEn la web, un personaje ASCII comenta la partida al estilo de cowsay: cambia los ojos cuando vas mal, festeja con exit 0 y se muere con un segmentation fault. Por defecto es vt, el pingüino, y se puede cambiar por la vaca, un conejo, un gato, un búho, un cangrejo o un fantasma.
La ficha del final #
Ese #1 era grep. Cuando la ronda termina, la ficha dice qué hace, cuándo lo usás y trae tres ejemplos para copiar:
grep -rn "TODO" ~/proyecto # archivo y número de línea de cada TODO
grep -i "error" app.log # sin importar mayúsculas
sudo grep -c "Failed password" /var/log/auth.log # intentos fallidos de login por SSHY una nota de seguridad. La de grep avisa que sirve para auditar, buscando contraseñas en texto plano o IPs raras en un log, y que si no encuentra nada solo sabés que nada coincide con tu patrón.
Dieciséis de las fichas suman un laboratorio en securitylabs.valentorassa.com para practicar el comando con un caso armado.
Desde la terminal, la ficha de cualquier comando de la lista se pide sin jugar, y hay rondas de práctica que no suman a tus estadísticas:
comandle explicar chmod # la ficha de un comando
comandle practica # una ronda al azar
comandle practica find # practicar uno puntual, por ejemplo en una clase
comandle lista # los comandos de los días que ya pasaron
comandle stats # tus estadísticas y tu rachaEl mismo comando sin un servidor #
La versión de terminal está escrita en Go y la web es HTML y JavaScript estático. Las dos leen el mismo commands.json y eligen el comando del día con la misma regla, que en la web es esta:
export function daily(commands, n) {
if (n < 1) n = 1;
if (n <= commands.length) return commands[n - 1];
return commands[fnv1a32(`comandle-${n}`) % commands.length];
}El orden del archivo es el calendario: el día n juega la entrada n. Con 75 comandos eso alcanza hasta el 2 de enero de 2027, y si para entonces no se sumaron más, los días siguen en un orden pseudoaleatorio fijo, con FNV-1a de 32 bits, el mismo hash que hash/fnv en Go. El número del día sale de la fecha en Argentina (UTC−3, sin horario de verano), así que el comando cambia a medianoche y nadie tiene que publicarlo. Un test fija que Go y JavaScript den lo mismo.
Como la respuesta viaja con el juego, cualquiera que abra el código puede ver la del día. No hay un servidor que la guarde.
Qué cuenta la web #
La versión de terminal no se conecta a internet. Tus estadísticas quedan en un archivo que solo puede leer tu usuario.
La web no usa cookies ni guarda nada que te identifique. Cuando empezás una partida, la terminás o copiás el resultado, suma 1 a un contador del día:
- al terminar, en cuántos intentos o si perdiste;
- cuántos días seguidos jugaste, calculado en tu navegador con el historial que ya guarda y mandado en tramos (1, 2–3, 4–7, 8–14, 15+);
- al entrar, el
refdel link y el sitio que te mandó.
fetch(ENDPOINT, {
method: "POST",
body: JSON.stringify({ event, key }),
mode: "cors",
credentials: "omit",
keepalive: true,
});Después de leer el ?ref=, la web lo saca de la barra, así el link que copiás queda limpio. Si tu navegador tiene activado Global Privacy Control, no manda nada.
Con eso veo cuántas partidas hay, qué comandos cuestan más y de dónde llega la gente. Cualquiera puede mandarle eventos, así que lo leo como tendencia.
Sumá un comando #
Cada comando es una entrada de data/commands.json, con categoría, nivel, tres pistas, resumen, explicación, tres ejemplos, la nota de seguridad y, si hay, el laboratorio:
{
"id": "chmod",
"category": "permisos",
"level": "básico",
"clues": [
"Decide quién puede leer, escribir o ejecutar un archivo.",
"Acepta modos en octal, como 755 o 600.",
"Su nombre viene de «change mode»."
],
"summary": "Cambia los permisos de archivos y directorios."
}Como el orden es el calendario, los nuevos van siempre al final: mover una entrada cambiaría el comando de un día que ya pasó. Al cargar, el juego revisa todas las entradas y te muestra todos los problemas juntos, para que corrijas la tuya de una vez. Los pasos están en CONTRIBUTING.md.
El código está en github.com/legiosai/comandle, con licencia Apache-2.0. Lo hice desde VT Security y lo publica Legios.
El de hoy ya está en comandle.valentorassa.com. Si lo jugás, contame en cuántos lo sacaste: en el Discord de DedSec hay un canal #comandle donde todas las mañanas a las 9 sale el del día.
Lo próximo llega también por mail. Cada dos semanas, en Apuntes.
Comentarios
Pasan por moderación antes de aparecer.