Introduction aux tuyaux nommés sur Bash Shell
- 3973
- 866
- Zoe Dupuis
Sur les systèmes d'exploitation basés sur Linux et Unix, les tuyaux sont très utiles car ils sont un moyen simple de réaliser IPC (communication interprocessus). Lorsque nous connectons deux processus dans un pipeline, la sortie du premier est utilisée comme entrée du second. Pour construire un soi-disant tuyau «anonyme», tout ce que nous avons à faire est d'utiliser le |
opérateur. Les tuyaux anonymes ou sans nom durent aussi longtemps que les processus qu'ils connectent. Il existe cependant un autre type de tuyau que nous pouvons utiliser: un Fifo, ou tuyau nommé. Dans cet article, nous verrons comment fonctionnent les tuyaux nommés et dans ce qu'ils sont différents des tuyaux standard.
Dans ce tutoriel, vous apprendrez:
- Qu'est-ce qu'un tuyau nommé
- Comment créer un tuyau nommé
- Comment reconnaître un tuyau nommé
- Comment fonctionnent les tuyaux nommés
- Comment supprimer un tuyau nommé
Exigences et conventions logicielles utilisées
Catégorie | Exigences, conventions ou version logicielle utilisée |
---|---|
Système | Distribution indépendante |
Logiciel | Les utilitaires utilisés dans ce tutoriel sont disponibles par défaut |
Autre | Permissions racinaires pour effectuer des tâches administratives |
Conventions | # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande$ - Exige que les commandes Linux sont exécutées en tant qu'utilisateur non privilégié régulier |
Un rappel rapide de la façon dont les tuyaux fonctionnent
Dans un tutoriel précédent, nous avons déjà vu comment fonctionnent les tuyaux et pour quoi ils peuvent être utilisés dans l'introduction aux redirections de coquille, mais faisons simplement un récapitulatif rapide. Sur nos scripts ou dans nos séances de coquille interactives, nous pouvons utiliser l'opérateur de tuyau (|
) pour connecter deux processus ensemble, de sorte que la sortie standard (stdout) du processus sur le côté gauche du tuyau est utilisée comme entrée standard (stdin) du processus sur le côté droit de celui-ci. Voici une démonstration rapide et triviale:
$ echo "goot" | tr 't "d' bon
Dans l'exemple ci-dessus, la sortie du écho
La commande est utilisée comme entrée standard du tr
un. Pour ceux d'entre vous qui ne savent pas, le tr
La commande peut être utilisée pour traduire ou supprimer des caractères: ici, nous l'avons utilisé pour remplacer toutes les occurrences du t
caractère avec le d
un. Le résultat des deux commandes a été conduite ensemble dans ce qu'on appelle un pipeline, La chaîne est-elle «bonne».
Ce que nous avons utilisé dans l'exemple ci-dessus est appelé un pipe sans nom. Un tel type de tuyau n'existe que jusqu'à l'exécution des commandes et ne peut pas être accessible par la suite. Si nous voulons construire un tuyau et pouvoir le référencer après son utilisation
Nous devons utiliser le soi-disant Pipes nommés, Voyons ce qu'ils sont et comment ils fonctionnent.
Qu'est-ce qu'un tuyau nommé?
Sur un système d'exploitation basé sur UNIX comme Linux, un tuyau nommé, ou Fifo (First-in, First-Out), est un type de fichier «spécial» utilisé pour établir une connexion entre les processus. Contrairement à un tuyau «standard», un tuyau nommé est accessible dans le cadre du système de fichiers, comme tout autre type de fichier. Une fois créé, un tuyau nommé apparaîtra en effet comme un fichier standard; Cependant, il semblera toujours vide, car il ne sera pas utilisé pour «stocker» les informations. Les données qui passeront à travers le tuyau seront gérées directement par le noyau: le Fifo Le fichier sera simplement utilisé comme référence.
Créer un tuyau nommé
Créer un tuyau nommé, Dans les systèmes d'exploitation modernes basés sur Linux, tout ce que nous devons faire est d'utiliser le mkfifo
commande. Dans son utilisation la plus élémentaire, tout ce que nous devons passer comme argument au programme est le nom que nous voulons utiliser pour le Fifo déposer. Pour
Instance, pour créer un tuyau nommé appelé pipe0
, Nous courions:
$ mkfifo pipe0
Si vous le souhaitez, un tuyau nommé peut également être créé avec un Ensemble spécifique d'autorisations en utilisant le -m
Option (abréviation pour --mode
) de la mkfifo
commande. L'option accepte le Bits d'autorisation de fichier comme argument, donc par exemple, pour créer un nommé
tuyau avec 644
Autorisations, nous courions:
$ mkfifo -m 644 pipe0
Jetons un coup d'œil au fichier créé à la suite de l'exécution de la commande ci-dessus:
$ ls -l pipe0 prw-r - r--. 1 egdoc egdoc 0 déc 15 11:55 Pipe0
Ici, nous avons dirigé le LS
commande avec le -l
option, de sorte que le format d'inscription long a été utilisé. Dans la sortie de la commande, nous pouvons voir que la première lettre qui apparaît avant les bits des autorisations est un p
: Cela indique que
Le fichier est en effet un tuyau nommé.
Utilisation d'un tuyau nommé
Nous savons comment fonctionnent les tuyaux «standard»: la sortie standard du processus à gauche du tuyau |
est utilisé comme entrée standard de celui à sa droite. Les tuyaux nommés fonctionnent de la même manière. Voyons-le. La première chose que nous voulons
faire est d'écrire quelque chose sur le tuyau nommé. Pour ce faire, nous pouvons utiliser une simple redirection; Nous ouvrons un nouvel émulateur de terminal et nous exécutons la commande suivante:
$ echo "Message d'entrée"> PIPA0
Quelque chose apparemment inattendu se produit dès que nous appuyons sur Entrée: la commande semble suspendre. Cela est dû au fonctionnement des tuyaux nommés: pour que les données soient passées par un tuyau nommé, le Fifo Le fichier doit être ouvert aux deux extrémités, par un processus qui lui écrit, et par au moins un qui veut lire.
Dans ce cas, comme il n'y a rien de «lire» du tuyau et de «consommer» son contenu, nous disons que le tuyau est bloqué. Pour démontrer cela, ouvrons un autre émulateur de terminal et utilisons le chat
commande de «lire» à partir du tuyau nommé:
$ Cat Pipe0 Message d'entrée
Comme vous pouvez le voir, le message que nous avons écrit au tuyau nommé a été imprimé à l'écran et sur le terminal que nous avons utilisé pour écrire sur le tuyau, tout est de retour à la normale (la commande n'est plus suspendue, et l'invite de coque apparaît à nouveau). Comme vous pouvez le voir dans le clip ci-dessous, la même chose se produit si nous ouvrons le tuyau pour la lecture pour la première fois, et rien n'écrit:
Encore une fois, rien n'est réellement écrit sur le pipe0
fichier, et une fois que le contenu d'un tuyau nommé est «consommé», le tuyau est effacé. L'un des avantages des tuyaux nommés sur des tuyaux standard est que les processus de l'écrivain et des lecteurs n'ont pas à commencer en même temps.
Suppression d'un tuyau nommé
Puisqu'un tuyau nommé n'est qu'un fichier, pour en supprimer un, en supposant que nous avons les bonnes autorisations pour effectuer l'action, nous pouvons utiliser le RM
commande. Pour retirer le tuyau que nous avons créé dans les exemples précédents, nous courions donc:
$ rm pipe0
Conclusions
Dans cet article, nous avons appris comment Pipes nommés travailler sur Linux. Nous avons vu comment ils sont accessibles dans le cadre du système de fichiers, car ils semblent être comme n'importe quel autre fichier. Nous avons vu comment créer des tuyaux nommés en utilisant le mkfifo commande, quoi
sont leur particularité et un exemple de leur utilisation. Enfin, nous avons vu comment supprimer un tuyau nommé.
Tutoriels Linux connexes:
- Gestion de la saisie des utilisateurs dans les scripts bash
- Choses à installer sur Ubuntu 20.04
- Une introduction à l'automatisation Linux, des outils et des techniques
- Comment configurer vsftpd sur Debian
- Comment lancer des processus externes avec Python et le…
- Mint 20: Mieux que Ubuntu et Microsoft Windows?
- Masterring Bash Script Loops
- Script bash: opérateur unaire attendu
- Comment propager un signal aux processus d'enfants à partir d'un bash…
- Système linux hung? Comment s'échapper vers la ligne de commande et…