# apropos ## À quoi ça sert ? Vous cherchez une commande mais vous ne vous souvenez plus de son nom ? Vous savez ce que vous voulez faire, mais pas comment l'appeler ? C'est exactement le rôle d'`apropos`. La commande `apropos` recherche dans les **noms** et les **descriptions courtes** des pages du manuel système (les pages `man`) tous les mots-clés passés en arguments. C'est l'équivalent de `man -k`. > **Bon à savoir** : `apropos` ne fouille pas le contenu complet des pages de manuel, seulement la ligne `NAME` (nom + description courte). Pour une recherche dans le corps des pages, il faut se tourner vers d'autres outils comme `man -K` (avec un K majuscule). ## Un premier exemple Cherchons toutes les commandes liées à la copie : ```bash $ apropos copy debconf-copydb (1) - copier une base de données debconf bcopy (3) - copy byte sequence copy_file_range (2) - Copy a range of data from one file to another copysign (3) - copy sign of a number cp (1) - copy files and directories cpio (1) - copy files to and from archives dd (1) - convert and copy a file rsync (1) - a fast, versatile, remote (and local) file-copying tool scp (1) - secure copy (remote file copy program) ... ``` ### Comprendre la sortie Chaque ligne suit le format : `commande (section) - description`. Le **numéro entre parenthèses** correspond à la section du manuel : | Section | Contenu | |---------|---------| | 1 | Commandes utilisateur (shell) | | 2 | Appels système (kernel) | | 3 | Fonctions de bibliothèque (C, etc.) | | 4 | Fichiers spéciaux (`/dev/...`) | | 5 | Formats de fichiers et conventions | | 6 | Jeux | | 7 | Divers (protocoles, conventions) | | 8 | Commandes d'administration | Cette numérotation explique pourquoi on voit dans l'exemple à la fois `cp (1)` (la commande shell) et `copy_file_range (2)` (l'appel système). Pas pratique quand on cherche juste une commande à taper dans son terminal… ## Les astuces utiles ### Limiter la recherche à une section Pour n'afficher que les commandes du shell (section 1), utilisez l'option `-s` : ```bash $ apropos -s 1 copy cp (1) - copy files and directories cpio (1) - copy files to and from archives dd (1) - convert and copy a file rsync (1) - a fast, versatile, remote (and local) file-copying tool scp (1) - secure copy (remote file copy program) ... ``` Beaucoup plus lisible ! Vous pouvez aussi cibler la section 8 pour les commandes d'admin, ou la section 2 si vous codez en C et cherchez un appel système. ### Rechercher avec plusieurs mots-clés (ET logique) Par défaut, la recherche de plusieurs mots-clés est conditionnée par un **OU** logique. La commande `apropos copy file` retourne donc les pages contenant `copy` **ou** `file` — autant dire la moitié du manuel. Pour exiger que **tous** les mots-clés soient présents, utilisez `-a` (comme *and*) : ```bash $ apropos -s 1 -a copy file cp (1) - copy files and directories cpio (1) - copy files to and from archives dd (1) - convert and copy a file install (1) - copy files and set attributes mcopy (1) - copy MSDOS files to/from Unix rcp (1) - secure copy (remote file copy program) rsync (1) - a fast, versatile, remote (and local) file-copying tool scp (1) - secure copy (remote file copy program) ``` ### Rechercher avec une expression régulière Pour des recherches plus fines, l'option `-r` (activée par défaut sur la plupart des distributions) permet d'utiliser une regex : ```bash $ apropos '^cp' # commandes commençant par "cp" $ apropos 'copy|move' # contenant "copy" ou "move" ``` L'option `-w` permet à l'inverse d'utiliser des jokers shell (`*`, `?`). ## « apropos: nothing appropriate » ? Si `apropos` ne trouve rien alors que vous êtes sûr·e que la commande existe, c'est probablement que la **base de données des pages de manuel** n'est pas à jour. `apropos` ne lit pas les pages à la volée : il interroge un index pré-construit. Pour le régénérer : ```bash $ sudo mandb ``` C'est typiquement le cas après l'installation d'un nouveau paquet sur certains systèmes minimaux (conteneurs Docker, par exemple). ## Pour aller plus loin - `whatis commande` : affiche uniquement la description courte d'une commande précise (recherche exacte sur le nom) - `man -k` : strictement équivalent à `apropos` - `man -K` : recherche dans le **contenu** complet des pages (beaucoup plus lent)