Chap 4 Commande Linux GNU PDF
Document Details
Uploaded by MultiPurposeRiemann9946
2020
Mohamed Belhassen
Tags
Summary
This document is a set of notes on Linux commands and concepts, likely for a university course. The notes cover topics such as working with the command line, managing files, and controlling text streams with filters. The author is Mohamed Belhassen. .
Full Transcript
Présenté par : Mohamed Belhassen 2019-2020 Mohamed Belhassen (2019-2020) 1 103.1 Travailler en ligne de commande (Weight 4) 103.2 Contrôler des flux de texte à l'aide des filtres (Weight 3) 103.3 Effectuer la gestion de base des fichiers (Weight 4) ...
Présenté par : Mohamed Belhassen 2019-2020 Mohamed Belhassen (2019-2020) 1 103.1 Travailler en ligne de commande (Weight 4) 103.2 Contrôler des flux de texte à l'aide des filtres (Weight 3) 103.3 Effectuer la gestion de base des fichiers (Weight 4) 103.4 Utilisation des flux, des tubes (pipes) et des redirections (Weight 5) 103.5 Création, surveillance et destruction de processus (Weight 5) 103.6 Modifier la priorité d'exécution d'un processus (Weight 3) 103.7 Recherche sur des fichiers texte avec des expressions régulières (Weight 2) 103.8 Édition de fichiers texte avec "vi" (Weight 3) Mohamed Belhassen (2019-2020) 2 Mohamed Belhassen (2019-2020) 3 Description: Les candidats doivent être capables de travailler en ligne de commande. l'utilisation du shell bash sera traité dans cet objectif. Termes, fichiers et utilitaires utilisés : ◦ bash ◦ echo ◦ env ◦ exec ◦ export ◦ pwd ◦ set ◦ unset ◦ uname ◦ history Mohamed Belhassen (2019-2020) 4 Bourne-again shell compatible avec sh, avec des fonctionnalités de ksh, csh un shell est un programme qui exécute des programmes et permet aussi de construire d'autres programmes appelés scripts. Prompt: Mohamed Belhassen (2019-2020) 5 Exécuter séquentiellement des commandes l'une après l'autre : ◦ cmd1 ; cmd2 Exécuter cmd2 si et seulement si cmd1 s'est exécutée sans erreur ◦ cmd1 && cmd2 Exécuter cmd2 si et seulement si cmd1 a renvoyé une erreur : ◦ cmd1 || cmd2 & en fin de commande permet de lancer cette commande en tâche de fond (background) ◦ firefox & Mohamed Belhassen (2019-2020) 6 $ formation="Lpi" $ echo $formation Lpi Rendre la variable visible pour les shells fils : $ export formation Afficher toutes les variables d'environnements : $ env Afficher les variables simples et les variables d'environnement : $ set Effacer une variable : $ unset formation Mohamed Belhassen (2019-2020) 7 Mohamed Belhassen (2019-2020) 8 nano test.sh Mettre dedans: #!/bin/bash echo $1 echo $2 echo $# Rendre le fichier exécutable: chmod +x test.sh Puis exécuter avec les appels suivants:./test.sh formation LPI./test.sh formation./test.sh Mohamed Belhassen (2019-2020) 9 Quote double : Permet la substitution des variables $ echo "mon repertoire est $HOME" mon repertoire de connexion est /home/belhassen Quote simple : Désactive l'interprétation des caractères spéciaux $ echo 'mon repertoire de connexion est $HOME' mon repertoire est $HOME Quotes inversées : Permet la substitution des commandes $ echo "mon repertoire courant est `pwd`" mon repertoire courant est /tmp Mohamed Belhassen (2019-2020) 10 history HISTSIZE HISTFILE Mohamed Belhassen (2019-2020) 11 To prevent recording commands in the history list, temporarily disable recording by using: ◦ set +o history To re-enable recording, use: ◦ set -o history Mohamed Belhassen (2019-2020) 12 Use the -d option with the history command to delete a command from the history list. For instance, delete command number 87 with: ◦ history -d 87 Mohamed Belhassen (2019-2020) 13 Mohamed Belhassen (2019-2020) 14 Description: Les candidats doivent être capables d'appliquer des filtres à un flux de type texte. Termes, fichiers et utilitaires utilisés : cat pr cut sed expand sort fmt split head tail od tr join unexpand nl uniq paste wc Mohamed Belhassen (2019-2020) 15 cat, less, more: Afficher le Cut: contenu Extraire sort: Trier des les lignes champs Fichier Texte tail / head: Nl: Afficher Numéroter l'enête / les lignes wc: Afficher enqueue le nombre d'octets, de mots et de lignes Mohamed Belhassen (2019-2020) 16 Affiche le contenu d'un fichier. Exemple fichier1 1 un 2 deux 3 trois $ cat fichier1 $ tac fichier1 Mohamed Belhassen (2019-2020) 17 head : Afficher le début d'un fichier (par défaut les 10 premières lignes) Exemple $ head -3 /var/log/dmesg Mohamed Belhassen (2019-2020) 18 tail : Afficher la dernière partie d'un fichier (par défaut les 10 dernières lignes) Exemples : $ tail -c20 /etc/passwd ◦ Affiche les 20 derniers caractère du fichier passwd $ tail -f /var/log/syslog Pour voir l’effet de cette commande: essayez par exemple (dans un autre terminal) d’installer / supprimer le paquet « rar »: sudo apt-get install rar sudo apt-get remove rar Mohamed Belhassen (2019-2020) 19 Permet d'afficher certains champs d'un fichier donné Exemple : $ cut -d: -f1 /etc/passwd Mohamed Belhassen (2019-2020) 20 La commande nl permet de numéroter les lignes d'un fichier texte Exemples : ◦ $ nl /etc/passwd ◦ $ ls | nl -s')' Mohamed Belhassen (2019-2020) 21 La commande sort permet de trier les lignes d'un fichier texte Options ◦ -d : Trier dans l'ordre alphabétique ◦ -n : Trier dans l'ordre numérique ◦ -r : Inverser l'ordre Exemples : ◦ $ sort /etc/passwd ◦ $ sort /etc/passwd -r ◦ trier selon le champs RSS (resident size) $ ps aux | sort -k 6 -n $ ps aux | sort -k 6 -n -r Mohamed Belhassen (2019-2020) 22 La commande wc affiche le nombre de lignes, de mots et d'octets d'un fichier Options: ◦ -c : Afficher uniquement le nombre d'octets ◦ -m : Afficher uniquement le nombre de caractères ◦ -l : Afficher uniquement le nombre de lignes ◦ -w : Affiche uniquement le nombre de mots Exemples : ◦ $ wc -l fich ◦ $ wc -w fich ◦ $wc fich Mohamed Belhassen (2019-2020) 23 paste Regrouper les lignes Fichier Texte join split Jointure Découper des lignes un fichier Mohamed Belhassen (2019-2020) 24 La commande paste permet de regrouper les lignes de différents fichiers Exemple : 1 A 2 B 3 C File 1 File 2 $ paste file1 file2 1 A 2 B 3 C Resultat Mohamed Belhassen (2019-2020) 25 $ paste -d'@' file1 file2 1@A 2@B 3@C Resultat $ paste -s file1 file2 1 2 3 A B C Resultat Mohamed Belhassen (2019-2020) 26 Fusionner les lignes de deux fichiers ayant un champ commun Exemple : 1 one 1 11 2 two 2 22 3 three 3 33 File 1 File 2 $ join -j 1 file1 file2 1 one 11 2 two 22 3 Three 33 Resultat Mohamed Belhassen (2019-2020) 27 Mohamed Belhassen (2019-2020) 28 Cette commande permet de découper un fichier en différentes parties Exemple 1: 1 one 2 two 3 three 4 Four 5 Five 6 Six File 1 split -2 file1 splitout_ ==> créer trois fichiers splitout_aa, splitout_ab, et splitout_ac Mohamed Belhassen (2019-2020) 29 Exemple 2: ◦ Soit un fichier image « PNG » de taille inférieure à 1 MB ◦ split –b 100k image.PNG splitted_image_ ==> créer des fichiers splitout_aa, splitout_ab, et splitout_ac, etc. de taille 100k (le dernier fragment sera myfile80wide.txt Générateur de texte aléatoire: https://fr.lipsum.com/ Mohamed Belhassen (2019-2020) 33 Cette commande permet de formater les paragraphes dans un fichier options : ◦ -u : Espacement uniforme. Réduire les espacements entre les mots à une espace ◦ -w : Remplir les lignes jusqu'à la largeur mentionnée (par défaut 75 colonnes) Exemple 2: ◦ Créer un fichier contenant 2 paragraphes: le premier contient un seul espace entre les mots Le 2eme contient plus qu’un espace entre les mots ◦ $ fmt -u myfile.txt Mohamed Belhassen (2019-2020) 34 La commande expand permet de convertir les tabulations d'un fichier en espaces unexpand fait le processus inverse Exemple : ◦ convertir les tabulations en 2 espaces: Soit un fichier « monfichier » contenant des tabulations $ expand -t 2 monfichier ◦ Sauvegarder le résultat de unexpand: $ expand -t 2 monfichier>resultat ◦ Afficher les tabulations qui existent dans un fichier $ cat –t monFichier Mohamed Belhassen (2019-2020) 35 Afficher le contenu d'un fichier en octal ou sous d'autres formats (decimal, hexadecimal, ASCII) option : ◦ -t type Sélectionner le format d'affichage des résultats selon le type : a : caractères littéraux c : caractères ASCII ou séquences d'échappement préfixées par BackSlash o : valeurs octales u : valeurs décimales non signées x : valeurs hexadécimales Mohamed Belhassen (2019-2020) 36 Afficher le contenu d'un fichier en octal ou sous d'autres formats (decimal, hexadecimal, ASCII) Exemples : soit un fichier texte file1 ◦ $ od -t a file1 ◦ $od -t c file1 ◦ $ od -t x1 file1 Mohamed Belhassen (2019-2020) 37 Dans Linux/Unix, la commande pr est utilisée pour préparer un fichier à imprimer en ajoutant des pieds de page, des en-têtes et le texte formaté d’une manière appropriée. La commande pr ajoute en fait 5 lignes de marge en haut et en bas de la page. La partie d’en-tête affiche la date et l’heure de la dernière modification du fichier avec le nom du fichier et le numéro de page. Mohamed Belhassen (2019-2020) 38 Exemple 1: Pour imprimer k nombre de colonnes, nous utilisons -k. Disons que nous avons un fichier qui contient 10 chiffres de 1 à 10 avec chaque numéro dans une nouvelle ligne. Mohamed Belhassen (2019-2020) 39 Maintenant, si nous voulons imprimer ce contenu en 3 colonnes, nous utiliserons la commande suivante. ◦ pr -3 abc.txt ◦ ici abc.txt est le nom du fichier. Mohamed Belhassen (2019-2020) 40 Pour supprimer les en-têtes et les pieds de page, l’option -t est utilisée. ◦ pr -t abc.txt Après avoir exécuté la commande ci-dessus, il nous donnera la sortie suivante. Mohamed Belhassen (2019-2020) 41 Pour Doubler l’entrée de pas et réduire l’encombrement on utilise l’option –d: ◦ pr -d abc.txt ◦ Après avoir exécuté la commande ci-dessus, il nous donnera la sortie suivante. Mohamed Belhassen (2019-2020) 42 Pour numéroter les lignes ce qui aide au débogage, l’option -n est utilisée. ◦ pr -n abc.txt ◦ Après avoir exécuté la commande ci-dessus, il nous donnera la sortie suivante. Mohamed Belhassen (2019-2020) 43 Pour remplacer le nom de fichier dans l'en-tête de chaque page par un texte personnalisé, on utilise la commande suivante: pr –h Texte abc.txt Au lieu d’afficher le nom du fichier, on peut écrire un texte personnalisé dans le titre Mohamed Belhassen (2019-2020) 44 Pour effectuer des conversions de caractères (exp minuscule/majuscule,...) Exemples : ◦ Convertir les minuscules en majuscules: $ cat file1 | tr 'a-z' 'A-Z' $ tr 'a-z' 'A-Z‘ < file1 OU $ cat file1 | tr '[:lower:]' '[:upper:]' ◦ la suppression des accents d'un texte : cat file1 | tr 'àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ' 'aceeeeiioouuACEEEEIIOOUU' ◦ Convertir les séquences de sauts de lignes en un seul saut de ligne (ceci supprime les lignes blanches) : cat file1 | tr -s '\n' Mohamed Belhassen (2019-2020) 45 Mohamed Belhassen (2019-2020) 46 Description : Les candidats doivent être capables d'utiliser les commandes Linux de base pour gérer les fichiers et les répertoires Termes, fichiers et utilitaires utilisés : ◦ cp tar ◦ find cpio ◦ mkdir dd ◦ mv file gzip ◦ ls gunzip ◦ rm bzip2 ◦ rmdir ◦ touch Mohamed Belhassen (2019-2020) 47 Associer à chaque objet du système de fichier un inode (The identification information for filesystem object) Un inode regroupe des informations sur l'objet du système de fichiers : localisation, date de modification, paramètres de sécurité.... Chaque système de fichier ext2 est crée avec un nombre fini d'inodes calculé selon la taille du système de fichier et d'autres options passées à la commande mke2fs plusieurs objets du système de fichiers peuvent partager le même inode: lien physique Mohamed Belhassen (2019-2020) 48 pwd : Afficher le chemin absolu du répertoire courant cd : changer de répertoire ls : lister le contenu d'un répertoire mkdir : créer un nouveau répertoire rmdir : supprimer un répertoire touch : changer les informations de date et de d'heure d'un fichier; créer un fichier vide lorsque le fichier passé en argument n'existe pas. cp : copier un fichier mv : Déplacer ou renommer un fichier rm : supprimer un fichier Mohamed Belhassen (2019-2020) 49 Besoin de manipuler plusieurs fichiers à la fois Par exemple: cas d'un développement en C et pour être sure de recompiler tous les fichiers sources Mohamed Belhassen (2019-2020) 50 Wildcards Descriptions Exemples * désigne 0 ou plusieurs caractères x* ? Désigne exactement un seul caractère x? x?? [caractère Désigne un seul caractère de la liste x[yz] s] [caractères] [!caractèr Désigne un seul caractère en dehors de la x[!yz] es] liste [caractères] [a-z] Désigne un seul caractère appartenant à x[0-9] x[a-zA- l'intervalle de caractères défini entre [ ] Z] [!a-z] Désigne un seul caractère n'appartenant pas [!a-c] à l'intervalle de caractères défini entre [ ] {frag1,fra brace expansion file_{one,two,thr g2,..} ee} Mohamed Belhassen (2019-2020) 51 Mohamed Belhassen (2019-2020) 52 Description : Les candidats doivent être capables de rediriger des flux et de les connecter dans le but de traiter efficacement ces données textuelles. Les tâches à effectuer comprennent ◦ les redirections de l'entrée standard, de la sortie standard et de la sortie standard des erreurs, ◦ connecter la sortie d'une commande à l'entrée d'une autre, ◦ utiliser la sortie d'une commande comme paramètre pour une autre commande ◦ et envoyer le résultat en même temps sur la sortie standard et dans un fichier. Termes, fichiers et utilitaires utilisés : ◦ tee ◦ xargs Mohamed Belhassen (2019-2020) 53 Les tubes Unix permettent de combiner des commandes en les utilisant comme des briques indépendamment de leur provenance Trois types d'entrées / sorties ◦ Entrée standard (stdin) : Descripteur 0 ◦ Sortie standard (stdout) : Descripteur 1 ◦ Sortie d'erreur standard (stderr) : Descripteur 2 Mohamed Belhassen (2019-2020) 54 Fonction de redirection Syntaxe Envoyer stdout vers file $ cmd > file ou $ cmd 1> file Envoyer stderr vers file $ cmd 2> file Envoyer stdout et stderr vers file $ cmd > file 2>&1 Envoyer stdout vers file1 et stderr $ cmd > file1 2>file2 vers file 2 Recevoir stdin à partie de file $cmd < file Ajouter stdout à la fin du file $ cmd >> file ou $ cmd 1>> file Envoyer stderr à la fin du file $ cmd 2>> file Envoyer stdout et stderr à la fin $ cmd >> file 2>&1 du file Mohamed Belhassen (2019-2020) 55 La sortie d'une commande devient l'entrée d'une autre. Tubes et redirections peuvent être combinées sur une ligne de commande selon les résultats qu'on veut obtenir. Pipe stdout de cmd1 vers cmd2 : ◦ $ cmd1 | cmd2 Pipe stdout et stderr de cmd1 vers cmd2. ◦ $ cmd1 2>&1 | cmd2 Afficher les 6 premières lignes du fichier /etc/passwd une fois ce fichier trié par ordre alphabétique ◦ $ sort /etc/passwd | head -6 La commande tee permet de dupliquer le flux de données en sortie : ◦ $ sort /etc/passwd | tee res1.txt | head -6 Mohamed Belhassen (2019-2020) 56 cmd1 | xargs cmd2 ◦ Permet de passer en arguments de la commande cmd2, le résultat de la commande cmd1 Exemple 1: créer les nom de dossiers passés ◦ echo 'one two three' | xargs mkdir ◦ ls one two three Nouveaux dossiers créés Exemple 2: Supprimer les dossiers passés en paramètre de echo: ◦ echo 'one two three' | xargs -t rm –r ◦ L’option –t permet d’afficher la commande ainsi exécutée Mohamed Belhassen (2019-2020) 57 Mohamed Belhassen (2019-2020) 58 Description : Les candidats doivent être capables d'effectuer une gestion de base sur les processus. Termes, fichiers et utilitaires utilisés : ◦ & ◦ bg ◦ fg ◦ jobs ◦ kill ◦ nohup ◦ ps ◦ top ◦ free ◦ uptime ◦ killall Mohamed Belhassen (2019-2020) 59 Un processus est un programme en cours d'exécution qui utilise les ressources: de la mémoire + processeur. Quelques informations relatives à un processus : ◦ PID : Process ID ◦ PPID : Parent Process ID ◦ User ID (UID) et Group ID (GID) : Ayant lancé le processus ◦ temps CPU ◦ tables de référence des fichiers ouverts Mohamed Belhassen (2019-2020) 60 Quels sont les processus exécutés par le système? Afficher tous les processus du système : ◦ # ps -A ◦ ou ps –ef Manipulations ◦ l'utilisateur belhassen exécute la commande : $ vi test ◦ Afficher les processus de l'utilisateur belhassen # ps -U belhassen ◦ Afficher les utilisateurs qui exécutent la commande vi # ps -f -C vi UID PID PPID C STIME TTY TIME CMD 1000 5229 5201 0 18:23 pts/5 00:00:00 vi test 1000 : c’est l’identifiant de l’utilisateur belhassen: cat /etc/passwd | Mohamed grep 'Belhassen 1000(2019-2020) ' 61 Afficher des informations sur l'activité du système en temps réel Quelques options interactives : ◦ h : help ◦ n : nombre de processus à afficher ◦ q : quitter ◦ r : (renice) changer le priorité d'un processus Mohamed Belhassen (2019-2020) 62 Application: ◦ Tapez Z, puis la trouche entrée colorer l’affichage ◦ Tapez r Changer la priorité du processus de la commande top à 3 Essayez de changer la priorité du processus de la commande top à -3 ou 1 ◦ Tapez n, puis 5 afficher seulement 5 processus Mohamed Belhassen (2019-2020) 63 kill [numéro-du-signal] PID Afficher une liste des noms de signaux connu : ◦ kill -l Mohamed Belhassen (2019-2020) 64 Exemple 1: ◦ Dans un premier terminal, tapez : $ gedit fichier1 ◦ Dans un 2ème terminal, chercher l’id du procesus gedit: $ ps –f –C gedit ◦ Puis exécutez la commande suivante: $ kill -9 idGeditTrouvé Autres exemples: ◦ https://www.geeksforgeeks.org/kill-command-in- linux-with-examples/ Mohamed Belhassen (2019-2020) 65 Exemple 2: ◦ Dans un premier terminal, tapez : $ gedit fichier1 Puis, dans le même terminal, tapez CTRL+Z ◦ Que remarquez vous pour la fenêtre d’édition de Gedit? Tapez maintnant, dans le même terminal: fg 1 Mohamed Belhassen (2019-2020) 66 Envoyer SIGTERM aux processus (PIDs 1000 et 1001 (changer les numéros selon vos ID de processus) ◦ $ kill 1000 1001 ◦ $ kill -15 1000 1001 ◦ $ kill -SIGTERM 1000 1001 ◦ $ kill -TERM 1000 1001 relecture des fichier de configurations ◦ kill -HUP `cat /var/run/httpd.pid` Cette commande nécessite que le service httpd soit installé (serveur web) Arrêt forcé ! ◦ kill -9 1000 1001 ou bien kill -KILL 1000 1001 Mohamed Belhassen (2019-2020) 67 Afficher les processus qui s'exécutent en arrière plan (bg) ◦ # firefox & ◦ 5788 ◦ # jobs ◦ + Running./firefox & Mohamed Belhassen (2019-2020) 68 Vous avez oublié de lancer firefox en arrière plan (bg): ◦ # firefox ◦ (vous faites ctrt z) TSTP (20) ◦ + Stopped firefox ◦ # bg CONT (18) ◦ + firefox & Envoyer un signal à des processus indiqués par leurs noms ◦ $ killall firefox Mohamed Belhassen (2019-2020) 69 Mohamed Belhassen (2019-2020) 70 Description : Les candidats doivent être capables de gérer les priorités des processus. Termes, fichiers et utilitaires utilisés : ◦ nice ◦ ps ◦ renice ◦ top Mohamed Belhassen (2019-2020) 71 top ou bien ps -l le noyau offre + temps CPU pour « hight priority process » Par défaut les processus d'un utilisateur sont créés avec la Nice Number 0. Nice Number positif --> moins de priorité Nice Number négatif --> plus de priorité Nice Number varie de -20 à 19 Un utilisateur peut lancer un processus avec un Nice Number positif SEUL root peut lancer un processus avec un Nice Number négatif Mohamed Belhassen (2019-2020) 72 Un utilisateur lance cmd avec un Nice Number +5 ◦ $nice -5 cmd1 Seul root peut lancer des processus avec un « Nice Number » négatif ◦ # nice --10 vi /etc/hosts.deny ◦ # nice -n -10 vi /etc/hosts.deny renice : Modifier la priorité d'un processus ◦ #renice -20 501 ◦ #renice -10 -u belhassen -p 501 NB: changer « belhassen » par votre nom d’utilisateur et « 501 » par l’id de votre processus à modifier Mohamed Belhassen (2019-2020) 73 Mohamed Belhassen (2019-2020) 74 Description : Les candidats doivent être capables de d’effectuer des recherches sur le contenu des fichiers selon un modèle Termes, fichiers et utilitaires utilisés : ◦ grep ◦ egrep ◦ fgrep ◦ sed Mohamed Belhassen (2019-2020) 75 Recherche (texte) sur le contenu des fichiers, selon un modèle (motif) : « les expressions régulières » regex Une expression régulières (regular expression) est un motif qui permet de décrire un ensemble de chaînes Outils : grep, egrep, sed, awk, Perl, java.. Mohamed Belhassen (2019-2020) 76 grep [options] regex [fichiers] options : ◦ -c : Afficher le nombre de lignes qui satisfait regex, pas les lignes ◦ -h : Ne pas afficher le nom des fichiers dans les résultats lorsque plusieurs fichiers sont parcourus. ◦ -i : Ignorer les différences majuscules/minuscules dans la recherche. ◦ -n : Ajouter à chaque ligne de sortie un préfixe contenant son numéro dans le fichier ◦ -v : Afficher les lignes qui ne satisfait pas regex ◦ -E : Interpréter regex comme une expression régulière étendu. egrep Mohamed Belhassen (2019-2020) 77 https://www.digitalocean.com/community/tu torials/using-grep-regular-expressions-to- search-for-text-patterns-in-linux-fr https://www.opensourceforu.com/2012/06/ beginners-guide-gnu-grep-basics/ https://ostechnix.com/the-grep-command- tutorial-with-examples-for-beginners/ https://www.cyberciti.biz/faq/howto-use- grep-command-in-linux-unix/ https://www.hostinger.com/tutorials/grep- command-in-linux-useful-examples/ Mohamed Belhassen (2019-2020) 78 Mohamed Belhassen (2019-2020) 79 Mohamed Belhassen (2019-2020) 80 Mohamed Belhassen (2019-2020) 81 https://linuxhint.com/50_sed_command_exa mples/ https://www.geeksforgeeks.org/sed- command-in-linux-unix-with-examples/ https://linuxconfig.org/learning-linux- commands-sed https://predictivehacks.com/unix-sed- command-tutorial-with-examples/ https://www.tutorialspoint.com/sed/index.ht m Mohamed Belhassen (2019-2020) 82 https://linux.goffinet.org/administration/trai tement-du-texte/editeur-de-texte-vi/ https://www.youtube.com/watch?v=S24LN5h _pac Mohamed Belhassen (2019-2020) 83