La terminal es una herramienta que puede hacer la diferencia a la hora de desarollar. Conocer los comandos básicos traen tres ventajas principales.

  1. Entender un poco cómo funciona la interfaz del sistema operativo.
  2. Realizar tareas con más velocidad y practicidad sin abandonar el teclado.
  3. Moverse con fluidez en un servidor web cuando sea necesario conectarse por SSH.

No es un requisito para empezar a programar, pero tarde que temprano nos vamos a tener que enfrentar a ella. Entonces, ¿Porque no hacerlo de una vez?

Sobre los diferentes sistemas operativos

Los comandos de la terminal  varian un poco en sistemas que no son tipo UNIX (Linux, Mac OS) como Windows. La mayoría de los servidores Web usan Linux, por lo que mi recomendación es familiarizarse con UNIX, por lo que lo mejor es activar la funcionalidad de Ubuntu (Linux) en Windows 10: https://tutorials.ubuntu.com/tutorial/tutorial-ubuntu-on-windows

¿Como abrir la terminal?

  • Windows: Click en menu inicio y buscar por "Ubuntu".
  • Ubuntu: Ctrl + Alt + T
  • Mac OS:  Cmd + Tecla espaciadora y buscar por "Terminal"
Terminal en Mac OS, usando Pure un ZSH prompt.

¿Cómo funciona la terminal?

Así como las ventanas, menus, carpetas, etc son una interfaz gráfica del sistema operativo, la terminal es una interfaz de comandos. Es decir, en ella podemos interactuar con el sistema operativo mediante comandos. Esto significa, que mediante la terminal podemos listar carpetas, crear archivos, buscar palabras, ver de cuánta memoria libre disponemos, etc.

Se podría decir, que todo lo que hacemos en el sistema operativo mediante la interfaz gráfica se puede hacer en la terminal. Con la ventaja de que haciendo uso avanzado de esta tenemos más posibilidades.

Ubicación en la terminal

Lo primero que hay que entender es que cuándo abrimos la terminal suele ubicarse en nuestra carpeta de archivos de usuario. En sistemas tipo UNIX la ruta es /Users/<usuario> y en esta ubicación tenemos nuestra carpeta de documentos, descargas, escritorio, etc. Esto quiere decir que si queremos interactuar con los archivos que están dentro de la carpeta descargas, tenemos que navegar hasta allá o al menos indicar la ruta de su ubicación, y así mismo para cualquier otro archivo o carpeta.

Comandos en la terminal

A continuación vamos a explorar una serie de comandos básicos que podemos usar en nuestra terminal.

Básicos del sistema

  • date: Muestra la fecha y hora del sistema actual.
  • uptime: Muestra el tiempo transcurrido desde que inicio la ultima vez el equipo.
  • cal: Muestra un calendario del mes actual.
  • df: Muestra el espacio libre actual en el disco duro.
  • whoami: Muestra el nombre del usuario actual.

Manejo de carpetas

  • ls: Lista los archivos de la carpeta actual, o de la ruta dada. Ej. ls Documents.
  • cd: Nos permite navegar entre carpetas cuando le entregamos una ruta y así actualizar nuestra ubicación. Ej. cd Documents nos ubicaría en /Users/<usuario>/Documents sí hacemos ls veríamos el resultado del ejemplo anterior. Sin embargo, si hacemos uso de solo cd sin ruta, nos ubica en la carpeta de archivos del usuario.
  • pwd: Nos nuestra la ruta absoluta del directorio actual, así podemos saber en dónde estamos ubicados. Si nos hemos ubicado como en el ejemplo anterior esto nos devolvería  el resultado /Users/<usuario>/Documents.
  • mkdir: Crea una nueva carpeta dado un nombre para esta carpeta. Ej. mkdir hola crearía una carpeta llamada hola en la ubicación en la que estemos.
  • cp -r: Nos permite copiar una carpeta dada una ruta inicial y una ruta final. La opción -r significa que hará el proceso de manera recursiva, esto es porque al copiar una carpeta es necesario aplicar todos los archivos que están adentro. Ej. cp -r hola alo.
  • rm -r: Nos permite eliminar una carpeta dada una ruta. La opción -r significa que hará el proceso de manera recursiva, esto es porque al eliminar una carpeta es necesario aplicar todos los archivos que están adentro. Ej. rm -r hola.

Manejo de archivos

  • touch: Crea un archivo nuevo dado una ruta y/o nombre. Ej. touch chao crearía un archivo llamado "chao". Luego podríamos abrir este archivo con cualquier editor y agregar contenido. Sin embargo podemos usar un pequeño truco para agregar contenido rápido haciendo echo 'hola mundo' > chao que remplazaría el contenido del archivo "chao" con "hola mundo".
  • cat: Imprime el contenido de un archivo dada su ruta. Ej. cat chao imprimiría hola mundo en nuestra terminal, en el caso de que hubiéramos seguido el ejemplo anterior.
  • more: Es muy similar a cat solo que nos permite navegar usando los controles tipo vim cuando imprime su contenido.
  • cp: Es el comando que nos permite copiar archivos dada una ruta inicial y una ruta final donde vamos a copiar. Ej. cp chao adios hará una copia del archivo "chao" y esta copia la llamará "adios".
  • rm: Nos permite eliminar un archivo dada una ruta. Ej. rm chao.
  • mv: Nos permite mover un archivo o carpeta dada una ruta inicial y una ruta final. Ej. mv adios /Users/<usuario>/Downloads esto movería la carpeta de la ubicación actual a la carpeta "Downloads". mv también es el comando que nos permite cambiar el nombre de un archivo o carpeta, lo que hay que hacer es moverlo a la misma ubicación pero darle un nombre diferente. Ej. mv adios bye.

Sobre las rutas relativas y absolutas

Las rutas se pueden especificar de manera relativa o absoluta. Cuando especificamos una ruta absoluta, quiere decir que vamos a introducir toda la ruta desde el inicio, es de decir desde la raíz que se especifica con el simbolo de barra oblicua (slash) /. Cuando usamos el comando pwd siempre nos devuelve la ruta absoluta. Ej. /Users/<usuario>. Si estamos ubicados en nuestra carpeta de archivos y queremos movernos a la carpeta de documentos podemos especificar la ruta absoluta  /Users/<usuario>/Documents o podemos especificar la ruta relativa a nuestra ruta actual Documents. Ahora bien, para poder especificar de manera relativa que queremos subir un nivel, es decir estamos en Documents y queremos subir a /Users/<usuario> lo podemos hacer con el doble punto. Ej. cd ../. Así mismo, si queremos especificar la ubicación actual para movernos podemos usar solo un punto. Ej. cd ./Documents.

Atajos en los comandos

  • Ctrl + c: Muchas veces un comando puede quedarse procesando algo. Si queremos cancelar el comando actual o la terminal no responde podemos hacer uso de este comando para detener el comando actual.
  • Ctrl + u: Nos permite borrar la linea actual que estemos escribiendo en la terminal.
  • Ctrl + w: Nos permite eliminar la ultima palabra de los comandos que estamos escribiendo en el momento.
  • Ctrl + a: Nos permite movernos al inicio de la linea de comandos.
  • Ctrl + e: Nos permite movernos al final de la linea de comandos.
  • Flecha arriba:  Nos muestra el comando anterior de nuestro historial de comandos usados.
  • Flecha abajo: Nos muestra el comando siguiente de nuestro historial de comandos usados.
  • Alt + b: Nos permite movernos entre las palabras de la linea de comandos actuales hacia atrás.
  • Alt + f: Nos permite movernos entre las palabras de la linea de comandos actuales hacia adelante.
  • Ctrl  + r:  Nos permite hacer una búsqueda de comandos en el historial. Si encontramos un resultado que no es el deseado, podemos seguir presionando Ctrl + r para ir rotando la búsqueda.

Diferentes terminales y shells

La terminal es solo la interfaz gráfica que nos muestra los mensajes del shell. El shell es la interfaz de linea de comandos que se comunica con el sistema operativo.

En Windows 10 tenemos la Windows Terminal. Ubuntu y Mac OS también traen sus terminales por defecto que funcionan bastante bien. Sin embargo, una buena alternativa para  Windows, Ubuntu y Mac OS es Hyper, una terminal hecha con tecnologías web. Mi recomendación personal para Mac OS es usar iTerm2, ya que al ser una aplicación de escritorio nativa suele tener mejor rendimiento que Hyper.

El shell más popular para sistemas tipo UNIX es Bash (The Bourne Again Bash). En Windows es posible usar Bash, gracias a la instalación de Ubuntu. Esto es lo que hace posible que podamos usar comandos tipo Bash en Windows. Pero, yo recomiendo usar otra alternativa tipo Bash llamada ZSH (Z Shell) e instalar el administrador de configuración llamado Oh My Zsh.

En la ultima versión de Mac OS, "Catalina" la terminal por defecto es ZSH.

Aquí hay un tutorial de cómo instalar ZSH  y Oh My Zsh en Windows 10 incluyendo la instalación de Hyper: https://evdokimovm.github.io/windows/zsh/shell/syntax/highlighting/ohmyzsh/hyper/terminal/2017/02/24/how-to-install-zsh-and-oh-my-zsh-on-windows-10.html

Finalmente, es posible cambiar o agregar nuevos temas a nuestro shell. Oh My Zsh trae varios temas por defecto y permite la instalación de nuevos temas. Mi recomendación personal es instalar Pure porque no permite tener una terminal con apariencia minimalista, pero es importante seguir la sección de tips para tener mejores resultados.