Cuando hablamos de programación es casi inevitable tener que hacer uso de comandos ya sea en el CMD de Windows o en la Terminal de los sistemas Unix como Mac o Linux, estos últimos siendo los más populares y esto es porque Linux domina los servidores donde nuestras aplicaciones son desplegadas a lo largo y ancho del mundo.

Los servidores que almacenan y corren nuestras aplicaciones en el mundo contienen normalmente alguna distribución de Linux pero sin interfaz gráfica, es por ello que es necesario que cuando queremos depurar nuestra aplicación es necesario conocer algunos comandos bastante útiles, a continuación les mostraré algunos de los que más comúnmente utilizo en mi día a día, comencemos.

Listar directorios

ls

El comando ls nos sirve para listar el contenido de una carpeta, al ser un comando puede recibir varios argumentos, la estructura completa del comando ls es la siguiente.

ls [OPTIONS] [FILES]

Con este comando también podemos listar las propiedades de los archivos y carpetas dentro de un directorio con el parámetro -l el cuál desplegará información sobre:

  • Tipo (si es carpeta iniciara con la letra d de directory en caso contrario un -)
  • Permisos
  • Dueño y grupo del archivo o carpeta
  • Tamaño del archivo
  • Fecha
  • Nombre

Ahora bien vamos a ver algunas de las cosas que podemos hacer, por ejemplo listar en formato human readable

ls -lh 

El parámetro l indica que queremos ver los resultados en formato lista, la h indica que queremos en formato human readable, ahora bien veamos como podemos listar un directorio en formato human readable y que además nos incluya los archivos ocultos de la carpeta

ls -lha random-password

Cómo podemos observar al agregar el parámetro a de all nos muestra todo el contenido de la carpeta, esto incluyes los archivos ocultos y también le estamos enviando al final cual es la carpeta de la que queremos listar el contenido en este caso random-password

Saber en que directorio te encuentras

Has ejecutado un montón de comandos y de repente ya no sabes donde te encuentras, o simplemente quieres ver el path completo de tu ubicación porque la necesitas para ejecutar otro comando, simplemente basta con utilizar el comando

pwd

El resultado será que te devolverá la ruta absoluta del directorio en el que te encuentras.

Entrar o moverse a un directorio

Esta es una de las operaciones básicas que más se utilizan

cd [RUTA_DEL_DIRECTORIO]

Para regresar al directorio del usuario basta con ejecutar el comando sin argumentos

cd 

Si queremos ir un directorio abajo

cd ..

Si queremos movernos a un directorio que se encuentra uno o varios niveles abajo

cd ../level1

Saber el ID de algún proceso en ejecución

Hay ocasiones en que necesitamos encontrar el ID de un proceso por alguna razón, monitorearlo o quizá eliminarlo o incluso simplemente saber que realmente se está ejecutando, para esto es bastante útil el siguiente comando

ps aux | grep <NOMBRE-PROCESO-PARCIAL>

En este caso estoy buscando la ejecución de un proceso java, la información que nos muestra es una lista de los procesos y quién fue el que lo ejecutó, enseguida nos muestra el PID (process ID) también nos muestra desde donde ha sido invocado y con que parámetros que es todo lo que podemos ver después de la hora de ejecución.

En este caso vemos 2 procesos, uno como tal es una consola de Groovy que utiliza Java por y su PID es 3906 el cual se muestra en la imagen remarcado, el segundo es el PID 3925 este es el comando que acabamos de ejecutar.

Terminar la ejecución de un proceso

Utilizando el comando anterior podemos ahora ejecutar un comando para terminar con la ejecución de uno o varios procesos.

kill [PIDs separados por espacios]

En este caso estoy utilizando el mismo proceso del ejemplo anterior, el comando kill tratará de terminar el proceso de una forma correcta y dandole la instrucción al mismo de que es tiempo de terminar la ejecución, pero los procesos a veces pueden ser rebeldes y estar causando un error en la matrix confabulando para comerse todos los recursos de nuestra maquina, para esto podemos usar el método Chuck Nurris y matar el proceso con una patada voladora de la siguiente manera.

kill -9 [PID separados por espacios]

En este caso el parámetro -9 representa que queremos forzar la terminación del proceso sin esperar a que este lo haga de forma correcta, es decir lo terminamos de manera abrupta.

Crear un directorio

Este comando es bastante útil para crear directorios es bastante simple

mkdir [OPTIONS] [NAME]

También podemos crear un directorio con subdirectorios utilizando el parámetro -pv en este caso el resultado será el siguiente.

mkdir -pv level1/level2

Nota: el comando tree no es un comando como tal de Unix si no una herramienta que tengo instalada en mi terminal.

Crear archivos

No hay mucho que decir, es tan simple como tocar un archivo y darle un nombre de la siguiente forma.

touch [NOMBRE_DEL_ARCHIVO]

También podemos escribir en un archivo con el comando echo de la siguiente manera.

echo "Este es un ejemplo" >> README.md
tail README.md

Eliminar archivos o directorios

Durante la elaboración de este post accidentalmente borré el contenido de una carpeta donde tenía mis proyectos experimentales, siempre es importante que se aseguren de que lo que van a borrar sea realmente lo que quieren, sobre todo si se trata de una carpeta entera, aprendan de mis errores.

rm [OPTIONS] [Directorios o archivos separados por espacios]

Explicare primero las opciones de este comando:

  • Sin opciones, para borrar algún archivo
  • -f para forzar la eliminación de un archivo
  • -r cuando se quiere eliminar una carpeta y su contenido
Borrar archivo
Borrar carpeta recursivamente
Borrar carpeta recursivamente y forzado

Nota: Es super importante que sepas que cuando borras algo con el comando rm este contenido no puede recuperarse a menos claro que tengas alguna herramienta que busque entre los residuos que puedan quedar en el disco duro, lo cual veo poco probable y práctico, así que todos los comando de eliminación deben de ejecutarse con extrema precaución.

Mover archivos o carpetas

Hay ocasiones en las que queremos mover un archivo o carpeta o incluso renombrarlos, para esto podemos utilizar el comando mv este comando es bastante simple.

mv [ORIGEN] [DESTINO]

Veamos el siguiente ejemplo donde movemos un archivo en la siguiente estructura de archivos.

shell
├── folder1
│   └── README.md
└── folder2

Lo que queremos es mover el archivo README.md del folder1 al folder2

mv folder1/README.md folder2

Ahora bien vamos a renombrar el directorio folder1 a level1

mv folder1 level1

Observar el contenido de un archivo mientras se agrega contenido en tiempo real

Este comando en particular es uno de los que más utilizo en mi día a día, sirve para poder observar por ejemplo los logs de una aplicación a medida que se van generando.

Este comando nos mostrará la cola de los archivos, es decir, lo último que se ha escrito en el, primero describamos el comando y veamos algunos ejemplos

tail [OPTIONS] [NOMBRE_DEL_ARCHIVO]

Dentro de las opciones podemos decir cuantas lineas queremos ver por ejemplo

tail -10 out.log

Ahora veamos como podemos ir viendo en tiempo real cuando se agrega contenido a este archivo, para eso utilizaremos el parámetro -f de follow de la siguiente forma

tail -0f out.log

Aquí estoy utilizando el 0 junto con la f por que no quiero ver nada de lo que ya esta generado si lo que se va a generar entonces no quiero ver ninguna linea anterior.

Lo que estoy haciendo en este ejemplo es simular como es que otro proceso escribe un un archivo y yo estoy monitoreando la actividad en dicho archivo con el comando tail.

Es todo por el día de hoy, espero que les sea de utilidad y recuerda en unirte a la comunidad de devz puedes unirte al slack con dando click aquí, recuerda que también tengo un canal de YouTube donde hablo de cosas de tecnología y actualmente estoy creando un curso de Groovy desde cero, te invito a que me sigas.