Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 8 mars 2015

Lister précisément les processus du système Linux en Shell

Dans un script Shell, pour savoir si un programme tourne on a souvent recourt à une commande du genre:

ps -eaf | grep firefox

Et la sortie de la commande ps ressemble à:

1000      3207     1 13 07:30 ?        00:08:33 /opt/mozilla/firefox/firefox
1000      4592  3078  0 08:35 pts/0    00:00:00 grep firefox

Pour parser cette sortie, on commence par exclure le processus grep que l'on utilise pour filtrer les résultats de ps:

ps -eaf | grep firefox | grep -v grep

Pour n'obtenir que:

1000      3207     1 13 07:30 ?        00:08:33 /opt/mozilla/firefox/firefox

Une autre façon de le faire consiste à utiliser l'option -C de la commande ps qui permet de filtrer la sortie selon le nom d'une commande:

 ps -f -C firefox
UID        PID  PPID  C STIME TTY          TIME CMD
1000      3207     1 12 07:30 ?        00:09:12 /opt/mozilla/firefox/firefox

Mais lors du parsing, il me faudra enlever la première ligne avec les noms des colonnes.

D'où l'intérêt de recourir à la commande pgrep qui renvoie uniquement le PID du processus trouvé:

pgrep firefox
3207

Attention, le flag -f de pgrep n'a pas le même usage que celui de ps. ps affiche la ligne de commande avec -f alors que pgrep cherche la pattern fournie dans toute la ligne de commande au lieu de seulement le nom du process (Quand -f n'est pas présent).

Donc pgrep -f firefox donnera le même résultat que pgrep firefox ; par contre pgrep mozilla ne renverra aucun résultat.

Comme ps, pgrep peut lister uniquement les processus d'un utilisateur donné:

pgrep -u root sshd

On peut aussi se contenter de compter les processus correspondant aux critères donnés avec le flag -c.

D'autres options intéressantes existent comme par exemple celle qui permet de ne lister que le dernier processus lancé.

samedi 5 avril 2014

Convertir les man pages au format pdf sous Linux

Les pages du manuel (man pages) de certaines commandes Linux comme rsync, mount ou bash sont tellement longues qu'il est fastidieux de les consulter directement.

La commande man a beau permettre la recherche, quand la man page fait plus de 500 lignes, on a quand même tendance à préférer consulter un fichier.

Pour cela on peut rediriger la sortie standard de man comme suit:

man rsync > rsync.txt

On obtient alors un fichier texte.

Mais si on préfère convertir ces man pages sous forme de fichiers pdf, on peut le faire avec le flag -t de man qui force la sortie de man au format troff ou groff.

Ce format étant habituellement Postscript, il ne reste plus qu'à utiliser ps2pdf en sortie de la commande man pour avoir un fichier PDF.

Par exemple:

man -t kill | ps2pdf - > kill.pdf

Etant donné la syntaxe de ps2pdf, on peut aussi écrire:

man -t kill | ps2pdf - kill.pdf

La commande ps2pdf figure dans le paquet ghostscript.