Ce qui compte vraiment ou l'Article qui Compte

Gazette Linux n° 181 — Décembre 2010

Éric Gérard

Adaptation française 

Frédéric Marchal

correction du DocBook 

Article paru dans le n° 181 de la Gazette Linux de décembre 2010

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

Le prompt
La Fonction
Les alias
Conclusion
À propos de l'auteur
 

Or, il advînt que Grand Gourou s'était sentie plutôt maternelle ce matin là, et voulait compter les choses — comme les vestes de Petit Gourou, combien de morceaux de savon il restait, ainsi que les deux taches propres dans le biberon de Tigrou.

 
 -- A. A. Milne La maison de Winnie l'Ourson

Je suis responsable d'une grande quantité de machines Linux et UNIX et j'ai encore de la peine avec tous les ordinateurs de mon domaine. Il y a la panoplie habituelle de serveurs : DNS, DHCP, courrier, Internet et serveurs de fichiers auxquels il faut ajouter les ordinateurs en charge de l'infrastructure de l'organisation : comptes, administration, ressources humaines, etc. La liste est longue.

Apparemment rare de nos jours, mon bureau fonctionne sous Linux. Depuis ma base, je me connecte en ssh d'un serveur à l'autre pour effectuer mes tâches journalières.

Je possède, également, un ordinateur portable mais il est posé sur un côté du bureau. Sa fonction principale est jouer de la musique pendant que je mène une guerre sans fin avec les sauvegardes. Je mets des cassettes ; je les enlève ; je maudis le lecteur, le jukebox et les logiciels pourris. Je nettoie et recommence.

Mon ordinateur est configuré exactement comme je l'aime. La totalité de mon HAL (Henry Abstraction Layer) est disponible. Sur la plupart des serveurs de mon réseau interne, c'est également vrai. Typiquement, ils montent mon répertoire home depuis le serveur de fichiers, répertoire home qui est le référentiel des choses qui comptent pour moi.

Note

Alors que je relisais cet article, je me demandais ce qu'il y avait dans mon HAL aujourd'hui. Très instructif. Voici le sommaire :

        170 aliases             alias | wc
         56 envars              env | wc
         93 local vars          set | grep '^[^ ]*=' | wc
         65 functions           set | fgrep ' ()' | wc
        159 shell scripts       files ~/scripts/*.sh | wc
        964 help files          ls ~/help*/help_* | grep -v "~$" | wc

La leçon, que j'en retire, est que beaucoup d'entre eux sont passés de mode. Je ne les ai pas utilisé depuis des lustres et je me souviens plus à quoi ils servaient. Je pense qu'il est temps d'effectuer un grand nettoyage.

Ainsi, pour être totalement honnête, la majorité des fichiers d'aide sont répetés dans différents répertoires. Quand j'utilise :

ls ~/help*/help_* | grep -v "~$" | \
		awk -F / '{print $NF}' | sort -u | wc

le nombre en retour est de seulement 812.

C'est un peu comme être à la maison. Il y a beaucoup plus de vêtements que ce que je porte habituellement. Mais ils sont dans une armoire quelque part et facilement accessibles. Lorsque changent les saisons, ma garde robe s'adapte en conséquence.

Il y a également d'autres serveurs qui n'ont pas accès au serveur de fichiers. Ce sont, typiquement, les serveurs connectés à Internet comme les serveurs DNS externes, notre site web et le serveur FTP. Ainsi, de la façon dont l'organisation est structurée, il y a des îlots semi-autonomes, les groupes d'ordinateurs qui ont un serveur de fichiers indépendant.

Je devrais, sans doute, installer un miroir de mon répertoire home sur les serveurs de fichiers de ces îlots. Peut être que je finirai par le faire. Dans le même temps, j'ai été forcé de me concentrer sur les choses importantes.

Si vous vivez dans un monde graphique (GUI), je doute que ce qui va suivre vous intéresse.

Mon ordinateur utilise un système de fenêtrage (OLVWM, pour ceux que ça intéresse). Mais, mis à part pour le navigateur quasi obligatoire (Firefox), l'interface graphique du système de sauvegarde et les fichiers XPDF occasionnels, le but du système de fenêtrage est de lancer des tonnes de fenêtres xterm. Combien de tonnes ? Je suis heureux que vous posiez la question.

psa | grep xterm | wc
            177    5298   34702

Je pense qu'actuellement 177 xterm tournent. Certaines tournent en local. Voyons voir :

psa | grep -w ssh | wc
             44     574    4260

Cela fait 44 sessions ssh avec des machines distantes. Il devrait y en avoir beaucoup plus, mais de nombreux serveurs m'ont envoyé un time-out. Beaucoup de serveurs sont connectés en ssh et attendent derrière le prompt du bash sur le bureau.

Un comptage primaire peut être obtenu de cette manière :

psa | grep xterm | grep unix | wc
             82    2501   16251

Cela permet d'estimer que 38 d'entre elles, utilisées pour la connexion avec un autre serveurs ont reçu un time-out. Parfois, j'ai plus d'une fenêtre xterm sur un simple serveur. (La raison pour laquelle la commande fonctionne est que la majorité de nos serveurs Linux/UNIX ont un nom qui commence par « unix ». C'est donc une estimation grossière).

J'ai essayé de vivre avec ce qui est disponible sur une machine donnée. Et, à la rigueur, je peux le faire. Mais je trouve que je pense trop à « comment faire les choses ? », et pas assez à « qu'est ce que je veux faire après ? ».

Lorsque vous planifiez vos vacances, vous ne songez pas à prendre toute votre garde robe avec vous. Typiquement, vous n'allez partir que quelques semaines ; et, avec un peu de chance, la saison ne changera pas. En ce qui me concerne, mon espoir est que ce soit l'été : Je n'aurai besoin que de sous-vêtements, shorts et T shirts.

Mais, quoique vous décidiez, vous devez vous concentrer sur ce qui est important. Cela vaut-il que vous vous chargiez d'une deuxième paire de chaussures ? Ai-je réellement besoin d'une robe de chambre ? (Non !)

Après plusieurs mois, il s'est avéré que je n'avais besoin que de quatre choses lorsque je me connectais à ces machines étrangères. J'ai mis ces quatre choses dans un fichier ; et j'utilise une des fenêtres xterm pour afficher le contenu de ce fichier. Voici, la partie pertinente :

        PS1='\[\033[1m\]\h:\w-\t-bash\$\[\033[0m\]\n\$ '
dth () 
{ 
    case $1 in 
        +*)
            lines=-`echo $1 | cut -c2-`;
            shift
        ;;
    esac;
    ls -lat "$@" | head $lines
}
        alias p=pushd
        alias bdx='builtin dirs |tr " " "\012" |awk "{print NR-1, \$0}"'

Lorsque je me connecte à une machine limitée, après démarrage du bash si nécessaire, je peux ajouter cette petite partie de mon HAL avec un triple clic glissé – déplacement de la souris – bouton du milieu.

C'est une curieuse collection de commandes. Et si vous m'aviez demandé six mois plutôt de lister les quatre composants les plus importants de mon HAL, j'aurais pensé à un ou deux de ceux-ci, tout au plus.

Voici, ce qu'ils font et pourquoi ils sont si importants.

Le prompt

Voici le prompt standard d'une de nos machines :

[root@venus ~]#

Qu'est ce que ça me dit ? Très peu, en fait !

Voici le nouveau prompt après avoir configuré PS1 :

venus:~-21:33:16-bash#
#

Premièrement, c'est affiché en gras. Cela me sidère constamment que les autres se moquent de ce point. Si je lance une commande qui produit une quantité indéterminée de texte (comme ls), avec la rapidité des ordinateurs et des réseaux aujourd'hui, la sortie apparait en un clin d'œil. Tout ce que peux voir est un écran rempli de trucs. Où commencent les données issues de la dernière commande ? Quelle était la commande précédente avant cela ?

Parce que mon prompt est écrit en gras et délibérément long, c'est comme si j'avais inséré une ligne avant chaque commande. La dernière commande (ou n'importe laquelle avant) est facile à repérer. Si il y avait un bon choix de couleurs disponible,je serais tenté d'utiliser des couleurs.

Vous ai-je dit que le prompt était un peu long ? Si vous regardez attentivement, vous verrez qu'il est, en fait, composé de deux lignes. Les commandes sont tapées sur la deuxième ligne, commençant au troisième caractère depuis le début de ligne.

J'ai choisi de ne pas afficher le user que j'utilise. C'est soit henry soit root, et # signifie root sinon c'est $ et cela signifie henry.

On m'a dit que il était redondant d'afficher « bash » dans le prompt, et je suis d'accord avec cette remarque. Un jour, peut être, j'arrangerai cela ; mais, pour l'instant, je n'en ai retiré aucun inconvénient.

Je préfère « venus » à « @venus ». Regardez ce qui se passe si je lance une commande cd quelque part :

p /var/log
venus:/var/log-21:45:40-bash#

Avec ma souris, je peux sélectionner le prompt devant le trait d'union et l'utiliser dans une de mes fenêtres xterm (sur mon ordinateur) comme une partie de la commande scp pour transférer des fichiers entre le serveur et mon ordinateur. Par exemple :

scp -p venus:/var/log/syslog /tmp

Il ne s'agit pas juste de moins taper, même si ça me convient ; cela augmente la précision. Entre les différentes machines, comme avec scp par exemple, il n'y a de complétion de fichier.

La dernière partie du prompt est l'heure. Outre le fait que cela me donne l'heure en permanence, je connais, aussi, automatiquement (de façon brute) le temps d'exécution des commandes. Combien de temps a-t-il fallu pour la dernière copie ? Regardez l'heure avant le lancement de la commande, déduisez le temps de frappe de la commande, soustrayez cela à l'heure du prompt lorsque l'exécution de la commande est terminée.

Il est intéressant de savoir quand une commande a été exécutée. Dans ce cas, l'heure indiquée est très précise. Pourquoi est-ce important ?

En premier lieu, vous devez savoir que je suis perpétuellement interrompu dans mon travail. Cela vient de ma position. Ainsi je peux vérifier si j'ai bien copié le fichier avant d'envoyer un courriel ? Non. Et bien cela explique pourquoi ça n'a pas fonctionné. Je ferais mieux de recommencer.

Ce n'est peut être pas important pour d'autres. Peut-être rien de tout cela ne l'est. Mais c'est important pour moi. Ce prompt a évolué tout au long des 20 dernières années.

La Fonction

Qu'est ce qui est le plus important : sous-vêtements ou shorts ? Boisson ou nourriture ? C'est sans doute une question bête ; si vous avez besoin des deux, les deux sont importants.

Ainsi, la fonction est toute aussi importante que le prompt.

Cette fonction est celle que j'utilise le plus. Que fait-elle ? Par essence, elle liste les 10 entrées les plus récentes dans un répertoire.

Lorsque je liste un répertoire (pensez à /etc ou /var/log), la dernière chose que je veux savoir est combien y-a-t il de fichiers ici. Je ne suis pas intéressé par quelque chose qui y est depuis longtemps. C'est juste du bruit et de la distraction.

Pourquoi je veux savoir ce qui a changé récemment ?

Si tout ce que je voulais obtenir de dth était ce que j'ai décrit dans le sommaire, je pourrais l'obtenir avec un alias (presque). Et pendant des années, c'est ce que j'ai fait. Mais, depuis que c'est ma commande la plus utilisée, je suis devenu plus imaginatif.

Parfois, je veux connaitre les 15 premières entrées. Je peux taper :

dth +15

et j'obtiens la liste des 15 premières entrées et je fixe la valeur par défaut à 15. La prochaine fois que j'utiliserai dth sans l'argument +, j'obtiendrai 15 entrées au lieu de 10. Bien évidemment, je peux le corriger avec

dth +10 yada yada

Il y a d'autres avantages. Sur certains systèmes, par défaut, ls est aliasé en ls --color=tty.

Je ne sais pas vraiment pourquoi, mais, lorsque j'utilise dth, je n'obtiens pas ces couleurs ennuyeuses et grandement illisibles ; j'obtiens un blanc et noir standard. Et joie, je n'obtiens jamais de rouge clignotant.

À mon avis, ces quelques lignes ont un punch puissant.

Les alias

Je pourrais aussi bien discuter des deux à la fois tant ils sont complémentaires.

À la place de cd je préfère pushd. Et j'aime encore mieux pouvoir utiliser p seulement.

Pour ceux qui ne sont pas familiers, je ne peux faire mieux que d'afficher l'aide de bash :

builtin help pushd
pushd: pushd [dir | +N | -N] [-n]
    Adds a directory to the top of the directory stack, or rotates
    the stack, making the new top of the stack the current working
    directory.  With no arguments, exchanges the top two directories.
    
    +N  Rotates the stack so that the Nth directory (counting
        from the left of the list shown by `dirs', starting with
        zero) is at the top.
    
    -N  Rotates the stack so that the Nth directory (counting
        from the right of the list shown by `dirs', starting with
        zero) is at the top.
    
    -n  suppress the normal change of directory when adding directories
        to the stack, so only the stack is manipulated.
    
    dir adds DIR to the directory stack at the top, making it the
        new current working directory.
    
    You can see the directory stack with the `dirs' command.

Lorsque je me connecte à un serveur, j'atterris habituellement dans mon répertoire home si je connecte comme henry, ou bien dans le home de root (typiquement /root) si me connecte comme root. Ensuite je visite plusieurs répertoires.

p /etc
	...
p /var/log

Si tout ce que je veux faire est de naviguer entre ces deux répertoires, je peux le faire en utilisant juste p sans argument. Ensuite je visite d'autres répertoires. Et rapidement, la pile grandit. Comme il est dit, « vous pouvez voir la liste des répertoires avec la commande dirs ».

En fait, aujourd'hui, je ne peux pas. Il y a déjà longtemps j'ai défini une fonction dirs qui liste seulement les répertoires du répertoire courant. Aussi, je dois utiliser :

builtin dirs
/p6/home/henryg/Mail/footy /p6/home/henryg/Mail/bv /p6/home/henryg/Mail/personal /p6/home/henryg/Mail/IBM /p6/home/henryg/Mail/lg /p6/home/henryg/Mail/dmo /p6/home/henryg/Mail/theatre /p6/home/henryg/Mail/spam /p6/home/henryg/Mail/mark /p6/home/henryg/Mail/tsf /p6/home/henryg/Mail/Savicky /p6/home/henryg/Mail/sav /p6/home/henryg/Mail/mh_etc /p6/home/henryg/Mail/jen

Voyez-vous ce qui cloche là dedans ? Premièrement c'est une très longue ligne. Et deuxièmement, allez-vous vraiment compter le chemin vers le répertoire désiré ?

Tapez bdx, qui produit la liste des répertoires et le nombre associé à chaque item :

bdx
0 /p6/home/henryg/Mail/footy
1 /p6/home/henryg/Mail/bv
2 /p6/home/henryg/Mail/personal
3 /p6/home/henryg/Mail/IBM
4 /p6/home/henryg/Mail/lg
5 /p6/home/henryg/Mail/dmo
6 /p6/home/henryg/Mail/theatre
7 /p6/home/henryg/Mail/spam
8 /p6/home/henryg/Mail/mark
9 /p6/home/henryg/Mail/tsf
10 /p6/home/henryg/Mail/Stephen
11 /p6/home/henryg/Mail/sav
12 /p6/home/henryg/Mail/mh_etc
13 /p6/home/henryg/Mail/jen

Si je veux aller à /p6/home/henryg/Mail/spam, je dois seulement taper :

p +7

[Ne vous penchez pas sur vos mails pour le moment.]

 

... on apprend mieux une chose en l'enseignant

 
 -- John Barth The Sod-Weed Factor

Et c'est ce qui m'est arrivé. J'ai écrit bdx longtemps avant que bash ne devienne plus malin. Je hais cette idée que j'aurais eu moins de problèmes en écrivant simplement :

alias bdx='builtin dirs -v'

Malgré tout, en écrivant cet article (et me réclamant d'en être le professeur), j'ai en appris beaucoup plus sur le sujet.

Conclusion

(Non dans le sens « tirer la conclusion », mais plus « arrivé à la fin »). Bien, vous savez tout. C'est de cette façon que je fais mes valises lorsque je dois voyager léger ; ainsi que les raisons pour faire ainsi.

À propos de l'auteur

Henry a passé ses journées à travailler sur ordinateurs, le plus souvent pour des fabricants d'ordinateurs ou des développeurs de logiciels. Ses premières expériences sur ordinateur incluent des reliques comme des cartes perforées, des bandes de papier et des bandes magnétiques. Son secret le plus sombre est d'avoir été payé pour faire des choses alors qu'il aurait payé ppour ça. N'en parlez pas à ses patrons.

Il utilise Linux sur son ordinateur personnel depuis que la famille a reçu son premier PC en 1996. En ce temps là, quand la famille partageait le PC, il était configuré en dual boot Windows/Slackware. Maintenant que chaque membre de la famille possède son propre PC, Henry survit dans un monde purement Linux.

Il habite dans les faubourgs de Melbourne en Australie.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.