Lamento informarle, pero la línea de comando no murió con los dinosaurios, ni desapareció con el dodo o la paloma mensajera. La línea de comandos de Linux está viva y bien, y sigue siendo fuerte. Es una forma eficiente de recopilar y procesar información rápidamente, crear nuevos scripts y configurar sistemas.
Uno de los operadores de shell más poderosos es la tubería (|
). La tubería toma la salida de un comando y la usa como entrada para otro. Y no está limitado a un solo comando canalizado:puede apilarlos tantas veces como desee o hasta que se quede sin salida o descriptores de archivo.
Uno de los propósitos principales de las tuberías es el filtrado. La canalización se utiliza para filtrar el contenido de un archivo grande, por ejemplo, para encontrar una cadena o palabra en particular. Este es el motivo por el que el uso más popular de las canalizaciones implica los comandos grep
y sort
. Pero, no estás limitado a esos casos. Puede canalizar la salida a cualquier comando que acepte la entrada de flujo. Veamos un ejemplo teórico como ilustración de cómo funciona este proceso:
$ cmd1 | cmd2
Ambos cmd1
y cmd2
son utilidades de línea de comandos que muestran sus resultados en la pantalla (stdout
). Sin embargo, cuando canaliza la salida de un comando a otro, la información de cmd1
no produce salida a la pantalla. La tubería redirige esa salida como entrada a cmd2
.
Nota: No confunda tubería (|
) redirección con redirección de archivos (>
) y (<
). (Un ejemplo de redirección de archivos:cmd1 > file
ocmd1 < file
.) La redirección de archivos envía la salida a un archivo en lugar de a la pantalla, o extrae la entrada de un archivo.
Veamos algunos ejemplos del mundo real de cómo funcionan las tuberías.
Comprobación de las NIC
Supongamos que necesita saber si una de sus tarjetas de interfaz de red (NIC) tiene una dirección IP que comienza con 192:
$ ifconfig | grep 192
inet 192.168.1.96 netmask 255.255.255.0 broadcast 192.168.1.255
También puede averiguar qué NIC en vivo tiene en un sistema con una simple conexión a grep
:
$ ifconfig | grep UP
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
También puede hacer grep para "EJECUTAR" o "EJECUTAR" para mostrar la misma información.
Examinando permisos
Tal vez quiera saber cuántos directorios bajo /etc
son escribibles por root:
$ sudo ls -lR | grep drwx
Los resultados son demasiado largos para enumerarlos aquí, pero como puede ver en la lista que se muestra, hay muchos de ellos. Todavía necesita averiguar cuántos hay, y un recuento visual llevaría mucho tiempo. Una opción fácil es canalizar los resultados de su ls
comando al wc
(recuento de palabras) comando:
$ sudo ls -lR | grep drwx | wc -l
285
El -l
interruptor muestra el número de líneas. Tu conteo puede ser diferente. Este listado es de una instalación nueva de "RHEL 8 server no GUI".
[¿Quiere probar Red Hat Enterprise Linux? Descárguelo ahora gratis.]
Contar archivos
No tienes que usar grep
todo el tiempo. Por ejemplo, puede enumerar la cantidad de archivos en /etc
directorio con esto:
$ ls | wc -l
229
Nuevamente, sus resultados pueden verse diferentes, pero sabrá que algo anda mal si el comando devuelve una pequeña cantidad de archivos.
Identificación de procesos
También puede realizar tareas complejas utilizando tuberías. Para enumerar los ID de proceso (PID) para todos los systemd
-procesos relacionados:
$ ps -ef | grep systemd | awk '{ print $2 }'
1
471
500
608
631
7449
7494
17242
El awk
$2
del comando la salida aísla la segunda columna (PID) del ps
dominio. Tenga en cuenta que la última entrada, PID 17242
, es en realidad el PID para el grep
comando que muestra esta información, como puede ver en los resultados de la lista completa aquí:
khess 17242 7505 0 09:40 pts/0 00:00:00 grep --color=auto systemd
Para eliminar esta entrada de sus resultados, use el operador de tubería nuevamente:
$ ps -ef | grep systemd | awk '{ print $2 }' | grep -v grep
El -v
switch le dice al grep
comando para invertir o ignorar las líneas que contienen la cadena siguiente; en este caso, cualquier línea que contenga la palabra "grep".
Ordenar resultados
Otro uso popular del operador de canalización es ordenar los resultados mediante la canalización al sort
dominio. Digamos que desea ordenar la lista de nombres en contacts.txt
. Primero, veamos los contenidos tal como están en el archivo antes de clasificarlos:
$ cat contacts.txt
Bob Jones
Leslie Smith
Dana David
Susan Gee
Leonard Schmidt
Linda Gray
Terry Jones
Colin Doe
Jenny Case
Ahora, ordena la lista:
$ cat contacts.txt | sort
Bob Jones
Colin Doe
Dana David
Jenny Case
Leonard Schmidt
Leslie Smith
Linda Gray
Susan Gee
Terry Jones
Puede invertir el orden de clasificación con el -r
cambiar:
$ cat contacts.txt | sort -r
Terry Jones
Susan Gee
Linda Gray
Leslie Smith
Leonard Schmidt
Jenny Case
Dana David
Colin Doe
Bob Jones
¿Fue el resultado de cualquiera de estos lo que esperabas? Por defecto, el sort
El comando realiza una clasificación de diccionario en la primera palabra o columna, por lo que Bob Jones
y Terry Jones
no se enumeran uno tras otro.
Puede ordenar por la segunda columna con -k
cambiar, especificando la columna en la que desea ordenar, que en nuestra lista es la columna dos:
$ cat contacts.txt | sort -k2
Jenny Case
Dana David
Colin Doe
Susan Gee
Linda Gray
Bob Jones
Terry Jones
Leonard Schmidt
Leslie Smith
Si tiene una lista de contactos larga y cree que esta lista contiene entradas duplicadas, puede canalizar su lista para sort
y luego uniq
para eliminar esos duplicados:
$ cat contacts.txt | sort | uniq
Este comando solo muestra entradas únicas, pero no guarda los resultados. Para ordenar el archivo, filtrar entradas únicas y luego guardar el nuevo archivo, use esto:
$ cat contacts.txt | sort -k2 | uniq > contact_list.txt
Recuerde que el operador de tubería y los operadores de redirección de archivos hacen cosas diferentes.
Conclusión
Ahora que ha probado el poder de la línea de comando, ¿cree que puede manejar la responsabilidad? Las utilidades de línea de comandos tienen más flexibilidad que sus contrapartes gráficas. Y para algunas tareas, no hay equivalentes gráficos.
La mejor manera de aprender el comportamiento de la línea de comandos es experimentar. Por ejemplo, el sort
El comando no hizo lo que pensó que debería hacer hasta que siguió explorando. No olvides usar el poder de tu manual (man
) para encontrar esos interruptores y opciones secretos "ocultos" que convierten la frustración de la línea de comandos en el éxito de la línea de comandos.