
Use tuberías de Linux para coreografiar cómo colaboran las utilidades de línea de comandos. Simplifique los procesos complejos y aumente su productividad al aprovechar una colección de comandos independientes y convertirlos en un equipo decidido. Le mostramos cómo.
Los tubos están en todas partes
Los tubos son uno deLas funciones de línea de comandos más útiles que tienen los sistemas operativos Linux y Unix. Las tuberías se usan de innumerables maneras. Mire cualquier artículo de línea de comando de Linux — en cualquier sitio web, no solo el nuestro — y verá que las tuberías aparecen con más frecuencia. Revisé algunos de los artículos de Linux de How-To Geek, y las tuberías se usan en todos ellos, de una forma u otra.
Las tuberías de Linux le permiten realizar acciones que no son compatibles fuera de-la caja por el caparazón. Pero debido a que la filosofía de diseño de Linux es tener muchas pequeñas utilidades que realizan muy bien su función dedicada, y sin una funcionalidad innecesaria — el “ hacer una cosa y hacerlo bien ”mantra — puede conectar cadenas de comandos junto con tuberías para que la salida de un comando se convierta en la entrada de otro. Cada comando que ingresas trae su talento único al equipo, y pronto encuentras que has reunido un escuadrón ganador.
Un ejemplo simple
Supongamos que tenemos un directorio completode muchos tipos diferentes de archivo. Queremos saber cuántos archivos de cierto tipo hay en ese directorio. Hay otras maneras de hacer esto, pero el objetivo de este ejercicio es introducir tuberías, por lo que vamos a hacerlo con tuberías.
Podemos obtener una lista de los archivos fácilmente usando ls:
ls

Para separar el tipo de archivo de interés, ’ usaremos grep. Queremos encontrar archivos que tengan la palabra “ página ”en su nombre de archivo o extensión de archivo.
Utilizaremos el carácter especial de shell “ | ”para canalizar la salida de ls a grep.
ls |grep "página"

grep imprime líneas que coinciden con su patrón de búsqueda. Esto nos da una lista que contiene solo “ . page ”archivos.

Incluso este ejemplo trivial muestra la funcionalidad de las tuberías. La salida de ls no se envió a la ventana del terminal. Se envió a grep como datos para que funcione el comando grep. La salida que vemos proviene de grep, que es el último comando en esta cadena.
Extendiendo nuestra cadena
Vamos a comenzar a extender nuestra cadena de comandos canalizados. Podemos contar el “ . page ”archivos agregando el comando wc. Usaremos la opción -l (recuento de líneas) con wc. Tenga en cuenta que también hemos agregado la opción -l (formato largo) a ls. Lo usaremos en breve.
ls - |grep "página" |wc -l

grep ya no es el último comando en la cadena, por lo que no vemos su salida. La salida de grep se alimenta al comando wc. La salida que vemos en la ventana de terminal es de wc. wc informa que hay 69 “ . page ”archivos en el directorio.
Vamos a extender las cosas nuevamente. Retiraremos el comando wc de la línea de comando y lo reemplazaremos con awk. Hay nueve columnas en la salida de ls con la opción -l (formato largo). Usaremos awk para imprimir las columnas cinco, tres y nueve. Estos son el tamaño, el propietario y el nombre del archivo.
ls -l |grep "página" |awk ''

Obtenemos una lista de esas columnas, para cada uno de los archivos coincidentes.

Nosotros & #8217; ahora pasará esa salida a través del comando ordenar. Usaremos la opción -n (numérica) para que sepa que la primera columna debe tratarse como números.
ls -l |grep "página" |awk '' |sort -n

La salida ahora está ordenada en orden de tamaño de archivo, con nuestra selección personalizada de tres columnas.

Agregando otro comando
Vamos a terminar agregando el comando de cola. Le diremos que solo enumere las últimas cinco líneas de salida.
ls -l |grep "página" |awk '' |ordenar -n |tail -5

Esto significa que nuestro comando se traduce en algo como “ muéstrame los cinco más grandes “ . page ”archivos en este directorio, ordenados por tamaño. ”Por supuesto, no hay un comando para lograr eso, pero al usar tuberías, hemos creado el nuestro. Podríamos agregar este — o cualquier otro comando largo — como un alias o función de shell para guardar toda la escritura.
Aquí está el resultado:

Podríamos revertir el orden de tamaño agregando la opción -r (revertir) al comando de clasificación, y usando head en lugar de tail paraseleccione las líneas desde la parte superior de la salida.
Esta vez las cinco más grandes “ . page ”los archivos se enumeran de mayor a menor:

Algunos ejemplos recientes
Aquí hay dos ejemplos interesantes de artículos recientes sobre cómo hacer geek.
Algunos comandos, como el comando xargs, están diseñados para tener una entrada canalizada hacia ellos. Aquí hay una manera en la que podemos contar wc para contar las palabras, caracteres y líneas en múltiples archivos, colocando ls en xargs que luego alimenta la lista de nombres de archivos a wc como si se hubieran pasado a wc como parámetros de línea de comando.
ls * . page |xargs wc

El número total de palabras, caracteres y líneas se enumeran en la parte inferior de la ventana del terminal.

Aquí ’ una forma de obtener una lista ordenada de las extensiones de archivo únicas en el directorio actual, con un recuento de cada tipo.
ls |rev |cortar -d '.'-f1 |rev |ordenar |uniq -c

Hay muchas cosas pasando aquí.
- ls: Enumera los archivos en el directorio
- rev: Invierte el texto en los nombres de archivo.
- cut: Corta la cadena en la primera aparición del delimitador especificado “. ”. El texto después de esto se descarta.
- rev: Invierte el texto restante, que es la extensión del nombre de archivo.
- sort: ordena la lista alfabéticamente.
- uniq: cuentael número de cada entrada única en la lista.
La salida muestra la lista de extensiones de archivo, ordenadas alfabéticamente con un recuento de cada tipo único.

Tuberías con nombre
Hay otro tipo de tubería disponible para nosotros, llamadas tuberías con nombre. Las tuberías en los ejemplos anteriores son creadas sobre la marcha por el shell cuando procesa la línea de comando. Las tuberías se crean, se usan y luego se descartan. Son transitorios y no dejan rastro de sí mismos. Solo existen mientras el comando que los usa se esté ejecutando.
Las canalizaciones con nombre aparecen como objetos persistentes en el sistema de archivos, por lo que puede verlas usando ls. Son persistentes porque sobrevivirán al reinicio de la computadora — aunque cualquier dato no leído en ellos en ese momento será descartado.
Las tuberías con nombre se usaron mucho a la vez para permitir diferentesprocesos para enviar y recibir datos, pero no los he visto utilizados de esa manera durante mucho tiempo. Sin duda, hay personas por ahí que todavía los usan con gran efecto, pero no he encontrado ninguno recientemente. Pero para completar ’bien, o simplemente para satisfacer su curiosidad, aquí le mostramos cómo puede usarlos.
Las canalizaciones con nombre se crean con el comando mkfifo. Este comando creará una tubería con nombre llamada “ geek-pipe ”en el directorio actual.
mkfifo geek-pipe

Podemos ver los detalles de la tubería con nombre si utilizamos el comando ls conla opción -l (formato largo):
ls -l geek-pipe

El primer carácter de la lista es un & #8220; p ”, lo que significa que es una tubería. Si se tratara de una “ d ”, significaría que el objeto del sistema de archivos es un directorio y un guión “ - ”significaría que es un archivo normal.
Usando la canalización con nombre
Vamos a utilizar nuestra canalización. Las tuberías sin nombre que utilizamos en nuestros ejemplos anteriores pasaron los datos inmediatamente del comando de envío al comando de recepción. Los datos enviados a través de una tubería con nombre permanecerán en la tubería hasta que se lean. Los datos se guardan realmente en la memoria, por lo que el tamaño de la tubería con nombre no variará en las listas de ls, ya sea que haya datos o no.
Vamos a utilizar dos ventanas de terminal para esto. ejemplo. Usaré la etiqueta:
# Terminal-1
en una ventana de terminal y
# Terminal-2
en el otro, para que pueda diferenciarlos. El hash “ # ”le dice al shell que lo que sigue es un comentario y que lo ignore.
Tomemos la totalidad de nuestro ejemplo anterior y lo redirigamos a la tubería con nombre. Entonces, estamos usando tuberías sin nombre y con nombre en un solo comando:
ls |rev |cortar -d '.'-f1 |rev |ordenar |uniq -c >geek-pipe

Parece que no sucederá mucho. Sin embargo, puede notar que no regresa al símbolo del sistema, por lo que algo está sucediendo.
En la otra ventana de terminal, emita este comando:
gato <geek-pipe

Estamos redirigiendo el contenido de la tubería nombrada a cat, para que cat muestre ese contenido en la segunda ventana de terminal. Aquí está la salida:

Y verá que ha regresado al símbolo del sistema en la primera ventana de terminal.

Entonces, lo que acaba de suceder.
- Redirigimos parte de la salida a la tubería con nombre.
- La primera ventana de terminal no volvió ael símbolo del sistema.
- Los datos permanecieron en la tubería hasta que se leyeron desde la tubería en el segundo terminal.
- Regresamos al símbolo del sistema en la primera ventana del terminal.
Puede estar pensando que podría ejecutar el comando en la primera ventana de terminal como una tarea en segundo plano agregando un &hasta el final del comando.Y usted ’ estaría en lo cierto. En ese caso, habríamos regresado al símbolo del sistema de inmediato.
El punto de no usar el procesamiento en segundo plano era resaltar que una tubería con nombre es un proceso de bloqueo. Poner algo en una tubería con nombre solo abre un extremo de la tubería. El otro extremo no se abre hasta que el programa de lectura extrae los datos. El núcleo suspende el proceso en la primera ventana de terminal hasta que los datos se leen desde el otro extremo de la tubería.
El poder de las tuberías
Hoy en día, las tuberías con nombre son una novedadact.
Las canalizaciones Linux simples, por otro lado, son una de las herramientas más útiles que puede tener en su kit de herramientas de la ventana de terminal. La línea de comandos de Linux comienza a cobrar vida para usted, y obtiene un encendido completamente nuevo cuando puede organizar una colección de comandos para producir un rendimiento coherente.
Sugerencia de despedida: es mejor escribir sucanalizó los comandos agregando un comando a la vez y haciendo que esa porción funcione, luego canalizando el siguiente comando.
Fuente: How to Geek
Comentarios
Publicar un comentario