Outils Linux
Introduction
Ce chapitre présente un ensemble d’outils Linux que tout utilisateur devrait connaître. En effet, il suffit généralement d’une ligne de commande adéquate pour effectuer les mêmes traitements qu’une centaine de clics de souris avec un gestionnaire de fichiers graphique.
À l’issue de ce chapitre, le lecteur saura, entre autres :
-
rechercher des fichiers selon certains critères et leur appliquer un traitement ;
-
filtrer le contenu de fichiers et les sorties de commandes avec des expressions régulières ;
-
trier et scinder des données ;
-
afficher partiellement le contenu de fichiers.
find
La commande find permet de rechercher, dans une ou plusieurs arborescences de répertoires, des fichiers qui répondent à certains critères, et de leur appliquer un traitement selon une action déterminée.
La syntaxe globale de la commande est :
find chemin(s) critère(s) action
La syntaxe de la commande find ne suit pas les règles élémentaires de syntaxe des commandes Linux décrites au chapitre Connexion et premières commandes.
1. Chemin de recherche
On spécifie à la commande find un ou plusieurs chemins de recherche ; ces chemins sont des répertoires du système de fichiers et find se charge de parcourir toute l’arborescence sous-jacente à la recherche des fichiers.
Si aucun chemin n’est spécifié, find lance sa recherche dans le répertoire courant :
$ ls -R
.:
fichier1 fichier2 rep1 rep2
./rep1:
./rep2:
$ find
.
./rep2
./rep1
./fichier2
./fichier1
$ find .
.
./rep2
./rep1
./fichier2
./fichier1
Lorsque plusieurs chemins sont spécifiés, ils sont séparés par un espace :
$ find /var/spool/mail . /etc/skel
/var/spool/mail
/var/spool/mail/alan
/var/spool/mail/linus
/var/spool/mail/richard
/var/spool/mail/gordon
/var/spool/mail/eric
/var/spool/mail/rpc
/var/spool/mail/ken
/var/spool/mail/dennis
/var/spool/mail/nicolas
.
./rep2
./rep1
./fichier2
./fichier1
/etc/skel
/etc/skel/.gnome2
/etc/skel/.bashrc
/etc/skel/.bash_logout
/etc/skel/.mozilla
/etc/skel/.mozilla/plugins
/etc/skel/.mozilla/extensions
/etc/skel/.bash_profile
2. Expressions de sélection
Les critères de sélection, ou expressions, sont introduits avec un - (tiret) et suivis de leur paramètre.
Par exemple, l’expression -name nomfic demande à la commande find de rechercher uniquement les fichiers dont le nom est nomfic. La ligne de commande complète, pour une recherche dans toute l’arborescence Linux, est alors :
find / -name nomfic 2>/dev/null
Un utilisateur ordinaire ne possède pas les droits suffisants pour accéder à tous les fichiers présents...
grep
La commande grep permet de rechercher dans un ou plusieurs fichiers, ou sur l’entrée standard, les lignes correspondant à un filtre.
La syntaxe générale de grep est :
grep option(s) filtre fichier(s)
En utilisant l’entrée standard pour filtrer la sortie de la commande ps, on limite le résultat affiché aux lignes contenant une chaîne de caractères particulière ; par exemple, pour trouver rapidement le PID du processus sleep :
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:45 ? 00:00:02 /sbin/init
root 2 0 0 09:45 ? 00:00:00 [kthreadd]
root 3 2 0 09:45 ? 00:00:00 [ksoftirqd/0]
root 4 2 0 09:45 ? 00:00:00 [migration/0]
root 5 2 0 09:45 ? 00:00:00 [watchdog/0]
root 6 2 0 09:45 ? 00:00:00 [events/0]
...
root 1528 1 0 09:46 ? 00:00:00 crond
root 1542 1 0 09:46 ? 00:00:00 /usr/sbin/atd
root 1550 1 0 09:46 ? 00:00:00 /usr/sbin/gdm-binary -nodaemon
root 1555 1 0 09:46 tty2 00:00:00 /sbin/mingetty /dev/tty2
root 1557 1 0 09:46 tty3 00:00:00 /sbin/mingetty /dev/tty3
root 1559 1 0 09:46 tty4 00:00:00 /sbin/mingetty /dev/tty4
root 1561 1 0 09:46 tty5 00:00:00 /sbin/mingetty /dev/tty5
root 1565 1 0 09:46 tty6 00:00:00 /sbin/mingetty /dev/tty6
root 1573 1550 0 09:46...
cut
La commande cut permet d’extraire des colonnes ou des champs sélectionnés à partir de son entrée standard ou de fichiers.
Extraction de champs
La première syntaxe de la commande cut qui permet d’extraire des champs est :
cut -f champ(s) -d délimiteur fichier(s)
Lorsque plusieurs champs sont spécifiés, on sépare leurs numéros par une virgule.
Pour n’afficher que le troisième et le sixième champ du fichier /etc/passwd :
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
nicolas:x:1000:1000:Nicolas Pons:/home/nicolas:/bin/bash
linus:x:1004:1000:Linus Torvalds:/home/linus:/bin/bash
richard:x:1005:1000:Richard M. Stallman:/home/richard:/bin/bash
ken:x:1001:1000:Ken Thompson:/home/ken:/bin/bash
dennis:x:1002:1000:Dennis Ritchie:/home/dennis:/bin/bash
eric:x:1006:1000:Eric S. Raymond:/home/eric:/bin/bash
alan:x:1007:1000:Alan Cox:/home/alan:/bin/bash
gordon:x:1003:1000:Gordon E. Moore:/home/gordon:/bin/bash
$ cut -f 3,6 -d : /etc/passwd
0:/root
1:/bin
1000:/home/nicolas
1004:/home/linus
1005:/home/richard
1001:/home/ken
1002:/home/dennis
1006:/home/eric
1007:/home/alan
1003:/home/gordon
Extraction de colonnes
Le séparateur de champs étant un caractère défini...
sort
La commande sort trie les lignes d’un fichier (ou son entrée standard) et retourne le résultat sur sa sortie standard.
Sa syntaxe générale est :
sort -t délimiteur -k champ.caractère option(s) fichier
Le fichier d’exemple fruits utilisé dans cette section est :
pomme.2
tomate.10
poire.4
Dans sa plus simple expression, sort effectue un tri alphabétique sur le premier caractère de chaque ligne :
$ sort fruits
poire.4
pomme.2
tomate.10
Le tri peut commencer à partir de n’importe quel caractère de n’importe quel champ dans le fichier. On utilise alors la syntaxe -kn.m où n est le numéro de champ et m le numéro du caractère dans ce champ. Si le numéro de caractère est omis, le trie s’effectuera à partir du premier caractère du champ spécifié.
À la différence de la commande cut, le séparateur de champs par défaut est un ou plusieurs caractères d’espacement. De plus, il est modifiable avec l’option -t.
Voici un tri à partir du troisième caractère sur le premier champ de chaque ligne :
$ sort -k1.3 fruits
poire.4
tomate.10
pomme.2
Voici un tri sur le premier caractère du second champ de chaque ligne :
$ sort -t. -k2 fruits
tomate.10 ...
head, tail
Les commandes head et tail permettent respectivement de n’afficher que le début et la fin de fichiers.
La commande head affiche par défaut les dix premières lignes d’un fichier. On peut modifier cette option aux N premières lignes du fichier avec la syntaxe head -nN.
La commande tail affiche par défaut les dix dernières lignes d’un fichier. On peut ici modifier cette valeur de deux façons :
tail -nN |
affiche les N dernières lignes du fichier. |
tail -n+N |
affiche de la ligne N jusqu’à la fin du fichier. |
En résumé, on obtient :
La commande tail est également utilisée pour consulter des fichiers écrits en même temps par d’autres processus, notamment des fichiers journaux. L’option -f indique à la commande tail de lire les nouvelles lignes du fichier en entrée, au fur et à mesure qu’elles deviennent disponibles ; cela permet de contrôler la croissance de ce fichier.
On ne peut utiliser l’option -f de tail qu’en spécifiant un fichier. Il est impossible de l’employer lorsque la commande lit les données sur son entrée standard.
Pour arrêter l’affichage avec l’option -f, on interrompt la commande avec les touches [Ctrl]+[c].
Exercices
Exercice 1
Comptez le nombre de sous-répertoires présents dans /etc.
Solution
Il suffit pour cela de lister les fichiers de façon détaillée (ls -l) afin d’afficher leur type (premier caractère de chaque ligne retournée) et de filtrer les lignes commençant par le caractère d (grep ’^d’).
Les lignes correspondant aux sous-répertoires de /etc peuvent alors être comptées à l’aide de la commande wc -l ou de l’option -c de grep :
[nicolas]$ ls -l /etc | grep '^d' | wc -l
137
[nicolas]$ ls -l /etc | grep -c '^d'
137
Exercice 2
Trouvez tous les fichiers dont vous êtes le propriétaire sur le système.
Solution
La commande find avec le critère de recherche -user est la plus appropriée pour cette tâche :
[nicolas]$ find / -user nicolas 2>/dev/null
/run/media/nicolas/Fedora-Live-WS-x86_64-23-10
/run/media/nicolas/Fedora-Live-WS-x86_64-23-10/EFI
/run/media/nicolas/Fedora-Live-WS-x86_64-23-10/EFI/BOOT
/run/media/nicolas/Fedora-Live-WS-x86_64-23-10/EFI/BOOT/BOOTX64.EFI
/run/media/nicolas/Fedora-Live-WS-x86_64-23-10/EFI/BOOT/fonts
...
Une redirection des messages d’erreur vers /dev/null est nécessaire pour supprimer toutes les alertes concernant les droits d’accès à certains répertoires du système...