Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Linux
  3. Outils Linux
Extrait - Linux Principes de base de l'utilisation du système (8e édition)
Extraits du livre
Linux Principes de base de l'utilisation du système (8e édition) Revenir à la page d'achat du livre

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.mn 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 :

images/1201head.png

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...