Que signifie le symbole |
dans la commande Sudo ps -ef | grep processname
?
Est-ce que quelqu'un peut aussi expliquer cette commande? J'ai utilisé cette commande uniquement pour obtenir le PID et tuer ce processus, mais j'ai aussi vu Sudo ps -ef | grep processname | grep -v grep
et j'ai l'impression que -v grep
revient à tuer l'ancien PID généré pour grep
. Si c'est le cas, comment ça marche?
ps -ef | grep processname
Il exécute d'abord Sudo ps -ef
et passe le résultat à la deuxième commande.
La deuxième commande filtre toutes les lignes contenant le "nom de processus" de Word.
ps -ef | grep processname | grep -v grep
répertorie toutes les lignes contenant processname
et ne contenant pas grep
name__.
Selon man grep
-v, --invert-match
Invert the sense of matching, to select non-matching lines. (-v
is specified by POSIX.)
Selon man ps
ps displays information about a selection of the active processes.
-e Select all processes. Identical to -A.
-f Do full-format listing. This option can be combined with many
other UNIX-style options to add additional columns. It also
causes the command arguments to be printed. When used with -L,
the NLWP (number of threads) and LWP (thread ID) columns will be
added. See the c option, the format keyword args, and the
format keyword comm.
Vous pouvez combiner les paramètres -ef
signifie la même chose que -e -f
.
En fait, ps -ef | grep processname
répertorie toutes les occurrences du processus appelé processname
name__.
Il s'appelle pipe
. Il donne la sortie de la première commande comme entrée de la seconde commande.
Dans votre cas, cela signifie:
Le résultat de Sudo ps -ef
est introduit comme entrée de grep processname
Sudo ps -ef
:
Ceci répertorie tous les processus en cours d'exécution. Tapez man ps
dans le terminal pour plus.
grep processname
Ainsi, cette liste de processus est introduite dans grep qui ne fait que rechercher le programme défini par programname
.
Taper Sudo ps -ef | grep firefox
dans mon terminal retourne:
parto 6501 3081 30 09:12 ? 01:52:11 /usr/lib/firefox/firefox
parto 8295 3081 4 15:14 ? 00:00:00 /usr/bin/python3 /usr/share/unity-scopes/scope-runner-dbus.py -s web/firefoxbookmarks.scope
parto 8360 8139 0 15:14 pts/24 00:00:00 grep --color=auto firefox
Je vais essayer d'y répondre avec une réponse simple et pratique:
Le tube |
vous permet de faire des choses géniales dans Shell! C’est le seul opérateur que je considère comme le plus utile et le plus puissant.
que diriez-vous de compter les fichiers dans un répertoire? simple:
ls | wc -l
..redirect la sortie de ls
à wc
avec le paramètre -l
pour les lignes
ou comptage de lignes dans un fichier?
cat someFile | wc -l
et si je veux chercher quelque chose? 'grep' peut rechercher des occurrences de chaînes:
cat someFile | grep aRandomStringYouWantToSearchFor
il vous suffit de rediriger la sortie de la commande à gauche du tuyau vers la commande à droite du tuyau.
un niveau supplémentaire: combien de fois quelque chose se passe dans un fichier?
cat someFile | grep aRandomStringYouWantToSearchFor | wc -l
vous pouvez utiliser le | pour presque tout :)
fortune | cowsay
J'ai utilisé cette commande uniquement pour obtenir le PID et tuer ce processus
D’autres réponses ont déjà répondu à votre question principale, mais j’aimerais aborder cette question également;
En général tuer un processus est souvent excessif et laisse les ressources allouées par un processus dans un état désordonné. Vous pouvez souvent simplement terminer le;
A côté de cela, utilisez simplement pkill
pour tuer/terminer un processus. pkill
permet de spécifier un nom de processus exact ou une expression régulière:
pkill -x foo # Terminates process foo
pkill ^foo$ # Terminates process foo
pkill -9 -x foo # Kills process foo
pkill -9 ^foo$ # Kills process foo