Introducción a las tuberías con nombre en Bash Shell

Introducción a las tuberías con nombre en Bash Shell

En los sistemas operativos basados ​​en Linux y Unix, las tuberías son muy útiles, ya que son una forma simple de lograr IPC (Comunicación entre procesos). Cuando conectamos dos procesos en una tubería, la salida del primero se usa como entrada del segundo. Para construir una llamada tubería "anónima", todo lo que tenemos que hacer es usar el | operador. Las tuberías anónimas o no identificadas duran siempre que los procesos que se conectan. Sin embargo, hay otro tipo de tubería que podemos usar: un FIFO, o pipa llamada. En este artículo veremos cómo funcionan las tuberías nombradas y en lo que son diferentes de las tuberías estándar.

En este tutorial aprenderás:

  • ¿Qué es una tubería con nombre?
  • Cómo crear una tubería con nombre
  • Cómo reconocer una tubería con nombre
  • Cómo funcionan las tuberías nombradas
  • Cómo eliminar una tubería con nombre
Introducción a las tuberías con nombre en Bash Shell

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Distribución independiente
Software Las utilidades utilizadas en este tutorial están disponibles de forma predeterminada
Otro Permisos de raíz para realizar tareas administrativas
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Un recordatorio rápido de cómo funcionan las tuberías

En un tutorial anterior, ya vimos cómo funcionan las tuberías y para qué pueden usarse en la introducción a las redirecciones de shell, pero hagamos un resumen rápido. En nuestros scripts o en nuestras sesiones de carcasa interactiva, podemos usar el operador de tubería (|) para conectar dos procesos juntos, de modo que la salida estándar (stDout) del proceso en el lado izquierdo de la tubería se usa como la entrada estándar (stdin) del proceso en el lado derecho de la misma. Aquí hay una demostración rápida y trivial:

$ Echo "Goot" | tr 't "d' bueno 

En el ejemplo anterior, la salida del eco El comando se usa como la entrada estándar del TR uno. Para aquellos de ustedes que no saben, el TR El comando se puede usar para traducir o eliminar caracteres: aquí lo usamos para sustituir todas las ocurrencias del T personaje con el d uno. El resultado de los dos comandos se unió en lo que se llama tubería, ¿Es la cadena "buena"?.

Lo que usamos en el ejemplo anterior se llama tubería sin nombre. Tal tipo de tubería existe solo hasta que se ejecuten los comandos, y no se puede acceder después. Si queremos construir una tubería y poder hacer referencia después de su uso
Debemos usar el llamado tuberías con nombre, Veamos cuáles son y cómo funcionan.



¿Qué es una tubería con nombre??

En un sistema operativo basado en unix como Linux, un tubería nombrada, o FIFO (Primero, primero en salir), es un tipo de archivo "especial" utilizado para establecer una conexión entre los procesos. A diferencia de una tubería "estándar", se accede a una tubería con nombre como parte del sistema de archivos, al igual que cualquier otro tipo de archivo. Una vez creado, una tubería con nombre, de hecho aparecerá como un archivo estándar; Sin embargo, siempre parecerá estar vacío, ya que no se utilizará para "almacenar" información. Los datos que pasarán a través de la tubería serán administrados directamente por el núcleo: el FIFO El archivo Will se usa como referencia.

Creando una tubería con nombre

Para crear un tubería nombrada, En los sistemas operativos modernos basados ​​en Linux, todo lo que debemos hacer es usar el mkfifo dominio. En su uso más básico, todo lo que tenemos que aprobar como argumento al programa es el nombre que queremos usar para el FIFO archivo. Para
instancia, para crear una tubería con nombre llamada tubería, Corríamos:

$ mkfifo pipe0 

Si se desea, también se puede crear una tubería con nombre con un conjunto específico de permisos utilizando el -metro opción (abreviatura de --modo) del mkfifo dominio. La opción acepta el Bits de permiso de archivo como argumento, por ejemplo, para crear un nombrado
tubería con 644 Permisos, correríamos:

$ MKFIFO -M 644 PUBE0 

Echemos un vistazo al archivo creado como resultado de ejecutar el comando anterior:

$ ls -l pipe0 prw-r-r---. 1 EGDOC EGDOC 0 dic 15 11:55 tubería0 

Aquí corrimos el LS comando con el -l opción, de modo que se usó el formato de listado largo. En la salida del comando podemos ver que la primera letra que aparece antes de los permisos bits es un pag: Esto indica que
El archivo es de hecho una tubería con nombre.



Usando una tubería con nombre

Sabemos cómo funcionan las tuberías "estándar": la salida estándar del proceso a la izquierda de la tubería | se usa como la entrada estándar de la derecha. Las tuberías nombradas funciona de manera similar. Demostrarlo. Lo primero que queremos
hacer es escribir algo a la tubería nombrada. Para hacer eso podemos usar una redirección simple; Abrimos un nuevo emulador de terminal y ejecutamos el siguiente comando:

$ Echo "Mensaje de entrada"> Pipe0 

Algo aparentemente inesperado sucede tan pronto como presionamos Entrar: el comando parece colgar. Esto se debe a cómo funcionan las tuberías con nombre: para que los datos se pasen a través de una tubería con nombre, la FIFO El archivo debe abrirse en ambos extremos, por un proceso que le está escribiendo, y al menos uno que quiere leer de él.

En este caso, dado que no hay nada que esté "leyendo" de la tubería y "consumir" su contenido, decimos que la tubería es obstruido. Para demostrar esto, abramos otro emulador terminal y usemos el gato Comando para "leer" desde la tubería con nombre:

$ Cat Pipe00 Mensaje de entrada 

Como puede ver, el mensaje que escribimos a la tubería nombrada se ha impreso en la pantalla y en el terminal que solíamos escribir en la tubería, todo vuelve a la normalidad (el comando ya no está colgando y el indicador de la carcasa aparece nuevamente). Como puede ver en el clip a continuación, sucede lo mismo si primero abrimos la tubería para leer, y no hay nada que le escriba:

Una vez más, nada se escribe realmente en el tubería Archivo, y una vez que el contenido de una tubería con nombre se "consume", se borra la tubería. Una de las ventajas de las tuberías con nombre sobre las tuberías estándar es que los procesos del escritor y el lector no tienen que comenzar al mismo tiempo.



Eliminar una tubería con nombre

Dado que una tubería con nombre es solo un archivo, para eliminar uno, suponiendo que tengamos los permisos adecuados para realizar la acción, podemos usar el RM dominio. Para eliminar la tubería que creamos en los ejemplos anteriores, por lo tanto, ejecutaríamos:

$ rm pipe0 

Conclusiones

En este artículo aprendimos cómo tuberías con nombre Trabaja en Linux. Vimos cómo se accede como parte del sistema de archivos, ya que parecen ser como cualquier otro archivo. Vimos cómo crear tuberías con nombre usando el mkfifo comando que
son su peculiaridad y un ejemplo de su uso. Finalmente, vimos cómo eliminar una tubería con nombre.

Tutoriales de Linux relacionados:

  • Manejo de la entrada del usuario en scripts bash
  • Cosas para instalar en Ubuntu 20.04
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cómo configurar VSFTPD en Debian
  • Cómo iniciar procesos externos con Python y el ..
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Mastering Bash Script Loops
  • Script bash: esperado un operador unario
  • Cómo propagar una señal a los procesos infantiles de una fiesta ..
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..