La ligne de commande Linux pour les impatient.e.s
Tags: beginners, tutorial, linux, french
Published: 2021-01-07 17:39:04

La ligne de commande Linux est un outil incroyable, elle permet d'avoir un interaction directe avec son ordinateur et propose un certain nombre de fonctionnalités qui augmentent assez vite la productivité.

Seulement, elle n'est pas nécessairement facile à prendre en main. Par défaut, vous vous retrouvez devant une fenêtre noire avec un curseur qui clignote un peu en mode années 80 ; ce n'est pas très rassurant !

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bppol621kbrimnr2n4mn.png)

Pourtant, il n'y a rien à craindre. Ce que vous voyez, c'est un *terminal* et nous allons écrire des commandes qui seront des instructions comprises par votre ordinateur. Si vous écrivez correctement les choses, votre ordinateur exécutera vos souhaits, autrement, il affichera une erreur.

> Faites attention, il est possible de faire des bêtises via la ligne de commande.  Soyez attentif.ve.s à ce que vous écrivez et tentez de toujours comprendre ce que vous tapez sur votre clavier

# Les mouvements de base

L'intérieur de votre machine Linux fonctionne comme un arbre. Il a sa racine ("root" en anglais) et s'ouvre en myriades de branches qui ont toutes un chemin ("path" en anglais) standardisé.

La première chose à faire, c'est se localiser, pour cela, il y a une commande: `pwd` ("print working directory" - afficher le dossier courant).

Écrivez ces trois lettres dans votre terminal et appuyez sur Entrée. Vous devrez avoir un résultat comme: `/home/chris` (remplacez "chris" par votre nom d'utilisateur.ice). Ceci est votre maison ("home") ou dossier utilisateur.ice.

Maintenant, bougeons ! Pour se déplacer dans l'arbre, retenez la commande `cd` ("change directory" - changer de dossier). Il faudra ajouter un instruction à cette commande pour que votre ordinateur comprenne où vous décidez de vous rendre. Linux contient par défaut quelques raccourcis:

* `/`: root, la racine de votre arbre à dossiers
* `~`: home, votre dossier utilisateur.ice
* `..`: dossier parent
* `.`: dossier courant

> Entrez `cd /`, appuyez sur entrée et ensuite `pwd`. Vous remarquerez que vous avez changé d'emplacement.

Il est aussi possible de bouger de dossier parent à dossier parent avec : `cd ../../`.

Que représentent ces `/` ? Ils sont les séparations entre les dossiers de votre arbre à dossier. Vous commencez par `/` et ensuite ajoutez un dossier, par exemple `/home` et ensuite encore un sous dossier: `/home/chris`. Et comme cela jusqu'à vous arriverez à votre destination souhaitée.

> Maintenant pour afficher le contenu des dossiers: `ls` ("list" - lister).  Essayez: `cd /` appuyez sur Entrée et puis `ls` et appuyez sur Entrée. Répétez cela avec `cd ~` et puis `ls` et comparez les résultats.

# Création de fichiers et de dossiers

Maintenant que vous savez vous déplacer, attaquons-nous à la création de dossiers.

Pour créer un fichier, nous utiliserons la commande `touch` ("toucher" en anglais) suivi du nom de fichier que nous voulons créer. Exemple : `touch test`.

> Si vous avez un soucis à ce niveau, faites: `cd ~` et puis réessayez.

Pour créer un dossier, nous utiliserons la commande `mkdir` ("make directory" - créer un dossier) suivi du nom de dossier que nous voulons créer. Exemple : `mkdir dossier_test`.

Maintenant, si vous faites `ls`, vous devrez trouver le fichier et le dossier créés.

Nous pouvons déplacer le fichier dans le dossier avec la commande `mv` ("move" - bouger en anglais) suivi de l'objet que nous voulons bouger suivi de la destination. Exemple: `mv test dossier_test`

> Trop de fautes de frappes ? Pas assez de patience ? Les terminaux Linux ont une touche magique: `Tab`. Si vous appuyez dessus, il vous proposera des fichiers ou dossier présents dans le chemin courant où vous vous trouvez.  Essayez et n'hésitez pas à appuyer plusieurs fois !

Nous pouvons aussi copier des objets grâce à la commande `cp` ("copy" - copier) suivi de l'objet et de la destination. Exemple: `cp dossier_test/test test2`.

Il est aussi possible d'effacer des fichiers avec la commande `rm` ("remove" - enlever). **Mais faites attention, les fichiers effacés ne sont pas récupérables dans la corbeille, ils sont partis pour de bon !**

> Astuce : pour renommer un fichier ou un dossier, il vous suffira de bouger (`mv`) un fichier ou dossier vers son nouveau nom. Exemple: `mv dossier_test dossier_final`.

# Que les choses sérieuses commencent !

Maintenant, vous avez une connaissance de base des mouvements grâce à la ligne de commande Linux. Nous allons plonger dans des utilités plus efficaces grâce à la ligne de commande, notamment le traitement de grands et lourds fichiers texte.

Lorsque les éditeurs de texte peuvent être lourds et lents à réagir, utiliser la ligne de commande vous permettra de trouver ce que vous chercher plus rapidement.

*Afficher un fichier*:

* `cat`: affiche le fichier. N'affiche rien si le fichier est vide. Exemple : `cat test2`.
* `head`: affiche les premières lignes du fichier. N'affiche rien si le fichier est
  vide. Exemple : `head fichier`
* `tail`: affiche les dernières lignes du fichier. N'affiche rien si le
  fichier est vide. Exemple: `tail fichier`

*Chercher un fichier*:

Pour chercher un fichier, nous utilisons une commande qui s'appelle `grep`. Qui nous permettra de fouiller le texte d'un fichier d'en extraire les résultats.

Prenons d'abord un gros texte, par exemple un version texte de *Frankenstein* de Mary Shelley (c'est dans le domaine public de nous en faites pas vous ne faites rien d'illégal). Téléchargez le avec cette commande:

```sh
wget https://archive.org/stream/Frankenstein1818Edition/frank-a5_djvu.txt -O
texte_complet.txt
```
> `wget` est une commande qui vous permet de télécharger une page web.

Attendez quelques secondes, puis vérifiez que le texte (`texte_complet.txt`) est présent en utilisant `ls`.

Pour chercher le texte, vous devrez définir le mot que vous recherchez ainsi que l'endroit où vous voulez le chercher. Ici:

```sh
grep "love" texte_complet.txt
```

Cette commande va rechercher le mot "love" ("amour") dans le texte de *Frankenstein*. Vous remarquerez que grep trouve aussi des mots comme "beloved" ou "lovely" qui ne sont pas nécessairement ce que nous voulons. Rajoutons des espaces autour de notre cible:

```sh
grep " love " texte_complet.txt
```

Ici, `grep` va rechercher toutes les occurrences de "love" mais entre deux espaces.

Il est possible de compter le nombre de résultats. Pour cela, nous allons introduire un nouveau concept: `|`.

La barre verticale ou "pipe" en anglais va permettre de transférer le résultat d'une commande vers une autre commande.

Nous allons envoyer le résultat de notre rechercher dans la commande `wc` ("word count" - compte de mots) qui va compter le nombre de résultats:

```sh
grep " love " texte_complet.txt | wc -w
```

> `-w` est une option de la commande `wc` qui affiche le nombre de mots. Ces options sont disponibles pour chaque commandes, vous pouvez les explorer avec l'option `--help`. Par exemple : `ls --help`.

Ok, tout cela est bien joli mais nous pouvons faire plus !

Prenons, la liste des 10 000 mots de passe les plus communs:

```sh
wget https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10k-most-common.txt -O liste_mdp.txt
```

Pour compter le nombre de ligne du fichier: `wc -l liste_mdp.txt`. Si tout va bien, vous verrez 10 000.

Maintenant cherchons le mot "pass" dans cette liste : `grep "pass" liste_mdp.txt`. Il y a plus de résultats que nous pouvons compter, comptons:

```sh
grep "pass" liste_mdp.txt | wc -l
```

Est-ce possible que nous ayons des doublons ? Peu probable, mais testons cela grâce à la commande `sort` ("trier" en anglais):

```sh
grep "pass" liste_mdp.txt | sort -u | wc -l
```

> Pourquoi mettons `sort` avant `wc` ? Parce que nous voulons compter le nombre de mots après qu'ils soit triés.

La dernière étape de ce tutoriel, sera de sauvegarder le résultat de notre recherche dans un fichier. Pour cela nous utiliserons les chevrons: `>` et `>>`.

Ces deux caractères nous permettent, comme la barre verticale, de rediriger le résultat d'une fonction mais cette fois-ci afin de l'écrire dans un fichier.

```sh
grep "pass" liste_mdp.txt | sort -u > resultat.txt
```

> La différence entre `>` et `>>`, c'est que `>` récriera votre fichier tandis que `>>` ajoutera le résultat à la fin du fichier ("append" en anglais). Donc si vous rajoutez des informations, utilisez plutôt `>>` au risque de perdre vos recherches précédentes.

Maintenant vous pouvez faire: `cat resultat.txt` et vous verrez le résultat de votre recherche !

# Pourquoi est-ce utile ?

Je suis bien conscient que ces quelques exemples peuvent paraître un peu abscons lorsqu'on débute. Pourtant ce genre de recherches est très courantes lorsque vous travaillez avec de volumineux fichiers comme les données de connexion sur un serveur ou bien d'importantes listes.

Maintenant vous savez :

* naviguer dans l'arbre à fichier
* afficher le contenu d'un fichier et d'un dossier
* créer, copier, effacer des fichiers et des dossiers
* télécharger des pages web
* chercher des occurrences, les compter, les trier et les sauver

**EDIT**:

Voici quelques astuces en plus proposées par dattaz sur [Twitter](https://twitter.com/dat_taz/status/1347241284533182466).

* `cd -` : retour au dossier précédent
* `man` : pour avoir le documentation des options des commandes. Example: `man cd`.
* `grep` peut compter directement les lignes avec l'option -c. Example: `grep -c " love " texte_complet.txt`.

Autre astuce `grep` l'option `-v` qui permet d'afficher toutes les lignes qui n'ont PAS le mot.

Ainsi qu'une précision : `sort` utilisé sans options va seulement trier votre liste par ordre alphabétique. C'est l'option `-u` qui vous permettra de trier ainsi que d'enlever les doublons.