Quelques commandes utiles

Introduction

Ci-dessous quelques commandes et programmes qui me rendent bien des services dans les scripts shell. Toutes ces commandes ont une multitudes d'options. Pour avoir plus d'aide, ne pas oublier le man, ou info. Ici l'exemple avec la commande ls :

$man ls
$info ls
$ls --help

tcpdump

tcpdump permet de faire des traces réseaux. Ci-dessous, on trace tout ce qui passe sur toutes les interfaces (-i any) en filtrant uniquement les port 80 et 8080 et on ecrit le résultat dans le fichier trace.eth :

$tcpdump -s 2048 -i any 'port 80 or port 8080' -w trace.eth

Pour visualiser cette trace, on utilise le frontal graphique wireshark qui marche aussi sous Windows. On peut aussi utiliser ce frontal pour faire directement la capture.

bc

bc permet de faire toutes sortes de calculs. Cela peut s'avérer très utile dans un script bash, notamment, quand on a besoin de chiffres après la virgule :

$ echo "scale=4;3.2 * 6.855" | bc
21.9360

grep

Pour faire des recherches, notamment dans un flux que l'on a redirigé avec un pipe. Une fonction intéressante permet de conserver tout ce qui ne correspond pas à la recherche (grep -v).

$ps -ef | grep httpd
$ps -ef | grep httpd | grep -v toto

cut

cut permet de ne conserver qu'un seul champ. Cela est pratique dans un script quand on souhaite récuperer une et une seule valeur :

$ ll toto
-rw-r--r--  1 marechal marechal 2896 2004-09-29 18:20 toto

$ ll toto | cut -d " " -f 6
2896

tr

tr permet (entre autres) de supprimer les caractères qui se répètent. L'exemple suivant montre comment ne conserver qu'un seul blanc entre chaque champ.

$ echo "aaaa     bbbbb      ccccc" | tr -s " "
aaaa bbbbb ccccc

tâches cron

Pour ajouter une tache cron, il suffit de faire :

$ crontab -e

Cela ouvre le fichier que l'on peut modifier avec les commandes de vi.

Il y a 5 champs à séparer par des blancs pour la périodicité, et le 6 champ correspond à la ligne de commande complète.

Chaque utilisateur peut créer des taches cron.

Pour la périodicité, il y a les minutes, les heures, les jours, les mois le jour de la semaine, * signifiant quel que soit.(On fera man pour des tâches cron plus élaborées).

Par exemple, pour lancer la tache updatedb (en root) tous les jours à 13h05 :

$ su
# crontab -e
5 13 * * * /usr/bin/updatedb

Valid XHTML 1.0!