Intro a la Linux CLI – Parte I

Hola Fronters, Gabriel aquí!!! Espero que estén muy bien!!! En este HowTo aprenderemos quince comandos (y uno extra al final), que nos convertirá en verdaderos SysAdmin Linux versátil en la terminal a nivel pro.

Linux hoy por hoy, y desde hace muchos años, ha sido el sistema operativo por excelencia en servidores. Quizás y sin temor a equivocarme, más del 90% de los servidores existentes en internet son Linux, pero ¿por qué esto?

Te daré cuatro razones fundamentales para argumentar este punto:

  • Altamente configurable: tanto el sistema operativo como sus herramientas
  • Es robusto y estable: siempre y cuando cumpla con el elemento anterior. Un servidor Linux que siempre falla, es un servidor que, en el 90% de los casos, está mal configurado.
  • Escalable y adaptable: la gran mayoría de los casos podremos ver que tanto el propio sistema operativo como las herramientas que puede estar utilizando en él, son sumamente adaptables, inclusive llegando a poder manipular el propio código fuente de los mismos para mejorar, adaptar o corregir aspectos relacionados con la funcionalidad y desempeño de las herramientas.
  • Es sumamente seguro: dado que la comunidad de Linux es tan amplia, cada vez que surge alguna vulnerabilidad notable en el sistema operativo o alguna herramienta, esta es atacada en tiempo récord por esta comunidad, por lo que los errores se corrigen en períodos de tiempo extra cortos.

Aquí el detalle en contra, para muchos, es la terminal, mejor conocida como la interface de línea de comandos o CLI (abreviatura de: command line interface). Pues se dice que es complicada, difícil, etc. Y bueno, si es verdad que la CLI no es para todo el mundo, tampoco es que es algo hiper complejo en sí. Todo depende de la complejidad de las tareas que deseemos realizar.

En esta oportunidad te voy a enseñar diez comandos, con los que te vas a empezar a mover rápidamente por la terminal como un chita. Toma en cuenta que cada comando tiene variaciones, especificidades, las cuales llamamos técnicamente atributos.

Cada atributo nos permite obtener información diferente del mismo comando, bien sea, más específica o más global y genérica; más completa o reducida. Todo es útil y dependiendo del tratamiento que vayamos a darle a esos datos para convertirla en nueva información, será necesario que aprendas al menos que existen esos atributos.

También podremos combinar comandos y así darle forma a la salida de información de dichos comandos. Sólo explicaré algunos aquí. Lo explicaré como si fuese para niños, por lo que si buscan algo más avanzado o al grano, aquí no es. Quiero hacer un HowTo para todos y no frustrarle la experiencia a posibles potenciales usuarios, pues no todos aprendemos igual.

Ahora sí, luego de tomarnos nuestro café respectivo, vamos a abrir la terminal y a aprender, vale!!

Comando pwd (Print Working Directory)

Con este comando sabremos cual es nuestra ubicación en nuestro sistema en ese momento:

Cuando cambiemos de directorio, obviamente cambiará de ruta de ubicación. Para ello utilizaremos el comando cd.

Comando cd (Change Directory)

Este tema es un poco extenso, así que buscaré la forma más simple de explicarlo.

Con el comando cd, lo que haremos justamente es cambiar nuestra ubicación dentro de nuestro sistema. Por ejemplo. Si nos encontramos en el directorio /home/gabrielw y decidimos entrar a otro directorio llamado practica, entonces lo haremos de la siguiente manera:

Y cuando verifiquemos nos daremos cuenta ya estamos en dicha ubicación.

Ahora, es bueno manejar dos tipos de conceptos fundamentales en este tema de manipular o navegar en directorios del sistema: rutas absolutas y rutas relativas… Aquí la cosa puede sonar complicada, pero no lo es realmente como la pintan.

Manejar Rutas relativas y rutas absolutas con cd y otros comandos

Las rutas relativas son aquellas a las que podemos acceder tomando como referencia nuestra ubicación actual dentro del sistema. Y cuando hablo de poder acceder no hago énfasis en la posibilidad o facultad de hacerlo, sino en la modalidad o forma de hacerlo.

Pondré un ejemplo fácil:

Suponiendo que vivo en una urbanización, la que denominaremos urbanizacion, compuesto por varias parcelas y asumiendo que cada una de ellas. Yo vivo en la parcela dos y mi novia vive en la parcela cuatro. Estas parcelas las nombraremos abreviadamente con la letra p (minúscula) + número. Por ejm: p1, p2, p3, …, p10, etc.

Si yo quisiera ir hacia la casa de mi novia (p4); estando yo en mi casa (p2), sólo debo indicar que desde la ruta actual en la cual estoy ubicado, me dirija hacia el piso cuatro:

Ahora, necesito ir de vuelta a mi casa. Para eso lo que debo hacer es devolverme, cierto?. Para devolverme utilizaré dos puntos consecutivos y un slash (no, no el guitarrista, sino el signo de slash o de barra, o división):

Esto sería desplazarse dentro del sistema con rutas relativas, ya que a partir de mi ubicación actual, le estoy indicando al sistema hacia donde deseo ir. Esto implica un buen conocimiento de la estructura de directorios en la cual me estoy desplazando, o sino una verificación constante de esa estructura, tomando en cuenta los pasos que debo dar, desde mi ubicación de origen, hacia mi destino.

Estando en mi casa ya, recibo una llamada de mi madre, que vive en la parcela uno (p1). Necesita que la ayude con unas cosas y por lo tanto debo ir hasta allá.

Para eso hago lo siguiente:

Y llego a casa de mi madre. Esta es una ruta absoluta. Aquí no se tomará en cuenta mi ubicación actual, simplemente será relevante hacia donde quiero desplazarme. Sin más.

Algo importante que decir es que cualquiera de los dos métodos sirven para lo mismo y van a funcionar, sólo cambia su funcionamiento.

Ahora, cual de las dos es mejor o peor?, Depende de tus necesidades y practicidad. Porque si estás en una profundidad de diez directorios y requieres ir a otro directorio en otra ramificación, lo mejor sería utilizar rutas absolutas en vez de movilizarse diez pasos hacia atrás y luego avanzar uno o dos pasos hacia adelante. No tendría sentido. Para este caso sería mejor utilizar rutas absolutas.

Del mismo modo, tampoco tendría sentido utilizar rutas absolutas, si los directorios están contiguos, a uno, dos o incluso tres pasos, bien sea hacia delante o hacia atrás de tu ruta actual. aquí perfectamente podríamos utilizar rutas relativas.

Cuales serían las razones por las cuales puede fallar este comando?

  • Escribimos mal el nombre del directorio.
  • No tenemos permisos de acceso a ese directorio
  • El directorio al que deseamos acceder no está en la ruta especificada.

Para ello necesitaremos verificarlo con el comando ls.

Listar archivos con el Comando ls (listing)

Con el comando ls, podremos listar el contenido de los directorios del sistema. Y aplican los mismos mecanismos o formas de navegación entre directorios mediante rutas absolutas y relativas.

Es muy simple de utilizar y tiene algunos atributos importantes a considerar.

De esta forma podemos utilizar el comando ls y algunos de sus atributos:

Un ejemplo práctico de esto sería, tener que hacer un inventario de que tenemos en nuestra casa, entonces nos vamos a p2 y revisamos nuestra casa para ver que tenemos en ella:

Ahora veremos otro comando sencillo que nos servirá para explorar más cosas y hacerlas más interesantes:

Comandos cat, more y less

Y no, cat no se trata de un gatito, sino de un comando que sirve principalmente para dos cosas:

  • Concatenar archivos existentes en un solo archivo
  • Mostrar contenido de archivos, generalmente planos y de poco contenido, de una sola pasada, es decir: sin paginación. Este es su uso más común.

Volviendo al ejemplo de la casa, podemos ver que tenemos dos archivos, que se llaman ahorros y deudas, respectivamente. Si queremos ver lo que dicen, los examinaremos uno a uno con el comando cat:

Sin embargo, nos dimos cuenta revisando bien que nuestra .cajafuerte guardaba otro archivo oculto, que se llama .recetario, el cual contiene las recetas de la familia:

Es un archivo muy grande, puesto que pesa 9706 bytes y para ser solo texto se considera un archivo con una buena cantidad de líneas. En caso de que lo visualicemos con cat, sólo nos mostrará las últimas líneas que entren en la pantalla, por lo tanto no nos servirá. Para esos casos utilizaremos more y less.

El comando more nos sirve para visualizar un archivo con paginación. Es medianamente versátil, sin embargo una de sus limitaciones es que al paginar, toma la pantalla como un bloque de visualización y luego debemos presionar la tecla SPACE o barra espaciadora para pasar a la siguiente página. En las nuevas revisiones de more, permite ahora visualizar el porcentaje de contenido mostrado y ahora, poder retroceder y avanzar con las teclas direccionales flechas arriba | abajo. Sin duda una función muy esperada

Y se vería así:

Imagen: Visualización archivo con el comando more

También podemos utilizar el comando less, el cual hace relativamente lo mismo, pero a diferencia de more, el desplazamiento se da línea por línea:

Y se vería así:

Imagen: Visualización archivo con el comando less

Para salir de ambos comandos, tanto en el caso de more como el de less, se debe presionar la letra q.

Leyendo textos y buscando coincidencias con grep

El comando grep nos permite buscar en uno o varios textos, coincidencias en cadenas de caracteres y hacer filtrados en la salida de comandos o muestra de archivos. Utilizaremos atributo de recursividad (-r), para que explore todos los archivos en los cuales encuentre la coincidencia y el atributo (-i), para ignorar las mayúsculas y minúsculas (ignore case):

Sus casos de uso pueden ser los siguientes:

Este será el resultado:

Imagen: filtrando resultados con grep

En otro caso de uso, cuando ya especificamos el archivo a procesar, utilizaremos el comando cat y luego utilizaremos una tubería (pipe, en inglés) para procesar la salida del primer comando, con el segundo comando, que en este caso será grep y poder filtrar la salida con la condición dada. Pronto escribiré un artículo sobre tuberías.

La salida sería algo así:

Y esta será la salida:

Imagen: filtrar la salida de un texto o comando con grep

Sin embargo podemos hacer esto también con comandos visualizadores en tiempo real, como el caso de head y tail.

Comandos head y tail

Con head podemos ver las primeras líneas de un archivo y con tail podemos ver las últimas líneas de un archivo. Entre uno y otro el más útil a los efectos de visualización en tiempo real es el comando tail, puesto que tiene un atributo que nos permite ver como se van agregando líneas sin necesidad de cerrar y volver a abrir el archivo. Muy útil a la hora de ver logs del sistema.

Se utiliza de la siguiente manera:

Encontrar elementos con find

Con el comando find podemos encontrar archivos o directorios que cumplan con una o varias condiciones. Es una herramienta muy útil porque a través de este comando podemos dar instrucciones con las coincidencias que encontremos.

Hagamos un ejemplo práctico, con el mismo caso que hemos estado realizando. En la parcela de mi madre, siendo esta la parcela 1 (o p1), supongamos que mi madre tiene una gata llamada Lola. Siempre se escapa Lola porque, como todos los gatos, suelen ser muy escurridizos e independientes.

Entonces, nos valdremos de nuestras habilidades para encontrarlo 😉

Ahora, con find también podemos ejecutar acciones que afectarán a ese elemento, que en este caso es Lola.

Por ejemplo:

Veámoslo aquí:

Imagen: llevando a Lola a su casa, con los comandos find y mv

Ahora para cerrar, veremos los comandos mv (move) en mayor profundidad y el comando cp (copy).

Moviendo y copiando elementos con mv y cp

Ahora hablaremos sobre los comandos mv y cp.

El comando mv nos ayuda a mover elementos, bien sea archivos o directorios, de una ubicación a otra. También nos sirve para renombrar elementos, dentro de la misma ubicación o en la ubicación de destino de nuestro elemento. Veamos algunas formas de sintaxis de mv:

Ahora con el comando cp, lo que haremos es crear duplicados de uno o varios archivos o ficheros, de una ubicación a otra, o en una misma ubicación, siempre y cuando cambiemos el nombre de los mismos. Su sintaxis es similar a la de cp:

Eliminar archivos y directorios con rm

El comando rm (remove), es una utilidad que nos va a permitir eliminar archivos o directorios que no necesitemos. Es una herramienta muy poderosa y peligrosa, así que hay ser muy cuidadosos en su uso, por si no queremos eliminar algo importante o incluso destruir nuestro sistema.

Su modo de uso es:

Crear archivos y directorios con touch mkdir

Con los comandos touch y mkdir, podemos crear archivos y directorios. Veamos como funciona touch:

Estos archivos que se crean son vacíos. No tienen contenido alguno.

Ahora veamos como funciona mkdir:

BONUS: Consultar el manual de un comando con man

El comando man es, de seguro, el más útil de todos los comandos, pues es el manual o base de datos de todos los comandos y funciones, atributos y formas de uso de ese comando del cual tenemos dudas, y lo tenemos en forma de manual en nuestra terminal.

Para utilizarlo, sólo debemos hacer esto:

El comando man funciona con less como soporte de visualización, así que si queremos desplazarnos, solo utilizamos las flechas direccionales y para salir, presionamos la letra q.

Palabras finales y Cierre

Aprendimos como manejar estos diez comandos iniciales y así poder ir calentando los dedos y la mente a la hora de administrar nuestra terminal de Linux. Esto requiere práctica constante y empeño, cometeremos errores, así que es importante verificar siempre antes de ejecutar un comando.

Para finalizar este post, que creo que está bastante largo, pero es para leerlo y practicarlo con calma, sobre todo si estás de cero, o tienes ciertas dudas, con respecto a algunos de los tópicos, explicándolos de la forma como se lo explicaría a mis hijos, con calma y paciencia.

Les recomiendo crear directorios y generar sus ambientes de prácticas, crear máquinas virtuales con Virtualbox, ProxmoxVE o vmWare, tal y como lo explico en este post aquí, y luego ir pasando a explorar muchas más opciones, comandos y herramientas. Si te gusta el contenido del post, por favor difúndelo, comenta, comparte. Quizás conozcas a alguien que lo necesite, compártelo y aprendamos todos en esta bonita Comunidad.

Hasta Luego Fronters!!!

Referencias

Tecmin.com: 35 Practical Examples of Linux Find Command

Baeldung.com: Concatenating Text Files into a Single File in Linux

Tecmin.com: How to Use “mv” Command in Linux [9 Useful Examples]

📊 Infografía: 15 comandos Linux esenciales

📥 Puedes descargar la infografía aquí

Infografía 15 comandos Linux