GNU/Linux >> Tutoriales Linux >  >> Linux

Trabajando con tuberías en la línea de comando de Linux

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 o cmd1 < 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.


Linux
  1. Cómo usar el comando grep de Linux

  2. 8 consejos para la línea de comandos de Linux

  3. Tener una vaca en la línea de comandos de Linux

  4. Encárguese en la línea de comandos de Linux

  5. Trabajar con flujos de datos en la línea de comandos de Linux

Domina la línea de comandos de Linux

Manipulación de texto en la línea de comando con grep

Trabajar con imágenes de Docker desde la línea de comandos

Comando Grep en Linux (con ejemplos)

Uso del comando grep en Linux

Conceptos básicos de la línea de comandos de Linux:trabajar con archivos y directorios