Ernest

Tout savoir sur man

Dernière modification : 2014-11-26 23:14:38

Image du Tux lisant le manuel

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, nous tâchons d'aller plus loin que l'utilisation basique du manuel pour devenir plus efficace dans l'utilisation de notre système. Nous n'étudions pas du tout les ressources disponibles sur Internet mais bien ce qui est présent sur votre système. Et vous allez voir qu'il y a de quoi faire ...

[ sommaire ] | [ home ]


Se déplacer dans man

Avant d'attaquer les choses sérieuses, il faut s'assurer de connaître les fonctions de bases. Voici un petit récapitulatif des touches pour se déplacer dans une page de manuel (et la quitter sans passer par le syndrome PLOTKA ^^)

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 borde... heu 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 A 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. En voici 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 nous 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 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 pour cela : 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 vous la quittez en appuyant sur q, voici ce que vous voyez :


$ 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. A ce stade, si vous appuyez sur Entrée, vous retournez à la page précédente. Si vous appuyez sur Ctrl-c, vous sortez du programme et retrouvez le prompt de votre shell. En revanche, si vous faites 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) ]

Cette fois, il ne s'agit pas de passwd(1) mais de passwd(1SSL) : si vous souhaitez consulter cette page, faites Entrée, sinon faites Ctrl-d pour accéder à la section suivante :


$ 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 vous ramène à votre prompt.

Mais parfois, nous ne voulons pas consulter *toutes* les pages man d'une commande, nous souhaitons plutôt avoir la liste de toutes les sections dans lesquelles elle apparaît. C'est tout à fait possible ! 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. Notez 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, vous savez pourquoi la page man que vous lisez ne parle pas du tout de ce que vous voulez 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 vous 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 indique après des points de suspension, ce qui veut dire que nous pouvons mettre plusieurs options à la suite.

Nous trouvons ensuite le mot REPERTOIRE. Il n'est pas entre crochets, ce qui signifie qu'il n'est pas optionnel : la commande rmdir ne fonctionnera pas si vous n'indiquez 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 (qui restent simples, ne vous emballez 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 cp davantage par la pratique qu'avec le man. Heureusement, votre système recèle d'autres options pour compléter ce pilier parfois un peu impressionnant 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 votre mot-clé dans le nom et la description courte de toutes les commandes décrites dans le manuel. A 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 individuels (Vixie cron)
deb-symbols (5)      - Fichier d'information sur les bibliothèques partagées Debian

A 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 notre propos aujourd'hui.

Notez que vous obtenez 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.

Bien entendu, nous obtenons le même résultat avec man -f.

[ sommaire ] | [ home ]


Installer un joli pager

Rien ne vous oblige à utiliser le pager par défaut tout tristou 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  pour conserver la valeur par défaut[*] ou choisissez le numéro sélectionné :

Voilà, pour vérifier que le résultat vous plaît, tapez par exemple "man ls". Si à un moment vous souhaitez revenir à votre pager par défaut, refaites un update-alternatives --config pager et choisissez less dans la liste.

[ sommaire ] | [ home ]


Conclusion

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

[ sommaire ] | [ home ]