Ir al contenido principal

Cómo usar tuberías en Linux

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

Vea También:

Comentarios

Entradas populares de este blog

Cómo usar el comando Echo en Linux

El comando echo es perfecto para escribir texto formateado en la ventana del terminal.Y no tiene que ser texto estático. Puede incluir variables de shell, nombres de archivo y directorios. También puede redirigir echo para crear archivos de texto y archivos de registro. Siga esta sencilla guía para descubrir cómo. Echo repite lo que le dice que repita A Zeus le gustaba abandonar el Olimpo para asociarse con hermosas ninfas. En un viaje, le dijo a una ninfa de la montaña llamada Echo que matara a su esposa, Hera, si ella lo seguía. Hera vino a buscar a Zeus, y Echo hizo todo lo que pudo para mantener a Hera en conversación. Finalmente, Hera perdió los estribos y maldijo al pobre Echo para que solo repitiera las últimas palabras que alguien más había dicho. Lo que Hera le hizo a Zeus cuando lo alcanzó es la suposición de nadie. Y eso, más o menos, es mucho eco en la vida. Repite lo que se le ha dicho que repita. Esa es una función simple, pero vit...

El loco 100W de carga rápida de Xiaomi hará su debut en los teléfonos inteligentes el próximo año

La tecnología de carga rápida no es exactamente nueva, pero como algunos de ustedes recordarán, a principios de este año, Xiaomi eliminó su tecnología de carga rápida Super Charge Turbo que ofrecía velocidades de hasta 100W. Lo que esto significa es que, en base a una batería de 4,000 mAh, solo tomaría 17 minutos llenarla. Publicidad Para aquellospreguntándose cuándo podríamos ver cómo la tecnología llega a los teléfonos inteligentes, le agradará saber que durante la Conferencia de Desarrolladores de Xiaomi, la compañía ha insinuado que llegará en 2020. La compañía también detalló algunos de loscaracterísticas de la tecnología de carga rápida. Esto incluye cómo el cargador contará con una bomba de carga de alto voltaje y una arquitectura de batería de doble celda. También habrá varias características de seguridad incorporadas, con Xiaomi afirmando que habrá 9 capas de protección. También habrá una MCU independiente que controla la carga, y también uti...