Introducción
¡Bienvenido a este laboratorio práctico sobre ejecución de comandos y procesamiento de texto en Linux! Si eres nuevo en Linux, no te preocupes: te guiaremos paso a paso. En este laboratorio, exploraremos cómo ejecutar múltiples comandos de manera eficiente y utilizar potentes herramientas de procesamiento de texto. Al finalizar, serás capaz de combinar comandos, realizar búsquedas en texto y manipular datos como todo un profesional.
Ejecución de comandos de forma secuencial
En Linux, puedes ejecutar varios comandos uno tras otro en una sola línea. Esto es especialmente útil cuando deseas realizar una serie de tareas relacionadas.
Comencemos con un ejemplo sencillo. Mostraremos la fecha actual y luego listaremos el contenido de tu directorio personal:
date && ls ~
Esto es lo que hace este comando:
date: Muestra la fecha y hora actuales.&&: Este símbolo significa "y". Indica a Linux que ejecute el siguiente comando solo si el primero se completa con éxito.ls ~: Lista el contenido de tu directorio personal (el símbolo~representa tu directorio home).
Escribe este comando en tu terminal y presiona Enter. Deberías ver la fecha de hoy seguida de una lista de archivos y carpetas de tu directorio personal.
Si no ves ningún archivo después de la fecha, ¡no te preocupes! Podría significar que tu directorio personal está vacío. Puedes intentar con ls /home/labex para asegurarte de obtener algún resultado.
Ejecución condicional de comandos
En este paso, exploraremos cómo utilizar operadores condicionales para controlar la ejecución de comandos basándonos en el éxito o fallo 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 cowsayverifica si el programacowsayestá 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ías 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 ejecuta el mismo comando de nuevo:
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
Esta vez, deberías ver la 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ó:
Antes de la instalación:
which cowsayfalló porquecowsayno estaba instalado.- Debido a que el lado izquierdo de
&&falló,cowsay "Hello, LabEx"no se ejecutó. - La expresión fallida
which cowsay && cowsay "Hello, LabEx"activó el||, por lo que se ejecutóecho "cowsay is not installed".
Después de la instalación:
which cowsaytuvo éxito, por lo que se ejecutócowsay "Hello, LabEx".- No fue necesario ejecutar el comando echo después de
||.
¡Intenta crear tus propias secuencias de comandos condicionales usando estos operadores!
Introducción a las tuberías (pipelines)
Las tuberías son una característica poderosa en Linux que te permite conectar la salida de un comando con la entrada de otro. Esto se logra utilizando 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/etcen formato largo.|: Envía la salida del comando anterior al siguiente comando.less: Un programa que te permite desplazarte por el texto.
Cuando ejecutes esto, verás una lista de archivos y directorios. Puedes usar las teclas de flecha arriba y abajo para desplazarte, 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:
ls -l /etc: Lista el contenido de/etcen formato largo.grep '^d': Filtra las líneas que comienzan con 'd' (lo cual indica directorios).wc -l: Cuenta el número de líneas (que ahora representa el número de directorios).
Deberías ver un número impreso, que corresponde al conteo 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, el cual contiene información sobre las cuentas de usuario en el sistema.
Ejecuta este comando:
cut -d: -f1,6 /etc/passwd | head -n 5
Analicemos esto:
cut: El comando para extraer porciones de líneas.-d:: Usa:como delimitador (el carácter que separa los campos).-f1,6: Extrae el 1er y 6to 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ías 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 tu 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 verificar si "PATH" existe y luego mostrar las líneas que contienen "HOME" solo si esa primera verificación tiene éxito:
grep -q "PATH" ~/.zshrc && grep "HOME" ~/.zshrc
La opción -q hace que el primer grep se ejecute en modo silencioso, por lo que verifica si hay una coincidencia sin imprimir las líneas de "PATH". Si el primer comando tiene éxito, el segundo grep imprime las líneas que contienen "HOME".
Probemos un ejemplo más complejo. Buscaremos líneas que contengan "bin" en /etc/passwd, las ordenaremos y mostraremos las primeras 5:
grep "bin" /etc/passwd | sort | head -n 5
Esta tubería realiza tres acciones:
- Encuentra líneas que contienen "bin".
- Ordena estas líneas alfabéticamente.
- Muestra solo las primeras 5 líneas del resultado.
Finalmente, combinemos todo lo aprendido. Buscaremos líneas que contengan "sh" en /etc/passwd, las contaremos y, dependiendo del conteo, 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:
- Busca líneas que contienen "sh".
- Cuenta estas líneas.
- Si el conteo es mayor a 5, muestra las líneas.
- Si el conteo es 5 o menos, muestra un mensaje con el conteo.
Nota: Al ingresar comandos de varias líneas en la terminal, es posible que debas presionar Alt+Enter después de cada línea (excepto la última) para realizar saltos de línea, o simplemente escribir todo el comando en una sola línea.
¡Intenta ejecutar estos comandos y experimenta con tus propias combinaciones!
Conteo 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 líneas. Deberías 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:
head -n 10 /etc/passwd: Obtiene las primeras 10 líneas del archivo.wc -w: Cuenta las palabras en esas líneas.
Deberías ver un número que representa el conteo de palabras.
Ordenamiento con sort
El comando sort se utiliza para ordenar líneas de texto. Vamos a usarlo 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:: Usa: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ías ver las primeras cinco líneas de /etc/passwd, ordenadas por ID de usuario (el tercer campo).
Eliminación de duplicados con uniq
El comando uniq se utiliza para eliminar o identificar líneas duplicadas en texto ordenado. Vamos a usarlo para encontrar los tipos de shell únicos en /etc/passwd:
cut -d: -f7 /etc/passwd | sort | uniq
Esta tubería realiza tres acciones:
cut -d: -f7 /etc/passwd: Extrae el 7mo campo (el shell) de cada línea.sort: Ordena las líneas alfabéticamente.uniq: Elimina las líneas duplicadas.
Deberías ver una lista de 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ías ver cada ruta de shell precedida por un número que indica cuántos usuarios están utilizando ese shell.
Resumen
¡Felicidades! Has completado este laboratorio sobre ejecución de comandos y procesamiento de texto en Linux. Repasemos lo que has aprendido:
- Puedes ejecutar comandos secuencialmente usando
&&y de forma condicional usando||. - Las tuberías (
|) te permiten conectar múltiples comandos, pasando la salida de uno como entrada al siguiente. cutes excelente para extraer partes específicas de líneas en un archivo.grepte ayuda a buscar patrones específicos en el texto.wcpuede contar líneas, palabras y caracteres en un texto.sortorganiza líneas de texto en un orden específico.uniqelimina duplicados de texto ordenado y puede contar ocurrencias.
Estas herramientas son fundamentales para el procesamiento de texto en Linux. A medida que continúes tu viaje en Linux, encontrarás innumerables formas de combinar estos comandos para resolver tareas complejas de procesamiento de datos. ¡No temas experimentar y probar nuevas combinaciones!
Recuerda, la práctica hace al maestro. Intenta usar estos comandos con diferentes archivos y opciones para profundizar tu comprensión. Si alguna vez olvidas cómo funciona un comando, siempre puedes usar el comando man (por ejemplo, man grep) para ver su página de manual.
¡Sigue explorando y disfruta aprendiendo Linux!



