_____                      _   
| ____|_ __ _ __   ___  ___| |_ 
|  _| | '__| '_ \ / _ \/ __| __|
| |___| |  | | | |  __/\__ \ |_ 
|_____|_|  |_| |_|\___||___/\__| 
    	               is back ! 
	    		

Tout savoir sur man

Dernière édition : 07/06/2019

Image : Le schtroumpf à lunettes devant un livre

Sommaire

--------


Introduction

------------

La plupart des utilisateurs de GNU/Linux connaissent la commande man. Mais pour un trop grand nombre d'entre eux, c'est une connaissance très sommaire. Pourtant, la structure de la documentation est très aboutie et, à vrai dire, elle recèle une quantité stupéfiante d'informations. Encore faut-il pouvoir y accéder. Dans cet article, on va tâcher d'aller au-delà de l'utilisation basique du manuel pour devenir plus efficace dans l'utilisation de son système. On court-circuite les ressources disponibles sur Internet et on se concentre sur ce qui est présent sur la machine. Et tu vas voir, y a de quoi faire ...


Se déplacer dans man

--------------------

Avant d'attaquer les choses sérieuses, il faut s'assurer de connaître les fonctions de base. Petit récapitulatif des touches pour se déplacer dans une page de manuel.

Commande Touches
Monter et descendre Flèches haut et bas / Page Up et Page Down
Revenir au début, aller à la fin Home / Fin (ou End)
Rechercher Touche /
Aller au résultat de recherche suivant Touche / puis Entrée
Quitter Touche q

[ sommaire ] | [ home ]


Organisation des pages de manuel

--------------------------------

Le manuel est parfaitement standardisé et chaque page est organisée selon le même plan rigoureux. Enfin ça, c'est la théorie. En fait, de par sa nature bordélique organique, le monde de l'Open Source en général et celui de GNU/Linux en particulier ne sauraient avoir un système *parfaitement* organisé. Certaines sections ne sont donc pas présentes dans certaines pages du manuel. Malgré tout, l'ensemble reste plutôt cohérent. Voici donc la liste des rubriques que l'on retrouve le plus souvent.

Rubrique Contenu
NAME Nom de la commande + résumé de ce qu'elle fait
SYNOPSIS Syntaxe de la commande, très important !
DESCRIPTION Description plus longue, explicite les options notamment
AUTHOR Auteur(s) du programme
REPORTING BUGS À qui envoyer un rapport de bugs
COPYRIGHT La plupart du temps, c'est en GPL
SEE ALSO Liste des programmes connexes

[ sommaire ] | [ home ]


Les sections du manuel

----------------------

Les pages du manuel sont regroupées dans ce que l'on appelle les sections, en fonction de leur utilisation. Hop, la liste.

Section Description
1 Commandes utilisables par tous les utilisateurs
2 Appels système du noyau
3 Fonctions des bibliothèques
4 Fichiers des périphériques (situés généralement dans /dev)
5 Formats des fichiers et conventions.
6 Jeux
7 Divers (dont les macropaquets et les conventions)
8 Commandes de gestion système (généralement réservées à root)
9 Sous-programmes du noyau

Lorsqu'on affiche la page man d'une commande, tout en haut à gauche, on peut lire le nom de cette commande (en majuscules) suivi du numéro de section entre parenthèses. Ainsi, man ls affiche : LS(1), ce qui est normal puisque ls est une commande du shell utilisable par tous les utilisateurs.

Là où les choses se compliquent, c'est lorsque certains noms de commande appartiennent à plusieurs sections. Par exemple, la commande passwd (qui sert à changer son mot de passe) appartient à la section 1 mais le fichier passwd appartient quant à lui à la section 5 (qui contient les fichiers). Or, si je tape man passwd, man affiche les informations concernant PASSWD(1). Si je cherche la commande passwd, c'est très bien, mais si je veux tout savoir sur le fichier /etc/passwd, je ne suis guère avancé. Heureusement, man permet de spécifier dans quelle section il doit rechercher si je ne suis pas satisfait par la recherche par défaut. Il faut donc taper man 5 passwd et cette fois, la page qui s'affiche correspond à PASSWD(5), c'est-à-dire le fichier /etc/passwd

Alors, du coup, une question se pose : quand on ne sait pas à quoi correspond une commande, comment savoir si nous voulons les informations concernant la commande ou bien le fichier ? Ou même autre chose : par exemple, peut-être existe-t-il un jeu qui s'appelle passwd ?

Pas de souci, man dispose d'une option mal connue mais géniale dans ce cas-là : man -a passwd. Cette commande, dans un premier temps, affiche la page man 1 passwd, c'est-à-dire la documentation de la commande passwd. Mais lorsque tu la quittes en appuyant sur q, voici ce que tu vois :

$ man -a passwd 
-Man- prochain: passwd(1) [voir (entrée) | passer (Ctrl-D) | quitter (Ctrl-C)]

Au lieu de rendre la main, man propose de consulter l'ensemble de la documentation disponible sur le mot-clé passwd. À ce stade, si tu appuies sur Entrée, tu retournes à la page précédente. Si tu appuies sur Ctrl-c, tu sors du programme et récupères ton shell. En revanche, si tu fais Ctrl-d, une nouvelle ligne s'affiche :

$ man -a passwd
-Man- prochain: passwd(1) [voir (entrée) | passer (Ctrl-D) | quitter (Ctrl-C)]
-Man- prochain: passwd(1SSL) [voir (entrée) | passer (Ctrl-D) | quitter (Ctrl-C)]
-Man- prochain: passwd(5) [voir (entrée) | passer (Ctrl-D) | quitter (Ctrl-C)]

Nous avons maintenant la possibilité de consulter la page consacrée au fichier passwd, en faisant Entrée.

Lorsqu'il n'y a plus de page man disponible, Ctrl-d te ramène au prompt.

Mais parfois, on ne veut pas consulter *toutes* les pages man d'une commande, on veut plutôt avoir la liste de toutes les sections dans lesquelles elle apparaît. Pas de problème ! Ainsi, demandons la liste des pages man disponibles pour passwd : man -aw passwd

$ man -aw passwd
/usr/share/man/fr/man1/passwd.1.gz
/usr/share/man/man1/passwd.1.gz
/usr/share/man/fr/man1/passwd.1SSL.gz
/usr/share/man/man1/passwd.1ssl.gz
/usr/share/man/fr/man5/passwd.5.gz
/usr/share/man/man5/passwd.5.gz

La commande nous renvoie la liste de toutes les pages de manuel disponibles. Note qu'il y a la version française et la version originale sur mon système, mais naturellement cela varie en fonction des installations.

Voilà, désormais, tu sais pourquoi la page man que tu lis ne parle parfois pas du tout de ce que tu veux et surtout comment y remédier.

[ sommaire ] | [ home ]


Le SYNOPSIS

-----------

Le synopsis est peut-être la partie la plus importante d'une page de manuel. C'est lui qui va te permettre d'utiliser une commande en lui donnant des options sans recevoir de message d'erreur à cause d'un argument mal placé ou d'une virgule oubliée. Il est crucial et donc, très logiquement, parfaitement imbitable :-)

En fait, le synopsis décrit de manière condensée toutes les façons possibles d'utiliser une commande. Plus cette commande est souple, plus le synopsis est donc compliqué.

Un cas très simple : rmdir

Prenons un exemple pour comprendre, avec une commande simple pour commencer, rmdir, qui permet d'effacer des répertoires.

rmdir [OPTION] ... RÉPERTOIRE ...

Le synopsis commence par la commande rmdir elle-même, puis nous voyons [OPTION]. Les crochets signifient toujours qu'ils s'agit d'éléments optionnels. Quelles sont les options de la commande rmdir ? Nous les trouvons un peu plus loin dans la page du manuel, dans la section DESCRIPTION : -v par exemple indique à rmdir de donner davantage de détails sur les opérations effectuées par la commande.

Le synopsis continue ensuite avec des points de suspension, ce qui veut dire qu'on peut mettre plusieurs options à la suite.

On trouve ensuite le mot REPERTOIRE. Il n'est pas entre crochets, ce qui signifie qu'il n'est pas optionnel : la commande rmdir ne fonctionnera évidemment pas si tu n'indiques pas le répertoire à effacer.

Enfin, nous avons là encore des points de suspension, ce qui signifie que nous pouvons indiquer plusieurs répertoires à effacer à la suite.

Nous remarquons également que les mots OPTIONS et REPERTOIRE sont soulignés dans la page man. Cela signifie qu'ils doivent être remplacés par les vraies options (par exemple -v) ou les vrais répertoires (par exemple ~/Trash).

La commande rmdir, elle, n'est pas soulignée et apparaît en gras ou dans une couleur différente en fonction du terminal. Cela signifie qu'elle doit être utilisée telle qu'on la voit : rmdir

Les choses se compliquent : la commande cp

Le début de la page man se présente comme cela :

MV(1                               Commandes                          MV(1)

NOM
       mv - Déplacer ou renommer des fichiers

SYNOPSIS
       mv [OPTION]... [-T] SOURCE CIBLE
       mv [OPTION] ... SOURCE ... RÉPERTOIRE
       mv [OPTION] ... -t RÉPERTOIRE SOURCE ...

DESCRIPTION
       Renommer la SOURCE en CIBLE ou déplacer la SOURCE vers le RÉPERTOIRE.

En premier lieu, il faut bien lire la DESCRIPTION : elle dit que la commande mv sert à : "Renommer la SOURCE en CIBLE ou déplacer la SOURCE vers le RÉPERTOIRE". Ce sont donc deux fonctions distinctes.

Première grosse différence avec la commande rmdir : le synopsis contient ici trois lignes au lieu d'une. C'est ce qui se produit avec les commandes dont la flexibilité entraîne plusieurs syntaxes d'utilisation.

Intéressons-nous d'abord à la première ligne. La commande mv est suivie des options entre crochets, et les points de suspension indiquent que nous pouvons en utiliser plusieurs à la fois. Elles sont listées plus bas dans la page de manuel, dans la rubrique DESCRIPTION. Ce sont par exemple -f (pas de demande de confirmation avant un écrasement de fichier), -u (ne déplacer que si le fichier source est plus récent que le fichier destination) ou encore -v (active le mode verbeux).

Nous avons ensuite l'option -T, elle aussi optionnelle (entre crochets). Viennent enfin SOURCE et CIBLE, tous deux obligatoires. SOURCE est le fichier que l'on déplace, CIBLE est l'endroit où on le place. Notons que cet endroit peut être un répertoire (auquel cas le fichier SOURCE est simplement déplacé dans ce répertoire) ou bien il peut s'agir d'un fichier, auquel cas SOURCE prend son nom (et écrase le fichier s'il existait déjà). Notez que si le fichier CIBLE n'a pas le même nom que le fichier SOURCE, cela revient à déplacer et renommer notre fichier en même temps.

Exemple 1 : $ mv mon_texte ~/Documents/

déplace mon_texte dans le répertoire ~/Documents

Exemple 2 : $ mv mon_texte ~/Documents/myfile.txt

déplace mon_texte dans ~/Documents en le renommant

Voyons maintenant la deuxième ligne : mv [OPTION] ... SOURCE ... RÉPERTOIRE

Là encore, nous tapons la commande mv suivie de ses éventuelles options. Il faut ensuite immédiatement préciser la source mais nous pouvons en mettre plusieurs, par exemple copier trois fichiers différents. Le dernier argument, REPERTOIRE, est unique et ne peut être un fichier : logique, car si nous copions plusieurs fichiers, on ne peut les stocker que dans un répertoire, pas dans un autre fichier.

Exemple : $ mv -v fichier1 fichier2 fichier3 /home/stephane/Documents/

La dernière ligne du synopsis propose une manière alternative de présenter la commande. Cette fois, après les options, nous avons -t (sans crochets donc obligatoire) suivi du répertoire (donc, cette fois, l'endroit où l'on va déplacer les sources vient AVANT) et enfin le ou les fichiers / répertoires à déplacer.

Exemple : $ mv -t ~/Documents/ fichier1.txt fichier2.txt fichier3.txt

Comme nous avons pu le voir à travers ces deux exemples plus avançés (qui restent simples, t'emballe pas, maîtriser le manuel, c'est un art en soi hein), l'utilisation basique que la plupart des utilisateurs font du manuel est loiiiiiiin de couvrir l'ensemble des richesses de ces informations. Toutefois, il faut bien reconnaître qu'à moins d'être un gourou du man, tout cela reste bien théorique. De fait, je pense avoir appris la commande cp davantage par la pratique qu'avec le man. Heureusement, le système recèle d'autres options pour compléter le mastodonde que constituent les pages du manuel. C'est ce que nous allons voir maintenant.

[ sommaire ] | [ home ]


Les autres commandes pour accéder à l'information

-------------------------------------------------

Il existe d'autres commandes qui reposent en fait sur certaines options de la commande man.

La commande apropos

C'est le cas par exemple de la commande apropos qui fait la même chose que man -k mot-clé, c'est-à-dire chercher un mot-clé dans le nom et la description courte de toutes les commandes décrites dans le manuel. À titre d'exemple, voici le début de ce qu'on trouve avec apropos ls

blockdev (8)     - Appeler les ioctls pour périphériques bloc en ligne de commande
console_ioctl (4)- Ioctl pour les consoles et terminaux virtuels
credentials (7)  - Identifiants de processus
crontab (1)      - Maintenir les fichiers crontab pour les utilisateurs  
deb-symbols (5)  - Fichier d'information sur les bibliothèques partagées Debian

À l'évidence, notre recherche retourne beaucoup de résultats non pertinents, puisque chaque occurrence de la chaîne ls est renvoyée, comme par exemple le "ls" à la fin de "virtuels". Naturellement, il serait possible d'améliorer le ratio signal/bruit avec une regexp et grep mais ce n'est pas le propos ici.

Note que tu obtiendras exactement le même résultat avec man -k ls

La commande whatis

La commande whatis est l'équivalent de man -f. Elle renvoie une courte description de la commande. Voici ce que cela donne pour la commande netstat par exemple :

$ apropos netstat
netstat (8)          - Affiche les connexions réseau, les tables de routage, 
les statistiques des interfaces, les connexions masquées, les messages netlink, 
et les membres multicast.

Et là encore, tu obtiendrais le même résultat avec man -f.

[ sommaire ] | [ home ]


Installer un joli pager

-----------------------

Rien ne t'oblige à utiliser le pager par défaut tout ripou (oui, bon, j'abuse : c'est less) de la plupart des distributions. Il est en effet très simple d'en configurer un autre bien plus sympa comme most.

Voici la marche à suivre pour les systèmes fondés sur apt (pour les utilisateurs de rpm, c'est la même procédure avec yum).

# apt-get install most
# update-alternatives --config pager

Il existe 5 choix pour l'alternative pager (qui fournit /usr/bin/pager).

  Sélection   Chemin          Priorité  État
------------------------------------------------------------
  0            /bin/less        77        mode automatique
  1            /bin/less        77        mode manuel
  2            /bin/more        50        mode manuel
* 3            /usr/bin/most    60        mode manuel
  4            /usr/bin/pg      10        mode manuel
  5            /usr/bin/w3m     25        mode manuel

Appuyez sur [Entrée] pour conserver la valeur par défaut [*] 
ou choisissez le numéro sélectionné

Voilà, pour vérifier que le résultat te plaît, tape par exemple man ls. Si à un moment tu souhaites revenir à ton pager par défaut, refais un update-alternatives --config pager et choisis less dans la liste.

[ sommaire ] | [ home ]

Conclusion

----------

Nous arrivons au terme de ce tour d'horizon de man et des richesses documentaires de ton système. Franchement, la plupart des tutoriaux sur le net (y compris ceux d'Ernest ...) ne sont qu'une exégèse de ces documents, souvent en moins précis, mais parfois aussi en moins aride. Une chose est sûre, plus tu utiliseras le man de manière informée, plus tu vas en tirerez profit. Alors lance-toi !