Ne comprend pas l’utilisation de (tuyaux) unix

J’étudie pour les systèmes opérationnels à mon université et j’ai du mal à comprendre l’utilisation des conduites (|). Voici un exemple que j’ai trouvé sur internet:

ps -ax | grep Finder
Utilisez la commande ps pour obtenir une liste des processus en cours d’exécution sur le système et passez la liste à grep pour rechercher les lignes contenant “Finder”. (En général, il en trouve deux: le Finder et les processus exécutant grep Finder.)

Que faire si j’écris d’abord ps -ax et à la ligne suivante grep finder ? n’aura-t-il pas le même résultat? pourquoi je dois les assembler?

ps: Bigginer aux commandes du shell unix et comment cela fonctionne.

Il s’agit de redirect les entrées et les sorties.

Si vous ps -ax > processes , vous ps -ax > processes fichiers avec une liste de tous les processus. Ceci redirige la sortie. Toutes les données affichées à l’écran sont écrites dans un fichier.

Si vous deviez taper grep Finder < processes , vous devriez rechercher le mot Finder dans les processes fichiers. Ceci redirige l'entrée.

Le tuyau fait les deux. Il redirige la sortie de la commande du côté gauche et redirige l'entrée de la commande du côté droit.

 $ ps -ax | grep Finder 

est comme

 $ ps -ax > temp $ grep Finder < temp 

sauf sur une seule ligne sans fichier temporaire à supprimer.

Non, le résultat ne serait pas le même dans les deux cas que vous avez mentionnés ci-dessus. Essaye le.

ps -ax lui-même son résultat à la sortie standard. grep Finder par lui-même ne fonctionnerait pas du tout

pipe crée un canal de données unidirectionnel pouvant être utilisé pour les communications interprocessus. Donc, ps -ax | grep finder ps -ax | grep finder redirige essentiellement la sortie de ps -ax tant que stream d’entrée dans la commande grep Finder , qui à son tour recherche la chaîne ‘Finder’ dans ce stream.

Unix est un système basé sur des fichiers. Et à moins que vous ne spécifiiez où vous voulez redirect la sortie, celle-ci sera affichée à l’écran.

Donc, si vous tapez ps ax , cela listera tous les processus en cours à l’écran . Donc, si vous tapez ps ax premier et ensuite grep vous obtiendrez tout le processus et vous obtiendrez une erreur car grep attend au moins 2 parameters, keyword et filename .

Donc, vous devez faire 2 étapes.

  ps ax > filename grep finder filename 

Cela vous donnera le résultat.

Pipe | redirige la sortie de gauche, sous forme de fichier, vers la commande de droite. Vous pouvez donc fusionner les 2 étapes.

Donc, au lieu de tout ce qui précède, vous pouvez simplement dire ps ax|grep finder , qui transmettra la sortie de ps ax tant que fichier à la commande grep .

Notez que de cette manière, vous n’avez pas spécifié de nom de fichier à grep directement. Au lieu de cela, vous lui dites d’utiliser la sortie de ps ax comme un fichier