Módulo 1: La terminal y el sistema de archivos
1. Introducción: el prerequisito silencioso de media industria
Descripción
Al terminar esta lección vas a poder ubicar esta guía dentro de todo lo que quieres aprender: qué vas a saber hacer al cerrar los cinco módulos, qué queda deliberadamente afuera y a qué guía del catálogo pertenece cada cosa que no cubrimos aquí. Y vas a entender, con ejemplos reales y no con una afirmación de marketing, por qué esta guía existe en primer lugar: porque hay una habilidad que decenas de tutoriales técnicos dan por sentada sin haberla enseñado nunca.
Esto no es abstracto. Si alguna vez abriste una guía de FastAPI, de Docker o de cualquier framework y leíste una línea como pip install fastapi o docker run hello-world, esa línea asume que tú ya sabes qué es una terminal, cómo se abre, qué significa "ejecutar" algo ahí adentro y qué pasa si algo sale mal. Ese conjunto de saberes casi nunca se enseña en ningún lado: se da por sentado, como si viniera de fábrica con la computadora. No viene de fábrica. Se aprende, y eso es exactamente lo que vas a hacer en los cinco módulos que siguen.
Conexión con el módulo: esta lección abre el módulo 1 y la guía completa con el mapa general —qué vas a construir, en qué orden y con qué límites— antes de tocar un solo comando. La siguiente lección, Qué es una shell y por qué la terminal sigue ganando, ya entra en materia: distingue con precisión terminal, shell, prompt y consola, y te da el criterio para saber cuándo la terminal gana y cuándo pierde frente a una interfaz gráfica. Aquí todavía no vamos a definir ninguna de esas cuatro palabras a fondo; solo vamos a nombrar el problema que el resto de la guía resuelve.
El prerequisito que nadie escribe
Imagina que alguien te regala un libro de recetas y la primera dice: "sofríe la cebolla a fuego medio hasta que esté transparente". Para alguien que ya cocinó antes, esa frase es clarísima: sabe encender la estufa, sabe qué olla usar, sabe reconocer "fuego medio" con solo mirar la llama, y sabe qué significa que una cebolla esté "transparente" sin que nadie se lo tenga que explicar con una foto. El libro de recetas no está mal escrito. Está escrito para alguien con un piso mínimo de literacia de cocina que el autor da por sentado, porque para él es tan obvio que ni se le ocurre que haga falta explicarlo.
Ahora imagina que nunca cocinaste. Esa misma frase no te dice nada útil: no sabes dónde está la perilla que enciende la estufa, no sabes qué olla es la correcta, y "fuego medio" es un término sin referencia en tu cabeza. El problema no es que seas torpe ni que la receta esté mal. El problema es que te falta la capa de conocimiento que el libro asume que ya tienes, y ese libro nunca fue diseñado para enseñártela: fue diseñado para alguien que ya la tiene.
Eso es exactamente lo que pasa con la línea pip install fastapi en una guía de FastAPI, o con docker run hello-world en una guía de Docker. No están mal escritas. Están escritas para alguien que ya sabe abrir una terminal, ya sabe qué es "ejecutar un comando" y ya tiene una idea de qué esperar si algo sale bien o mal. Esta guía es la "literacia de cocina" que falta antes de esa receta: no te enseña FastAPI ni Docker, te enseña el piso desde el que cualquier instrucción con un comando adentro deja de ser un obstáculo.
Ejemplo trabajado: dos instrucciones reales, leídas con lupa
Vamos a tomar dos fragmentos reales de guías de este mismo catálogo —no inventados para el ejemplo— y a leerlos como los leería alguien que jamás abrió una terminal.
El primero, de la guía de FastAPI, después de haber activado un entorno virtual:
# Instalar FastAPI (incluye Pydantic, Starlette y dependencias core)
pip install fastapi
# Instalar uvicorn (servidor ASGI para correr FastAPI)
pip install "uvicorn[standard]"
El segundo, de la guía de Docker, como el primer comando que el alumno ejecuta para comprobar que la instalación funcionó:
docker run hello-world
Ninguna de las dos guías es la que estás leyendo, así que ninguna se detiene a explicar lo que sigue —y no debería: no es su trabajo, es el de esta guía—:
- Dónde escribes esto. Ninguna línea de código Python ni ningún botón de una aplicación. Un programa específico —que en la próxima lección vamos a nombrar con precisión— que existe en tu computadora ahora mismo, tenga el sistema operativo que tenga.
- Que "ejecutar" no es lo mismo que "ver". Escribir el texto no hace nada por sí solo; hace falta presionar una tecla concreta para que la máquina lo procese, y hasta ese instante el texto es solo texto.
- Que el resultado depende de dónde estabas parado. La primera instrucción asume que ya estás "dentro" del proyecto correcto, con el entorno virtual activo. Si no sabes qué significa estar "dentro" de una carpeta desde la terminal —algo que en tu computadora resuelves haciendo doble clic en un ícono— esa frase no tiene ancla.
- Que un fallo no viene con foto. Si algo de esto sale mal, la respuesta no es una ventana roja con una cruz: es una línea de texto, a veces en una sola palabra, que hay que saber leer para entender qué pasó.
El dato interesante es que la propia guía de FastAPI, más adelante, tropieza con esto de frente: en algún punto advierte "nunca uses sudo pip install" sin explicar qué hace sudo, por qué alguien tendría la tentación de usarlo, ni qué relación tiene con el mensaje de error que lo provocó. No es un descuido de esa guía. Es la frontera exacta que le corresponde a esta: sudo, los permisos y el mensaje Permission denied que lo motiva se explican a fondo en el módulo 4.
Resultado interpretado: ninguna de las dos guías está mal escrita. Están escritas —correctamente— para un lector que ya tiene el piso que esta guía construye desde cero. Si hoy leíste esas dos líneas y te generaron alguna de las cuatro dudas de arriba, no es que te falte inteligencia para programar: te falta exactamente lo que enseñan los cinco módulos que siguen, y vas a tenerlo resuelto bastante antes de llegar al final.
El mapa de esta guía: cinco módulos, tres fases
La promesa completa es esta: al cerrar el módulo 5 vas a poder moverte, inspeccionar, componer, diagnosticar y automatizar cualquier máquina —la tuya o una remota a la que te conectes por SSH— desde la línea de comandos, sin depender de una interfaz gráfica ni copiar instrucciones que no entiendes. Se construye en tres fases, cada una apoyada en la anterior:
| Fase | Módulos | Qué vas a poder hacer al cerrarla |
|---|---|---|
| 1 — Orientarte: la máquina bajo tus dedos | 1. La terminal y el sistema de archivos 2. Trabajar con archivos y texto | Abrir una terminal en tu sistema operativo, saber siempre en qué directorio estás, crear y borrar con un criterio de seguridad explícito, leer archivos de cualquier tamaño y encontrar cualquier archivo o línea de texto en tu máquina. |
| 2 — Componer y controlar | 3. Tuberías, redirección y composición 4. Permisos, procesos y entorno | Conectar la salida de un comando con la entrada de otro para responder en segundos preguntas que a mano tardarían media hora; y diagnosticar —no adivinar— los tres errores que más tiempo le cuestan a cualquier desarrollador junior: Permission denied, command not found y un puerto ocupado. |
| 3 — Salir de tu máquina y automatizar | 5. Máquinas remotas, redes y scripting | Diagnosticar un problema de red por capas, conectarte por SSH con autenticación por llave, mover archivos entre máquinas y escribir tus propios scripts de shell, con criterio para saber cuándo un script ya creció demasiado y toca escribirlo en otro lenguaje. |
Cada módulo cierra con un proyecto que se defiende, no que se muestra en una captura de pantalla: la búsqueda del tesoro del módulo 1, la auditoría de un proyecto desconocido en el módulo 2, la tubería de análisis de logs del módulo 3, la clínica de un entorno roto en el módulo 4, y un kit de diagnóstico remoto propio que cierra la guía completa en el módulo 5.
Qué no vas a aprender aquí (y dónde sí)
Esta guía tiene un límite claro, y decirlo ahora te ahorra buscar por tu cuenta algo que nunca íbamos a enseñar. Cada fila de esta tabla es una guía completa del catálogo que sí lo cubre:
| Queda fuera de esta guía | Se cubre en |
|---|---|
| Control de versiones: git, commits, ramas, GitHub, pull requests | git-github-guide |
Contenedores: Docker, imágenes, volúmenes, docker compose | docker-essentials-guide |
| Nube: cuentas AWS/GCP, IAM, EC2, S3, Terraform y facturación | deployment-cloud-infrastructure-guide |
| CI/CD: pipelines, runners, integración continua | cicd-python-backend-guide y claude-code-cicd-guide |
Administrar un servidor en producción: systemd, nginx, certificados TLS, firewalls, monitoreo | deployment-system-design-guide y monitoring-observability-guide |
| Programación general: Python, estructuras de datos, APIs | Las guías de Python del catálogo, empezando por python-essentials-guide |
| PowerShell, CMD y scripting nativo de Windows | No se cubre; en Windows esta guía trabaja sobre WSL2 con Ubuntu, con sus razones explicadas en la próxima lección |
Dominar vim como editor de trabajo diario | Solo supervivencia (entrar, guardar, salir) en el módulo 2, porque vim aparece sí o sí en servidores |
Si en algún punto de esta guía sientes curiosidad por uno de estos temas, ahí tienes el nombre exacto de dónde seguir. No hace falta que lo hagas ahora: cada uno de esos temas asume, a su vez, que ya sabes moverte en una terminal —el mismo problema que resolvemos aquí primero.
El compromiso: partimos de cero
Ni siquiera se asume que sabes abrir una terminal. Si nunca la tocaste, estás exactamente en el lugar correcto: la próxima lección distingue con precisión qué es una terminal, qué es una shell, qué es el prompt y qué es una consola —cuatro palabras que se usan como sinónimos y no lo son—, y la lección después de esa te muestra, paso a paso, cómo abrirla en macOS, en Linux y en Windows con WSL2. No hace falta ninguna cuenta en la nube, ninguna tarjeta de crédito ni ningún conocimiento previo de programación: solo una computadora con alguno de esos tres sistemas operativos, permisos de administrador sobre tu propio equipo, y conexión a internet.
Errores comunes
Creer que la terminal es "para programadores avanzados" y que hay que saber programar antes de tocarla (conceptual). Qué pasa: alguien pospone abrir la terminal, o se congela apenas un tutorial dice "ejecuta esto en tu terminal", incluso cuando el resto del contenido está perfectamente a su nivel. Por qué ocurre: confunde dos cosas distintas —escribir código, que es diseñar la lógica de un programa, y escribir un comando, que es darle una instrucción puntual a un programa que ya existe—. Son habilidades relacionadas, pero no son la misma, y la segunda no requiere la primera. Cómo detectarlo: si evitas seguir una instrucción con un comando adentro aunque entiendas perfectamente el resto del párrafo que la rodea. Cómo corregirlo: recuerda el compromiso de arriba —esta guía parte de cero— y confía en que el primer comando real que vas a escribir llega recién en la lección 4 de este módulo, después de tener el modelo mental completo.
Pensar que "ya sé usar la terminal" porque memorizaste tres o cuatro comandos copiados de internet (conceptual). Qué pasa: alguien se salta módulos completos de esta guía asumiendo que ya domina el terreno, y se atasca justo cuando aparece algo levemente distinto de lo memorizado: una bandera que nunca vio, un mensaje de error nuevo, una carpeta con un nombre raro. Por qué ocurre: memorizar cd y ls sin el modelo mental de fondo —el árbol de archivos, la anatomía de un comando— genera una sensación de dominio que se rompe apenas la situación cambia un poco, porque no hay nada de dónde generalizar. Cómo detectarlo: si no puedes explicar en una frase qué hace cada parte de un comando que usas todos los días, o si un mensaje de error que nunca viste te deja completamente sin ideas de qué probar. Cómo corregirlo: usa el proyecto del módulo 1 (lección 8) como prueba real y honesta: si lo resuelves sin buscar nada en internet, confirmaste lo que ya sabías; si te atascas, encontraste exactamente el hueco que este módulo llena.
Copiar y pegar un comando de un foro o de un modelo de lenguaje sin leerlo primero, sobre todo si lleva sudo, rm o > (práctico). Qué pasa: alguien ejecuta algo destructivo sin saberlo, porque el texto del comando se veía inofensivo. Por qué ocurre: nada en la apariencia de un comando distingue uno que solo lee información de uno que borra datos sin pedir confirmación; la diferencia está en el significado de cada palabra, no en su forma. Cómo detectarlo: si vas a presionar Enter sobre un comando y no puedes explicar qué hace cada una de sus partes. Cómo corregirlo: la lección 5 de este módulo, Leer el manual: man, --help y tldr, te da el hábito exacto para esto —incluso cuando el comando te lo sugirió un modelo de lenguaje, algo legítimo y útil, pero que no reemplaza leerlo primero—.
Ejercicios
Ejercicio 1 — Ubica el módulo correcto
Para cada tarea, decide a cuál de los cinco módulos de esta guía pertenece, usando solo el mapa que viste arriba:
- Necesitas conectarte a un servidor de otra ciudad para revisar un archivo de log y traerte una copia a tu máquina.
- Un script tuyo falla con
Permission deniedy no sabes por qué, si ayer funcionaba. - Tienes un archivo de texto de 40,000 líneas y necesitas contar cuántas veces aparece cada código de error, sin abrirlo en un editor.
Ver solución
- Módulo 5 (Máquinas remotas, redes y scripting): conectarse a otra máquina con SSH y mover archivos con
rsynces exactamente su capacidad de salida. - Módulo 4 (Permisos, procesos y entorno):
Permission deniedes uno de los tres síntomas que ese módulo entrena a diagnosticar en lugar de adivinar. - Módulo 3 (Tuberías, redirección y composición): contar ocurrencias sobre un archivo enorme sin abrirlo es el tipo exacto de pregunta que se resuelve conectando varios comandos en una tubería.
Por qué funciona: cada módulo de esta guía tiene una capacidad de salida declarada y distinta de las demás; basta con identificar qué pregunta responde cada tarea —¿es de red y máquinas remotas?, ¿es de permisos y procesos?, ¿es de conectar comandos?— para ubicarla sin ambigüedad.
Ejercicio 2 — ¿Esta guía o el catálogo?
Decide, usando solo la tabla de fronteras de esta lección, si cada necesidad se resuelve dentro de esta guía o en otra guía del catálogo, y nombra cuál:
- Quieres entender por qué tu compañero de equipo puede deshacer un cambio de código con un comando de git.
- Quieres entender por qué un contenedor Docker no arranca.
- Quieres saber por qué tu script no encuentra un comando que sí está instalado.
Ver solución
- Otra guía:
git-github-guide. Deshacer cambios con git es control de versiones, explícitamente fuera del alcance de esta guía. - Otra guía:
docker-essentials-guide. Por qué un contenedor no arranca es un tema de Docker, no de la terminal en sí —aunque uses la terminal para investigarlo—. - Esta guía: módulo 4, la lección sobre variables de entorno y el
PATH. Que un comando "esté instalado" pero el shell no lo encuentre es exactamente el problema delPATH, y es territorio de esta guía.
Por qué funciona: la pregunta correcta no es "¿usé la terminal para esto?" sino "¿de qué trata realmente el problema?". Git y Docker usan la terminal como interfaz, pero el conocimiento que resuelve cada problema es de esas herramientas, no de la terminal misma.
Ejercicio 3 — Reconoce el prerequisito silencioso
Esta línea es real, tomada de la misma guía de Docker que citamos en el ejemplo trabajado, un poco más adelante en esa misma lección:
docker run -it ubuntu bash
Sin buscar qué hace docker ni ubuntu —eso es Docker, no esta guía—, aplica la idea de esta lección: ¿qué tendrías que saber sobre la terminal misma, no sobre Docker, para siquiera intentar escribir esta línea con confianza?
Ver solución
Al menos tres cosas, todas ajenas a Docker: qué programa abrir para poder escribir esto (una terminal, con la shell corriendo adentro), que hace falta presionar una tecla concreta para que la máquina la procese en lugar de solo mostrarla como texto, y que -it es un ejemplo de lo que la lección 4 de este módulo llama "anatomía de un comando" —opciones que modifican cómo se comporta docker run, y que se leen igual sin importar qué comando las lleve—. Ninguna de esas tres cosas la explica la guía de Docker, porque no es su trabajo: es el de esta guía.
Por qué funciona: el mismo ejercicio que hicimos con dos comandos en el ejemplo trabajado se puede repetir con cualquier instrucción de cualquier guía técnica que empiece con un comando. Es la habilidad transferible que esta lección quiere dejarte: separar "qué hace esta herramienta específica" de "qué necesito saber de la terminal para siquiera intentarlo", que es exactamente lo segundo lo que enseña esta guía.
Resumen y siguiente paso
Viste que instrucciones como pip install fastapi o docker run hello-world no están mal escritas: asumen, correctamente para la mayoría de sus lectores, un piso de literacia de terminal que casi nunca se enseña en ningún lado, de la misma forma en que un libro de recetas asume que sabes encender la estufa. Tienes el mapa completo de las tres fases y los cinco módulos que vas a construir, la lista honesta de lo que queda fuera de esta guía con el nombre exacto de dónde sí se cubre, y el compromiso explícito de que partimos de cero, sin asumir ni siquiera que sabes abrir una terminal.
Antes de avanzar deberías poder:
- Explicar con tus propias palabras, usando la analogía de la receta, por qué una instrucción con un comando adentro no está mal escrita cuando no te dice cómo abrir la terminal.
- Nombrar las tres fases de esta guía y qué vas a poder hacer al cerrar cada una, sin mirar la tabla.
- Decir, frente a un tema nuevo que se te ocurra (por ejemplo, "quiero aprender a subir mi código a GitHub"), si pertenece a esta guía o a otra, y a cuál.
Lo que sigue no es todavía un comando. Es la distinción precisa entre cuatro palabras que usaste toda tu vida como si fueran sinónimas —terminal, shell, prompt y consola— y el criterio honesto de cuándo la terminal realmente gana frente a una interfaz gráfica, y cuándo no.
Recursos
- Installing Packages — Python Packaging User Guide — la documentación oficial de
pip install, el comando exacto que citamos en el ejemplo trabajado y que asumes poder ejecutar antes de siquiera abrir esta página. - Docker overview — la documentación oficial de Docker que introduce
docker runy sus variantes; confirma con tus propios ojos que ninguna línea ahí explica qué es una terminal. - GNU Bash Reference Manual — el manual oficial de la shell que casi con certeza vas a terminar usando; no hace falta que lo leas todavía, pero es la referencia a la que esta guía va a apuntar una y otra vez.
- POSIX.1-2024 — Shell & Utilities — el estándar que define qué comportamiento comparten todas las shells compatibles, la razón por la que lo que aprendes aquí funciona igual en casi cualquier máquina Unix a la que te conectes.