Introducción a la Terminal – Parte 1

Tabla de Contenidos

Hola a todos y sean bienvenidos a esta serie de módulos que tratarán de explicar un poco de la terminal y la línea de comandos. Estos próximos escritos son parte de las anotaciones que he recopilado a lo largo de mis estudios. He podido compactar mis apuntes junto a los cursos más recientes que he llevado acerca de este tema. Espero esto les ayude bastante.

Estos módulos constan de 12 partes y una extra como práctica. Pueden abrir y guardar los links de los demás módulos para que puedan seguir aprendiendo y llegar hasta el final.

Qué es la Terminal?

Podemos decir que una terminal es una interfaz de texto que permite a cualquier persona comunicarse de forma directa con cualquier sistema operativo mediante comandos escritos. Cuando hablamos de la terminal y su relación con los sistemas operativos estamos diciendo que tanto Windows como Mac tienen una terminal, incluyendo obviamente al gran Linux y sus distribuciones, como el famoso Ubuntu

Terminal usando WSL. Simula la terminal de Linux en Windows 11
Terminal usando PowerShell de WIndows. Podemos decir que es la terminal nativa de Windows

Historia de la Terminal

Siempre he dicho que un verdadero profesional no solo sabe de las cosas técnicas, sino de las cosas históricas. Por eso veo importante contar al menos un poquito de la historia resumida de la terminal.

En antaño, todos los computadores funcionabas de esta manera, por terminales, pero no como las conocemos hoy en día. Los programadores o personas que usaban un computador no podían arrastrar, dar click, ver videos, imágenes o cualquier otro contenido que se no se limitara a texto puro.

Las personas se conectaban a un tipo de mainframe o computadora principal que era la que podía ejecutar estos comandos. Todo era por teminales físicas, que al día de hoy las emulamos como parte de un programa ya nativo de nuestro sistema operativo.

Es increíble. Piensa que todo un mastodonte de terminal ahora lo podemos digitalizar y tenerlo incluso al alcance de nuestras manos en nuestros teléfonos.

…y en el principio fue el Mainframe…

Cobol 3:16
The Harvard Mark I – Primer Mainframe creado por IBM situado en la Universidad de Harvard

Todo evoluciona y ahora estos comandos los hacemos de manera virtual, sin tarjetas perforadas. Todos estos sistemas se emulan y dan paso a las terminales que hoy en día conocemos, por ejemplo:

  • En Windows usamos la PowerShell o el cmd.exe
  • En Mac utilizamos la terminal nativa de Apple o la iTerm2
  • En Linux tenemos el GNOME, Konsole o xterm

Terminal, Consola, Shell y Línea de Comandos

A lo largo de nuestro camino como programadores nos vamos a encontrar con estos términos que si nos ponemos quisquillosos pueden significar cosas distintas. Aquí una explicación breve.

  • Terminal: Programa para escribir comandos, por ejemplo iTerm2 o PowerShell
  • Consola: Es una manera demasiado vieja de referirse a una terminal física o virtual. Usualmente la consola era una una pantalla con teclado que se conectaba a un computador central
  • Shell: Es un intérprete de lenguajes que está entre nosotros y el computador. Funciona similar a como cuando vamos a un país extranjero y no conocemos el lenguaje y nos debemos a un traductor para entender algún recorrido
  • Línea de comandos: Es un modo de interacción en donde escribimos los comandos

Si te confundiste no te preocupes, podemos resumirlo en que la Terminal la usamos para que nuestras Líneas de Comandos las interprete una Shell que va a funcionar de traductor entre nosotros y el computador

Interacción de la Terminal con el Sistema Operativo

Usuario → Shell → Kernel

Con esto podemos decir que nosotros, al escribir nuestros comandos, se los mandamos a la Shell y luego la Shell se lo pasa al Kernel. El Kernel es el intérprete nativo de cualquier sistema operativo, así como la Shell. Luego de esto el resultado se devuelve:

Kernel→ Shell → Usuario

Si escribimos algun comando en la terminal, por ejemplo ls, el Shell lo va a interpretar y le va a decir al Kernel (el traductor nativo de el sistema operativo) que ejecute la tarea que le pedimos, en este caso nos va a mostrar el listado de archivos de la carpeta en la que estamos.

Por qué debemos usar la Terminal?

Es bien sabido que por lo menos los que nacimos en los noventas o un poquito más atrás nos acostumbramos a tener computadores con interfaces gráficas y puede ser que nada nos va a hacer usar la temrinal para reemplazar el click, arrastre o ver las carpetas colocadas de manera alfabética con sus iconos respectivos, pero, si te digo que la terminal tiene bastantes ventajas que te puede convertir en un mago de los sistemas?

  • Aprendizaje profundo: Usando la terminal nos adentramos a un mundo más complejo, es verdad, pero entendemos mejor cómo funcionan las computadoras u otro dispositivo que sea ejecutado por medio de una terminal. Es tener el cold state del hardware en la palma de nuestras manos
  • Control absoluto: Con esto tenemos un puntazo en ventaja, ya que podemos acceder a opciones que lastimosamente la interface gráfica no nos va a mostrar
  • Uso Remoto: Podemos administrar servidores a puro texto, sin entorno gráfico
  • Automatización: Las tareas repetitivas no van a ser un problema, ya que podemos crear scripts que nos ayuden a ejecutar tareas monótonas.
  • Rapidez: Es simple, muchas acciones pueden ejecutarse en tan solo minutos

Mientras más nos adentremos en los módulos, o incluso cuando los terminemos vamos a repasar estos puntos anteriores, para que tengan un significado con mucho más entendimiento.

Estructura de un comando

Todo comando en la terminal sigue una estructura base que es la que le permite a la Shell saber cómo ejecutar el comando que escribamos, la forma más común que tenemos de ejecutar un comando es:

comando [opciones] [argumentos]

Comando: Ejecutamos comandos tipo echo, ls, cd. Algunos de ellos podemos ejecutarlos solos como ls

Opciones: Estas modifican el resultado del comando. Por ejemplo, si usamos ls nos va a dar la lista de archivos o carpetas de la ruta actual, pero si ponemos ls -a nos permite ver los archivos ocultos. Muchas de estas las llamamos flags

Argumentos: Carpetas o archivos a los que queremos afectar con el comando, por ejemplo, echo "Hola Mundo" > prueba.txt. Aca el archivo al que queremos afectar es a prueba.txt. Lo van a ver más adelante, pero este comando hace un archivo de texto con la frase que haya dentro de las comillas.

Hay variaciones que hacen de los comandos un tipo de bases a las que le podemos agregar extensiones variadas:

  • Acortadas: En vez de poner ls -l -a podemos poner ls -la
  • Valores: Como el ejemplo anterior, echo "Hola Mundo" > prueba.txt, hay un valor que se debe agregar al archivo .txt

Algo aún más básico que una estructura es el valor de entrada y de salida. En la terminal los identificamos de la siguiente manera:

  • STDOUT: Standard Output o Salida Estandar. Es la respuesta común de la terminal
  • STDIN: Standard Input o Entrada Estandar. Es el comando que le escribimos a la terminal o algun dato que agarre en algún proceso
  • STDERR: Standard Error o Error Estandar. Es cualquier error que pueda presentar la terminal.

Tipos de comandos en la Terminal

Varias cosas van a variar dependiendo de la Shell que estemos usando, pero las definiciones se mantienen:

  • Palabras reservadas: if, then, else, while...
  • Builtins: Comandos que ya vienen integrados en la Shell que estemos usando. Estos pueden varias dependiendo el intérprete que estemos usando
  • Funciones: mi_funcion () { echo "hola"; }
  • Alias: Son atajos definidos previamente por el usuario, por ejemplo alias lm = 'ls -la'
  • Scripts: Son archivos o códigos ejecutables dentro de la terminal

Identifica los comandos

Para identificar si nuestro comando es una palabra reservada (keyword), builtin o un alias podemos usar el comando type seguido del comando que queremos averiguar

type ls

Descubrimos que el comando ls es un alias, el comando cd es un builtin y el if es un keyword

Para descubrir la ruta de nuestro comando podemos usar which. Puede variar entre Shells

which [comando]

Ruta del comando ls

Podemos adentrarnos en un tipo de documentación rápida o explicación de uso de comandos rápida interna. Tan solo poniendo el comando help podemos acceder a mucho aprendizaje y uso de cada comando

help [comando]

Si queremos acceder a la documentación completa y súper detalladad e cada comando o elemento en general de la terminal apodemos usar el comando man (que proviene de manual).

Cuando nos adentremos al manual de cualquier comando, este nos va a mandar a una parte de la terminal en lña que no vamos a poder volver a escribir. Vamos a entrar en un modo “Read Only”. Para salir de este modo simplemente presionamos la tecla Q.

man [comando]