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