Saltar al contenido
Home » Linux » Conceptos básicos Linux 01.3 – Guía Linux

Conceptos básicos Linux 01.3 – Guía Linux

Conceptos Básicos Linux

Introducción

Ahora que ya hemos visto la instalación del Sistema Operativo Parrot OS y los Comandos Básicos del Terminal de Linux para empezar a trastear nosotros mismos, viene una de las entradas más importantes de la guía. Conceptos básicos de Linux. Los conocimientos que se van a compartir en esta sesión son fundamentales para entender otras entradas más avanzadas.

Si todavía no sabes como instalar el Sistema Operativo Parrot OS, no dudes en leer la siguiente entrada: Instalación Sistema Operativo Parrot OS 01.1 – Guía Linux

Por otro lado, si no has leído la entrada anterior sobre los comandos básicos de Linux, te recomiendo que, antes de continuar, leas la siguiente entrada: Comandos básicos Linux 01.2 – Guía Linux

Es posible que, al principio, los conceptos que se vean en esta entrada te resulten confusos o complicados de entender. En este punto de la guía es completamente normal, pero es importante que te suenen desde el principio ya que serán utilizados en el resto de las entradas. Conforme la guía avance, se harán referencias constantes a esta entrada y poco a poco entenderás mejor todo lo que aquí se explica.

Sin más preámbulos comencemos con la entrada más abstracta de la guía.

Conceptos básicos Linux

Comodines del Terminal

Los comodines son expresiones que nos permiten realizar operaciones sobre varios archivos. Se pueden utilizar prácticamente con cualquier comando y facilitan la ejecución de operaciones sobre diferentes archivos que cumplen con un patrón.

Los comodines en Linux son:

  • ?: Representa un único carácter o dígito cualquiera. Por este motivo, podemos utilizar este comodín para hacer referencia a los todos archivos desde prueba0 hasta prueba9 (y cualquier otro que tenga la palabra prueba más un carácter) con una única expresión: prueba?.
  • *: Este comodín representa cualquier cosa, desde la nada hasta cualquier cantidad de caracteres y dígitos cualesquiera. Así, si queremos referirnos a todo el contenido de una carpeta podemos utilizar simplemente * o si tenemos muchos archivos que empiezan por prueba_ y luego tienen diferentes combinaciones arbitrarias de caracteres, podemos utilizar prueba_* para referirnos a todas ellas.
  • []: En este caso, el comodín genera un rango. Siguiendo con el ejemplo inicial, si queremos hacer referencia a los archivos prueba1, prueba2, prueba3 y prueba4, podemos hacerlo utilizando el comodín así: prueba[1-4].
  • [!]: Este comodín funciona al contrario que el anterior, selecciona todo excepto lo que se encuentra en el rango. Es decir, si no quiero seleccionar los archivos prueba2, prueba3 y prueba4, pero sí todos los demás del directorio, puedo hacerlo de manera sencilla con la expresión prueba[!2-4].
  • {}: Si queremos utilizar varios comodines para seleccionar los archivos necesarios podemos utilizar una lista entre llaves y separada por comas: {prueba[1-3], prueba_*}
  • \: Ésta es la secuencia de escape y permite utilizar caracteres especiales como si fueran normales. Por ejemplo, si quiero crear un archivo en blanco, debo utilizar el comando touch. Si escribo touch prueba 1, el sistema entenderá que quiero crear dos archivos, uno con el nombre prueba y otro con el nombre 1. Para evitarlo utilizamos la secuencia de escape y escapamos el espacio, de esta manera: touch prueba\ 1.

Atajos del Terminal

Los atajos del Terminal, como su nombre indica, nos permiten trabajar más rápido. Son uno de los conceptos más básicos de Linux si buscas eficiencia y existen muchos. Sin embargo, en esta entrada solo voy a hacer referencia a algunos que me han sido útiles con anterioridad:

  • ./: Hace referencia al directorio en el que nos encontramos actualmente.
  • !!: Hace referencia al último comando ejecutado.
  • !$: Hace referencia al argumento del último comando ejecutado.
  • CTRL + R: Accede a la Reverse-i-search que permite buscar comandos en el historial de comandos a partir de una cadena de texto. Si el comando que coincide no es el que queremos, volvemos a presionar CTRL + R para pasar a la siguiente coincidencia.
  • CTRL + L: Es el equivalente al comando clear y limpia la pantalla del terminal dejándola limpia de comandos anteriores.

Concatenación de comandos

Una de las mejores funcionalidades de los Terminales modernos es que permiten concatenar los diferentes comandos en una sola línea. Esto es lo que se conoce como «one-liner» y pueden llegar a ser todo lo complejos que uno se pueda imaginar.

Las concatenaciones en Linux pueden ser de tres tipos:

  • ;: Si concatenamos dos comandos separados por ; estos se ejecutarán uno detrás del otro aunque el primero falle.
cat prueba1; echo "ese es el contenido de prueba1"

# El resultado mostrará el contenido del archivo prueba 1 (si existe) y en cualquier caso, 
# aunque no exista mostrará por pantalla el mensaje "ese es el contenido de prueba1" por pantalla.
  • &&: Los comandos concatenados por && solo se ejecutan si el comando previo a la concatenación a resultado exitoso, es decir, no ha dado ningún código de error.
cat prueba1 && echo "ese es el contenido de prueba1"

# El resultado mostrará el contenido del archivo prueba 1 (si existe) y en ese caso escribirá "ese es el contenido de prueba1" por pantalla.
  • ||: Por último, los comandos unidos con || solo se ejecutan si el comando anterior falla.
cat prueba1 || echo "no se ha podido recuperar el contenido de prueba1"

# El resultado mostrará el contenido del archivo prueba 1 (si existe) y en el caso de que no exista, 
# mostrará por pantalla el mensaje "no se ha podido recuperar el contenido de prueba1" por pantalla.

Redirección de salida

Como vimos en la entrada acerca de la Terminal de Linux, todas las terminales de los Sistemas Operativos permiten comunicarse con el sistema utilizando un Standard Input Stream y recibiendo del mismo unos flujos de salida que pueden ser un Standard Output Stream o un Standard Error Stream.

Si lo anterior no te suena, no dudes en leer la siguiente entrada: Terminal Linux. ¿Qué es? ¡Descubre su historia!

En las terminales modernas los Flujos de salida pueden ser redirigidos a un archivo de la siguiente manera:

  • >: Con el símbolo mayor qué, podemos redirigir el Standard Output de un comando a un archivo borrando el contenido del archivo. Esto no enviará los errores, solo las ejecuciones exitosas del comando.
  • >>: Dos simbolos mayor qué hacen lo mismo que uno solo pero sin eliminar el contenido previo del archivo.
  • 2>: Esta redirección envía el Standard Error de un comando a un archivo borrando el contenido del archivo. Esto significa que los errores que podamos recibir de la ejecución serán almacenados en un archivo, no las ejecuciones correctas.
  • 2>>: Lo mismo que hemos visto anteriormente, redirige el Standard Error de la ejecución de un comando sin borrar el contenido del archivo.
  • &>: En este caso, se envía todo lo resultante de la ejecución de un comando a un archivo, borrando su contenido previo. Se envía tanto el Standard Output como el Standard Error.
  • &>>: Lo mismo que en el anterior pero sin borrar el contenido del archivo.
  • <: Al contrario que las redirecciones anteriores, en este caso, se redirige el contenido de un archivo como Standard Input de un comando.

El ejemplo más utilizado en el día a día de las redirecciones es cuando no queremos que los errores salgan en pantalla. Para ello existe un fichero especial en los sistemas Linux que equivale a destruir todo lo que se redirecciona a él.

Podemos utilizar lo aprendido para realizar una búsqueda por todo el sistema de archivos SUID (ya se verá lo que son) y que los errores de falta de privilegios no nos arruinen el Output:

find / -perm -u+s 2> /dev/null

Prueba en tu sistema con y sin redirección y verás la diferencia.

Uso de tuberías o pipes

Por último pero no menos importante tenemos un tipo especial de redirección de flujo de datos llamado tuberías o pipes.

Una tubería redirecciona el Standard Output de un comando como Standard Input del siguiente. Esto es muy útil a la hora de escribir Scripts ya que nos permite reducir la complejidad del código.

Un ejemplo complejo (para nuestro nivel) podría ser el siguiente:

dpkg -l | grep ^rc | cut -d " " -f 3 | sudo xargs apt-get purge

En el ejemplo anterior sucede lo siguiente:

  1. dpkg -l: Lista los paquetes instalados en la máquina.
  2. grep ^rc: Busca todos los paquetes que empiezan por rc.
  3. cut -d " " -f 3: coge la tercera columna de datos tomando como separador el espacio.
  4. sudo xargs apt purge: Coge la salida del comando cut como argumento (por eso utilizamos xargs) ya que el comando apt purge no tiene entrada sino argumentos. apt purge elimina todos los paquetes que comienzan por rc.

Conclusión

Soy consciente de que esta entrada de «Conceptos básicos de Linux» no ha sido tan básica como cabría esperar, pero no te desanimes, en las siguientes entradas entenderás los usos que se le pueden dar a todos los conceptos que hemos visto hoy.

Ya estamos un poco más cerca de dominar el Terminal de Linux utilizando comodines, atajos, concatenaciones, redirecciones y tuberías.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *