Linux efficace ou les 10 commandes à connaître

La très grande majorité des cours, des tutoriels ou des livres sur Linux sont des énoncés des commandes du système avec moult détails sur la syntaxe des options…
On arrive vite à des succédanés du man avec des exemples en plus.
Si on ne connaît rien, on obtient donc une information relativement brute et si on connaît déjà la commande on retrouve les exemples et les options qu’on connait déjà. Quand on sait ce qu’on cherche, on valide ainsi la syntaxe et éventuellement le sens de la commande.
Dans la très grande majorité des cas, quand on apprend Linux, on se retrouve un peu perdu par la quantité de commandes et la quantité d’options de chacune d’elles !
Si on cherche plutôt un tutoriel pour démarrer l’apprentissage, on reste parfois sur sa faim, car soit on trouve des commandes utilisées de manière très précise, soit à l’autre extrême on retrouve toutes les manières d’utiliser les commandes de façon linéaire sans savoir s’il vaut mieux utiliser celle-ci ou celle-là.

Bref, on est confronté, comme souvent sur Internet, à l’énorme quantité d’informations qu’il faut savoir trier. 
C’est au lecteur de se faire une idée et de construire son savoir.
Et quand on travaille seul, on se pose souvent des questions qui restent sans réponse.

Si on travaille en équipe, ça relève de la technique des fourmis, celui qui a trouvé la bonne manière de faire va diffuser l’information aux collègues. Encore faut-il que ce soit effectivement la bonne manière de faire. J’ai vu de nombreux informaticiens utiliser des options qui ne faisaient pas ce qu’ils pensaient…

L’objectif de ce document est de vous exposer ma manière de faire, c’est-à-dire les commandes de base que j’utilise au quotidien dans mon travail d’administrateur système.
Ce n’est pas la meilleure manière ni la plus complète, c’est la mienne. Elle est probablement différente de celle des autres administrateurs, chacun ayant ses propres trucs.
Je vous livre ma manière d’utiliser la ligne de commande, à vous d’y piocher ce qui vous paraît pertinent.

La manière dont je travaille est le résultat d’un long processus qui a pris des années et des années. J’ai commencé à travailler sous Unix en 1988…. J’ai eu la chance de croiser beaucoup d’autres utilisateurs sous Unix ou Linux, dans mon travail quotidien comme lors d' »install parties » ou des salons.

Chacun a sa propre manière d’utiliser la ligne de commande.
Chacun a son propre jeu d’instructions, certains en utilisent beaucoup, d’autres moins. Enfin, certains qui ne veulent pas s’immerger dans Linux, en utilisent le minimum. 

Ce document s’adresse à des débutants, puisqu’on y retrouve les commandes de base et, dans la très grande majorité, dans une utilisation simple.
Mais si on veut comprendre le sens de ces commandes, ou plutôt pour quelle raison il vaut mieux utiliser une commande sous cette forme plutôt qu’une autre, il vaut mieux avoir déjà une expérience de la ligne de commande. Et c’est le sujet de ce partage : la recherche de sens.

C’est comme l’apprentissage du piano. Si votre professeur vous dit de mettre les doigts comme ça, vous le faîtes parce que vous êtes persuadé qu’il faut faire ainsi. Si vous avez déjà fait des années de piano, vous allez comprendre pour quelle raison il fallait le faire ainsi.

Lorsqu’on apprend l’informatique, on est souvent confronté à une problématique de transmission de savoir. On va vous dire que si vous ne connaissez pas une commande, il faut regarder le « man » ou bien chercher sur Internet. Les cours que j’ai eu l’occasion de donner ou de voir sur la ligne de commande, sont soit minimalistes pour les débutants qui n’ont jamais vu une console, soit un partage de syntaxe spécifiques pour des élèves avancés. Dans ce dernier cas, on arrive souvent à l’énumération des options de la commande, qui pour la plupart sont peu utiles au quotidien. On retombe facilement dans la paraphrase du « man ».
Alors, les bons professeurs, lorsqu’ils paraphrasent le man illustrent souvent leur propos avec des exemples. Sinon, ils diraient à leurs élèves : lisez la doc !
C’est d’ailleurs ce qu’on peut critiquer à l’esprit du RTFM.

Si on illustre toutes les options, on se dit que les élèves auront au moins entendu une fois dans leur vie le contenu de cette documentation et s’en rappelleront au moment opportun. C’est ce qu’on se dit tous, en imaginant qu’en lisant l’exhaustivité de cette documentation on va trouver une option magique qu’on n’avait jamais utilisée jusqu’à présent.

A mon avis, il vaut mieux se concentrer sur les bonnes options à retenir et savoir ce qu’elles font exactement plutôt que de connaître vaguement le sens de toutes les options.
Comme souvent en informatique, il faut supprimer le « vague » ou l' »à peu près » de sa manière de penser.

Certains de mes collègues en arrivant dans l’équipe m’expliquaient qu’ils utilisaient toujours rsync avec les options -trolpg. Soit !
Moi j’utilise les options -av ou -avz, les autres options sont des cas particuliers.

On est dans une situation où pour comprendre la manière de faire, il faut déjà avoir un certain bagage. Et des cours où on explique la manière de faire, je n’en connais pas. C’est très souvent en échangeant avec un autre admin qu’on se dit que sa manière d’utiliser telle commande est plus efficace que la nôtre.
Des fois à la lecture d’un article on se dit quelle « cool feature » cette option ! Et on se l’approprie.

La difficulté comme souvent dans l’apprentissage étant de transmettre le maximum d’informations sans noyer les élèves. Si on dit juste qu’il faut utiliser telle commande de cette manière, on restreint souvent très fortement les fonctionnalités de la commande.

Mais c’est mon parti pris : limiter le nombre de commandes et leurs options.

Ce qui ne veut pas dire qu’avec l’expérience, il ne faudra pas aller creuser les autres options ou les autres commandes. D’ailleurs, je remarque que la très grande majorité des administrateurs ont une connaissance encyclopédique des commandes et de leurs options. Cette connaissance, il faudra l’avoir un jour ou l’autre. Même si on utilise certaines options une fois par an !

Alors, le jeu de commandes que j’utilise au quotidien est relativement simple. C’est un compromis entre l’efficacité des commandes et ma capacité à mémoriser les syntaxes.  

Afin d’avoir une démarche rationnelle, j’ai extrait quelques statistiques de mes historiques de ligne de commande.
Les échantillons que j’ai utilisés pour extraire les commandes les plus utilisées sont les suivants :

Source de l’historiqueNombre de commandesDurée entre la première et la dernière commande de l’historique
Serveur physique Debian4 4282 ans et 6 mois
Mac OS en bash24 2122 ans et 3 mois
Mac OS en zsh35 2745 ans
VM WordPress1 0862 mois
Serveur DNS1 0302 ans et 6 mois

Top 10 des commandes de base que j’utilise

Note : j’ai pris uniquement la première commande après le prompt sans tenir compte des commandes qui suivent un pipe.

RangNombre d’occurrencesCommande
17213cd
25841ls
31916rsync
41530sudo
51166history
61032 grep
7947 rm
8843 less
9799 find
10549cat
11365man

Quelques commentaires

  1. Les commandes ci-dessus sont essentiellement des commandes d’administration système. C’est de la recherche d’information pour la réutiliser ou pour la modifier.
  2. la commande sudo provient de mes historiques de postes personnels sur lequel je travaille avec un compte utilisateur. Pour les serveurs, je travaille sous root, il n’y a donc pas de sudo. Sauf pour lancer une commande avec l’environnement spécifique à un utilisateur.
  3. Si on l’élimine la commande sudo, la commande man arrive en 10ème position !
  4. Une commande particulièrement utile qui n’apparaît pas dans cette liste est « pwd » (Print Working Directory). Comme l’invite de commande (le prompt) affiche le répertoire courant, inutile d’utiliser pwd !
  5. Les deux premières commandes cd et ls reflètent l’exploration de l’arborescence des fichiers. Il faut ajouter la commande pwd qui est implicite car affichée dans le prompt. Le triplet de commandes « cd ls pwd » est l’équivalent des explorateurs de fichiers en mode graphique. On se déplace dans les répertoires en cliquant sur le répertoire qui montre alors les fichiers qui s’y trouvent.
  6. rsync arrive en 3ème position. C’est la commande qui permet de copier un fichier ou une arborescence. Je n’utilise plus ou quasiment plus ni cp, ni scp.
  7. history est la commande qui permet d’afficher les commandes qu’on a déjà saisies. C’est l’aide mémoire de la ligne de commande, suivi très souvent de la commande grep afin de rechercher une commande en particulier. L’objectif étant de réutiliser au maximum ce qu’on a déjà fait !
  8. la commande grep apparaît ici dans le cas où elle est la première commande de la ligne. Elle correspond à des recherches de chaînes dans des fichiers et non pas derrière un pipe. En fait je l’utilise énormément derrière les pipes suite à un history, mais je n’ai pas comptabilisé ce mode d’utilisation.
  9. la commande rm (remove), pour supprimer des fichiers ou des arborescences arrive haut dans le listing. 2000 rsync pour 1000 rm, c’est le signe du nettoyage des fichiers obsolètes. Une partie du travail d’administration système consiste à déplacer ou à recopier des arborescences. Il faut ensuite supprimer les fichiers inutiles, ça relève des bonnes pratiques.

Détail des options de ls

Voici plus en détail l’utilisation que je fais de la commande ls, d’après mes historiques :

Les 2 principales options sont :

  • ls -l (long) pour avoir le détail de chaque fichier listé par ordre alphabétique
  • ls -ltr (long time reverse) pour avoir le fichier le plus récent en bas du listing. C’est la commande qui permet de connaître les fichiers « chauds », donc ceux qui bougent, dans les logs ou les répertoires de configuration par exemple.

Détail des options de rsync

Voici les options que j’utilise le plus souvent

1916rsync toutes syntaxes confondues
dont1214-av
dont161-avz
88–delete
65-P
59-n
43-c
19-u
618exécutions de quelques scripts de synchro

Le bilan pour les rsync tapés en ligne de commande font que les plus simples sont de la forme
rsync -av source destination
et les plus compliqués sont de la forme
rsync -avz –delete -P source destination
L’option -n (dry-run) permet de lancer la commande pour voir ce qu’elle ferait.
L’option -P permet de « voir » la progression du rsync
L’option -c permet de comparer les fichiers source et destination par un checksum. Par defaut rsync considère qu’un fichier est identique sur la source et la destination si la taille et la date de modification sont identiques. Avec -c on peut contrôler une arborescence suite à une intrusion ou limiter le listing des fichiers modifiés….

Les scripts de synchro utilisent principalement des exclusions et parfois l’option –numeric-ids

En voici deux exemples :

Le –numeric-ids permet de conserver les id utilisateurs et groupes lors du rsync. C’est utile pour manipuler des VM LXC depuis un host sans perturber les permissions de la VM guest qu’on vient de copier.