Control de Secuencias y Tuberías

LinuxBeginner
Practicar Ahora

Introducción

¡Bienvenido a este laboratorio práctico sobre ejecución de comandos y procesamiento de texto en Linux! Si es nuevo en Linux, no se preocupe: lo guiaremos en cada paso. En este laboratorio, exploraremos cómo ejecutar múltiples comandos de manera eficiente y utilizaremos potentes herramientas de procesamiento de texto. Al finalizar este laboratorio, podrá combinar comandos, realizar búsquedas en textos y manipular datos como un profesional.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarle a aprender y practicar. Siga las instrucciones cuidadosamente para completar cada paso y ganar experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 96%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Ejecución de Comandos de Forma Secuencial

En Linux, puede ejecutar varios comandos uno tras otro en una sola línea. Esto es especialmente útil cuando desea realizar una serie de tareas relacionadas.

Comencemos con un ejemplo sencillo. Mostraremos la fecha actual y luego listaremos el contenido de su directorio personal:

date && ls ~

Esto es lo que hace este comando:

  • date: Muestra la fecha y hora actuales.
  • &&: Este símbolo significa "y". Le indica a Linux que ejecute el siguiente comando solo si el primero finaliza correctamente.
  • ls ~: Lista el contenido de su directorio personal (el símbolo ~ representa su directorio home).

Escriba este comando en su terminal y presione Enter. Debería ver la fecha de hoy seguida de una lista de archivos y carpetas en su directorio personal.

Si no ve ningún archivo listado después de la fecha, ¡no se preocupe! Podría significar que su directorio personal está vacío. Puede intentar con ls /home/labex en su lugar para asegurarse de ver algún resultado.

Ejecución Condicional de Comandos

En este paso, exploraremos cómo usar operadores condicionales para controlar la ejecución de comandos basándonos en el éxito o fracaso de los comandos anteriores.

Primero, intentemos ejecutar un comando condicional con un programa que no está instalado:

which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"

En esta secuencia de comandos:

  • which cowsay comprueba si el programa cowsay está instalado.
  • && es un operador lógico AND que ejecuta el siguiente comando solo si el anterior tiene éxito.
  • cowsay "Hello, LabEx" muestra una vaca en arte ASCII diciendo "Hello, LabEx".
  • || es un operador lógico OR que ejecuta el siguiente comando solo si el anterior falla.
  • echo "cowsay is not installed" imprime un mensaje indicando que cowsay no está instalado.

Debería ver el mensaje "cowsay is not installed" porque el programa cowsay aún no está instalado en el sistema.

Ahora, instalemos cowsay:

sudo apt-get update && sudo apt-get install -y cowsay

Y ejecute el mismo comando de nuevo:

which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"

Esta vez, debería ver una vaca en arte ASCII diciendo "Hello, LabEx".

Este ejemplo demuestra cómo usar && y || para crear secuencias de comandos condicionales. && significa "ejecutar si el comando anterior tiene éxito", mientras que || significa "ejecutar si el comando anterior falla".

Analicemos lo que sucedió:

  1. Antes de la instalación:

    • which cowsay se ejecutó (pero no encontró coincidencias).
    • Debido al &&, se intentó ejecutar cowsay "Hello, LabEx", pero falló porque cowsay no estaba instalado.
    • Como cowsay falló, se ejecutó el comando después de || (echo "cowsay is not installed").
  2. Después de la instalación:

    • which cowsay tuvo éxito, por lo que ejecutó cowsay "Hello, LabEx".
    • No fue necesario ejecutar el comando echo después de ||.

¡Intente crear sus propias secuencias de comandos condicionales usando estos operadores!

Introducción a las Tuberías (Pipelines)

Las tuberías son una característica potente de Linux que le permite conectar la salida de un comando con la entrada de otro. Esto se hace usando el símbolo | (pipe).

Comencemos con un ejemplo sencillo:

ls -l /etc | less

Esto es lo que hace:

  • ls -l /etc: Lista el contenido del directorio /etc en formato largo.
  • |: Envía la salida del comando anterior al siguiente comando.
  • less: Un programa que le permite desplazarse a través del texto.

Cuando ejecute esto, verá una lista de archivos y directorios. Puede usar las teclas de flecha arriba y abajo para desplazarse, y presionar 'q' para salir.

Ahora, intentemos una tubería más compleja:

ls -l /etc | grep '^d' | wc -l

Este comando cuenta el número de directorios en /etc. Así es como funciona:

  1. ls -l /etc: Lista el contenido de /etc en formato largo.
  2. grep '^d': Filtra las líneas que comienzan con 'd' (que indican directorios).
  3. wc -l: Cuenta el número de líneas (que ahora representa el número de directorios).

Debería ver un número impreso, que es el recuento de directorios en /etc.

Uso de cut para Extraer Campos

El comando cut es útil para extraer partes específicas de cada línea de un archivo. Lo usaremos para extraer nombres de usuario y directorios personales del archivo /etc/passwd, que contiene información sobre las cuentas de usuario en el sistema.

Ejecute este comando:

cut -d: -f1,6 /etc/passwd | head -n 5

Analicemos esto:

  • cut: El comando para extraer porciones de líneas.
  • -d:: Utiliza : como delimitador (el carácter que separa los campos).
  • -f1,6: Extrae el primer y sexto campo (nombre de usuario y directorio personal).
  • |: Envía la salida al siguiente comando.
  • head -n 5: Muestra solo las primeras 5 líneas de la salida.

Debería ver una salida similar a esta:

root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin

Cada línea muestra un nombre de usuario y su directorio personal, separados por dos puntos.

Combinación de grep con Tuberías y Secuencias de Comandos

En este paso, exploraremos cómo usar grep en combinación con tuberías y secuencias de comandos para un procesamiento de texto más avanzado.

Comencemos buscando todas las líneas que contienen "PATH" en su archivo .zshrc y contándolas:

grep "PATH" ~/.zshrc | wc -l

Esta tubería primero usa grep para encontrar líneas con "PATH", luego envía la salida a wc -l para contar las líneas.

Ahora, usemos una secuencia de comandos para buscar "PATH" y luego "HOME" si se encuentra "PATH":

grep "PATH" ~/.zshrc && grep "HOME" ~/.zshrc

Esto mostrará las líneas que contienen "HOME" solo si se encontraron líneas que contienen "PATH".

Probemos un ejemplo más complejo. Buscaremos líneas que terminen con "bin" en /etc/passwd, las ordenaremos y mostraremos las primeras 5:

grep "bin" /etc/passwd | sort | head -n 5

Esta tubería hace tres cosas:

  1. Busca líneas que contienen "bin".
  2. Ordena estas líneas alfabéticamente.
  3. Muestra solo las primeras 5 líneas del resultado.

Finalmente, combinemos todo lo que hemos aprendido. Buscaremos líneas que contengan "sh" en /etc/passwd, las contaremos y, basándonos en el recuento, mostraremos las líneas o un mensaje:

grep "sh" /etc/passwd | wc -l | {
  read count
  [ $count -gt 5 ] && grep "sh" /etc/passwd || echo "Found $count lines, not enough to display."
}

Este comando complejo hace lo siguiente:

  1. Busca líneas que contienen "sh".
  2. Cuenta estas líneas.
  3. Si el recuento es mayor que 5, muestra las líneas.
  4. Si el recuento es 5 o menos, muestra un mensaje con el recuento.

Nota: Al ingresar comandos de varias líneas en la terminal, es posible que deba presionar Alt+Enter después de cada línea (excepto la última) para realizar saltos de línea, o simplemente escribir el comando completo en una sola línea.

¡Intente ejecutar estos comandos y experimente con sus propias combinaciones!

Contar con wc

El comando wc (word count) es útil para contar líneas, palabras y caracteres en un texto.

Comencemos contando el número de líneas en /etc/passwd:

wc -l /etc/passwd

La opción -l le indica a wc que cuente las líneas. Debería ver un número seguido del nombre del archivo.

Ahora, contemos el número de palabras en las primeras 10 líneas de /etc/passwd:

head -n 10 /etc/passwd | wc -w

Esta tubería hace dos cosas:

  1. head -n 10 /etc/passwd: Obtiene las primeras 10 líneas del archivo.
  2. wc -w: Cuenta las palabras en esas líneas.

Debería ver un número que representa el recuento de palabras.

Ordenar con sort

El comando sort se utiliza para ordenar líneas de texto. Usémoslo para ordenar el archivo /etc/passwd por el tercer campo (ID de usuario):

sort -t: -k3 -n /etc/passwd | head -n 5

Esto es lo que hace cada parte:

  • -t:: Utiliza : como separador de campos.
  • -k3: Ordena basándose en el tercer campo.
  • -n: Ordena numéricamente (en lugar de alfabéticamente).
  • | head -n 5: Muestra solo las primeras 5 líneas de la salida.

Debería ver las primeras cinco líneas de /etc/passwd, ordenadas por ID de usuario (el tercer campo).

Eliminar Duplicados con uniq

El comando uniq se utiliza para eliminar o identificar líneas duplicadas en un texto ordenado. Usémoslo para encontrar los tipos de shell únicos en /etc/passwd:

cut -d: -f7 /etc/passwd | sort | uniq

Esta tubería hace tres cosas:

  1. cut -d: -f7 /etc/passwd: Extrae el séptimo campo (la shell) de cada línea.
  2. sort: Ordena las líneas alfabéticamente.
  3. uniq: Elimina las líneas duplicadas.

Debería ver una lista de las rutas de shell únicas utilizadas en el sistema.

Ahora, contemos cuántos usuarios utilizan cada shell:

cut -d: -f7 /etc/passwd | sort | uniq -c

La opción -c antepone a las líneas el número de ocurrencias. Debería ver cada ruta de shell precedida por un número que indica cuántos usuarios están usando esa shell.

Resumen

¡Felicidades! Ha completado este laboratorio sobre ejecución de comandos y procesamiento de texto en Linux. Repasemos lo que ha aprendido:

  1. Puede ejecutar comandos secuencialmente usando && y condicionalmente usando ||.
  2. Las tuberías (|) le permiten conectar múltiples comandos, pasando la salida de uno como entrada al siguiente.
  3. cut es excelente para extraer partes específicas de las líneas de un archivo.
  4. grep le ayuda a buscar patrones específicos en el texto.
  5. wc puede contar líneas, palabras y caracteres en el texto.
  6. sort organiza las líneas de texto en un orden específico.
  7. uniq elimina duplicados de un texto ordenado y puede contar las ocurrencias.

Estas herramientas son fundamentales para el procesamiento de texto en Linux. A medida que continúe su viaje en Linux, encontrará innumerables formas de combinar estos comandos para resolver tareas complejas de procesamiento de datos. ¡No tenga miedo de experimentar y probar nuevas combinaciones!

Recuerde, la práctica hace al maestro. Intente usar estos comandos con diferentes archivos y opciones para profundizar su comprensión. Si alguna vez olvida cómo funciona un comando, siempre puede usar el comando man (por ejemplo, man grep) para ver su página de manual.

¡Siga explorando y disfrute aprendiendo Linux!