4.5 KiB
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 :
aproposne fouille pas le contenu complet des pages de manuel, seulement la ligneNAME(nom + description courte). Pour une recherche dans le corps des pages, il faut se tourner vers d'autres outils commeman -K(avec un K majuscule).
Un premier exemple
Cherchons toutes les commandes liées à la copie :
$ 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 :
$ 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) :
$ 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 :
$ 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 :
$ 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 àaproposman -K: recherche dans le contenu complet des pages (beaucoup plus lent)