Git et la Console - partie 2

Avoir l'air cool en parlant aux machines


Initiation à la ligne de commande

Série « Git et la Console »

Cet article est le deuxième d'une série dédiée à l'apprentissage de Git en ligne de commande.

Si l'article précédent était consacré à un tour d'horizon des notions liées aux Version Control Systems ainsi qu'à l'installation de Git, celui-ci est l'occasion de faire vos premiers pas avec la ligne de commande grâce à Windows Terminal et la découverte des principales commandes Bash.

Les autres chapitres sortiront progressivement :

  1. Git, un VCS décentralisé
  2. Initiation à la ligne de commande
  3. Les bases du versionnement avec Git
  4. Manipuler l'historique, les branches et les tags
  5. Fusionner des versions et résoudre les conflits
  6. Communiquer avec les dépôts distants
  7. Travailler à plusieurs efficacement
  8. Conclusion et au-delà

Sommaire

  1. Les interfaces en ligne de commande
  2. Le terminal Git Bash
  3. Un meilleur terminal : Windows Terminal
  4. Intégrer Git Bash à Windows Terminal
  5. Comprendre la console : l'invite de commande
  6. Découverte des principales commandes bash
    1. Changer de répertoire avec cd
    2. Lister le contenu d'un répertoire avec ls
    3. Créer un fichier avec touch
    4. Créer un fichier avec cat
    5. Créer un dossier avec mkdir
    6. Renommer ou déplacer un fichier ou un dossier avec mv
    7. Copier un fichier ou un dossier avec cp
    8. Supprimer un fichier avec rm
    9. Supprimer un dossier vide avec rmdir
    10. Supprimer un dossier non vide avec rm -rf
  7. Éditer des fichiers avec Vim
  8. Quelques astuces supplémentaires
  9. Configurer votre installation de Git

1 - Les interfaces en ligne de commande

En informatique, on distingue les interfaces graphiques (ou GUI pour Graphical User Interface) des interfaces en ligne de commande (ou CLI pour Command Line Interface).

Parce que nous sommes habitués à utiliser chaque jour des interfaces graphiques reposant notamment sur les possibilités offertes par la souris ainsi que par les concepts de fenêtres, boutons, liens et autres éléments cliquables, on remarque en un clin d'oeil ce qui distingue les interfaces en ligne de commande : elles ne gèrent pas la souris. Donc ne proposent aucune interaction au clic ni au tap sur un écran tactile, pas non plus de glisser-déposer, pas d'images, pas d'éléments graphiques. Tout se fait en lisant et en tapant du texte. Tout se fait avec le clavier.

Un exemple d'interface en ligne de commande
Malgré l'absence de souris, certaines interfaces en ligne de commande sont originales et colorées

Plus précisément, une interface en ligne de commande se manipule en tapant au clavier des commandes. Ces commandes correspondent en fait à des programmes déjà installés sur la machine, que l'interpréteur de commandes va trouver et exécuter pour nous. En installant de nouveaux programmes on peut donc augmenter la liste de commandes que notre machine sait interpréter. En quelques sortes, ces commandes correspondent au vocabulaire utilisé par votre machine.

Attends, c'est quoi un interpréteur de commandes ?

Il est lui-même un programme installé sur votre machine. Son boulot, c'est de comprendre les commandes que vous lui envoyez, d'effectuer les tâches demandées et de vous renvoyer un résultat. Il faut comprendre que l'interpréteur ne connait pas les instructions détaillées nécessaires à l'exécution de chaque commande qu'il accepte. A la place, il va établir la correspondance entre les commandes que vous entrez et les autres programmes installés sur votre machine. Si vous entrez une commande qui correspond à un programme que l'interpréteur connait, alors il lui transmet la commande. Et le programme concerné se charge de l'exécution de celle-ci, puis transmet son résultat à l'interpréteur, qui nous le renvoie en retour.

On utilise très souvent le terme shell pour désigner l'interpréteur de commandes lui-même. Je vous invite toutefois à lire la page Wikipédia pour saisir la nuance entre les deux (en résumé : un interpréteur de commandes est un shell, mais un shell n'est pas nécessairement un interpréteur de commandes).

Sur Windows, PowerShell est l'interpréteur de commandes par défaut le plus utilisé. L'autre, plus ancien, étant cmd.exe. Bash est quant à lui le plus utilisé sur Linux. Au sein de MacOS, c'est zsh, également utilisé par certaines distributions Linux, qui est désormais l'interpéteur par défaut.

Okay, et la console dans tout ça c'est quoi ?

La console, qu'on appelle également terminal, est l'interface que vous utilisez pour communiquer avec l'interpréteur de commandes. Il s'agit le plus souvent d'une application constituée d'une simple fenêtre affichant du texte, vous permettant à la fois de saisir vos commandes et de lire leur résultat.

Historiquement, il existe des différences entre les notions de console et de terminal, datant des débuts de l'informatique. De nos jours et au sein d'un système d'exploitation actuel, ces différences sont si minimes que les deux termes sont la plupart du temps utilisés comme des synonymes. Je ne dérogerai pas à cet usage ici et continuerai à utiliser l'un ou l'autre terme pour définir la même chose, à savoir l'application que l'on ouvre pour communiquer avec un interpréteur de commandes.

Sur Windows, le terminal par défaut est conhost.exe. Que vous utilisiez Powershell, cmd.exe ou un WSL, c'est lui qui transmet vos commandes à l'interpréteur puis affiche le résultat. S'il fonctionne bien, le moins qu'on puisse dire est que conhost est un peu... minimaliste. Voire rétro. Il est difficile de continuer à l'utiliser une fois que l'on a testé les alternatives modernes, pleines de fonctionnalités qui rendent beaucoup plus agréable l'environnement en ligne de commande.

Schéma du fonctionnement de l'environnement en ligne de commande
Schéma simplifié du fonctionnement d'un environnement en ligne de commande : l'utilisateur saisit des commandes dans le terminal, qui les transmet à l'interpréteur de commandes, lui même transmettant aux programmes concernés. Le parcours s'effectue ensuite dans sens inverse pour faire parvenir la réponse du programme jusqu'au terminal qui pourra l'afficher à l'écran.

2 - Le terminal Git Bash

Il est plus courant d’utiliser Git avec Bash, d’où la présence de Git Bash, fourni avec l’installation de Git pour Windows. Git Bash est en fait une surcouche à MinTTY, un émulateur de terminal Linux pour Windows, permettant d’utiliser l'interpréteur de commandes Bash avec la plupart des commandes principales de ce dernier. Git Bash est donc le choix de terminal par défaut à préférer pour utiliser Git sur Windows, bien qu’il existe plein d’alternatives.

L'avantage pour nous, c'est que Git Bash est livré avec Git. Et comme nous venons d'installer Git dans le module précédent, Git Bash est déjà sur votre machine, prêt à l'emploi !

Git Bash est déjà installé sur notre machine
Livré avec Git pour Windows, Git Bash est déjà prêt à servir

On a donc un terminal :

  • Fourni à l'installation de Git
  • Dédié à l'utilisation de ce dernier
  • Qui permet d'utiliser Bash avec ses commandes principales

Ce sont des avantages intéressants, mais il en manque. Quand on compare les deux, on constate vite que conhost.exe, le terminal par défaut de Windows, n'a pas grand chose à envier à Git Bash en dehors de la possibilité d'utiliser Bash lui-même. C'est sobre, presque austère, l'expérience utilisateur est très limitée...

Aperçu de Git Bash
Git Bash, en compétition avec conhost.exe pour le titre de terminal le moins joli du monde

Il existe des terminaux bien plus modernes, certains livrés avec leur propre version de Bash. Et d'autres, encore plus intéressants, qui vont nous permettre d'utiliser la version de Bash fournie par Git Bash, tout en profitant d'une interface améliorée et de fonctionnalités avancées. C'est le cas de Windows Terminal, que je vais vous proposer d'installer et de configurer dans les deux prochaines parties.

Précisons que vous pourriez dès à présent passer à la partie 5 et suivre la suite du module ainsi que tous les suivants en utilisant Git Bash. C'est un terminal parfaitement fonctionnel pour l'usage de Git ainsi que du devops habituel en dev web. Toutes les commandes que je vais vous montrer fonctionnent dedans. Je vous recommande cependant Windows Terminal car il permet de gagner énormément en confort d'utilisation au quotidien.

3 - Un meilleur terminal : Windows Terminal

Windows Terminal est un terminal moderne : la première release date de 2019. Et ça se voit en un clin d'œil, tout comme ça se sent très vite à l'utilisation.

Résumons rapidement ses avantages :

  • Développé par Microsoft
  • Open-source (le code est sur Github)
  • Mis à jour fréquemment, il évolue très vite
  • Permet d'utiliser plusieurs interpréteurs de commandes dans le même terminal
  • Plein de fonctionnalités avancées : onglets, panneaux, menus, raccourcis, personnalisation...
  • Facile à installer et à configurer
  • Bien documenté
Aperçu de Windows Terminal
Windows Terminal, le terminal du 21e siècle

Très facile, l'installation de Windows Terminal se fait via le Microsoft Store.

Une fois le terminal lancé, la configuration se fait en éditant un fichier settings.json que l'on peut ouvrir en cliquant sur "Paramètres" dans le menu de l'application. Nous allons devoir faire quelques modifications à ce fichier afin d'intégrer Git Bash à Windows Terminal.

Accès aux paramètres de Windows Terminal
Ouvrir le fichier de paramètres de Windows Terminal

4 - Intégrer Git Bash à Windows Terminal

Le fichier settings.json de Windows Terminal contient trois sections intéressantes :

  • "profiles" : les profils sont des configurations personnalisables pour Windows Terminal. Chaque profil a notamment la possibilité de cibler un interpréteur de commandes particulier. Il est ensuite possible d'ouvrir les profils dans des onglets distincts de l'application. Il est possible de créer, modifier et supprimer plusieurs profils.
  • "schemes" : dans cette partie vous pouvez créer, modifier et supprimer plusieurs modèles de couleurs afin de personnaliser les couleurs utilisées par le terminal. Il est possible d'appliquer un modèle de couleur différent à chaque profil. Vous pouvez trouver des modèles de couleurs existants sur ce site.
  • "actions" : cette partie vous permet de créer, modifier et supprimer des actions utilisables à l'aide de raccourcis claviers personnalisables. Nous n'utiliserons pas les actions dans ce tuto, mais je vous invite à vous y intéresser à l'occasion.

Et donc si j'ai bien suivi, pour intégrer Git Bash à Terminal il va falloir qu'on crée un profil ?

Tout juste. La personnalisation d'un profil peut demander du temps, mais afin d'aller au plus simple ici je vais vous recommander la méthode suivante :

  1. Créez un profil minimaliste pour Git Bash, avec seulement les options nécessaires :
    • "name" : Le nom que vous voulez donner à votre profil.
    • "icon" : Une icône à associer à votre profil (vous pourrez trouver celle de Git Bash dans le dossier d'installation de Git).
    • "commandline" : La commande exécutée pour appeler l'interpréteur de commandes de votre choix. C'est ici que vous ciblez l'exécutable Bash de Git Bash.
    • "guid" : Un identifiant unique pour le profil. Vous pouvez en générer un nouveau en ouvrant un profil PowerShell dans un onglet de Terminal et en entrant la commande suivante : [guid]::NewGuid()
  2. Utilisez la partie "profiles"."default" pour personnaliser l'apparence par défaut de Terminal : choix de la police, du modèle de couleurs, de la transparence, d'une image d'arrière-plan, etc. N'hésitez pas à vous référer à la documentation pour connaître en détail toutes les possibilités.
Générer un guid avec Powershell
On peut générer un guid facilement avec Powershell

A ce stade, vous devriez obtenir une configuration des profils ressemblant plus ou moins à ceci :


"profiles": {
    "defaults":
    {
        // Put settings her e that you want to apply to all profiles.
        "closeOnExit":false,
        "colorScheme":"Masta",
        "cursorColor":"#FFFFFF",
        "cursorShape":"bar",
        "fontFace":"Fira Code",
        "fontSize":12,
        "historySize":9001,
        "padding":"0, 0, 0, 0",
        "snapOnInput":true,
        "useAcrylic":true,
        "acrylicOpacity":0.75,
        "startingDirectory" : "C:/wamp64/www",
        "backgroundImage":"C:/Users/matth/OneDrive/Images/Wallpapers/1760900.jpg",
        "backgroundImageOpacity":0.1
    },
    "list":
    [
        {
            "guid": "{00000000-0000-0000-ba54-000000000002}",
            "commandline": "%PROGRAMFILES%/git/usr/bin/bash.exe -i -l",
            "icon": "%PROGRAMFILES%/Git/mingw64/share/git/git-for-windows.ico",
            "name" : "Git Bash"
        },
        {
            // Make changes here to the powershell.exe profile.
            "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
            "name": "Windows PowerShell",
            "commandline": "powershell.exe",
            "hidden": false
        },
        {
            // Make changes here to the cmd.exe profile.
            "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
            "name": "Command Prompt",
            "commandline": "cmd.exe",
            "hidden": false
        },
        {
            "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
            "hidden": false,
            "name": "Azure Cloud Shell",
            "source": "Windows.Terminal.Azure"
        }
    ]
},

Vous pourrez ensuite librement personnaliser davantage d'options pour chaque profil afin de les distinguer.

Une fois cette configuration effectuée, vous pouvez enregistrer le fichier. Terminal vous propose maintenant la possibilité de lancer le profil Git Bash dans un nouvel onglet.

Vous pouvez définir le profil par défaut en changeant l'option "defaultProfile" et en lui attribuant comme valeur le guid généré pour votre profil. Ainsi chaque fois que vous lancerez Terminal, c'est un onglet Git Bash qui s'ouvrira par défaut.

Git Bash est maintenant intégré à Windows Terminal
Git Bash est maintenant intégré à Windows Terminal

5 - Comprendre la console : l'invite de commande

L'invite de commande, aussi appelée prompt, est un texte affiché au début (ou au-dessus) de la ligne permettant de taper une commande dans un terminal. Elle donne en général des informations utiles.

Avec Git Bash, sa syntaxe est la suivante :

[utilisateur]@[machine] MSYS [chemin]
L'invite de commande de Git Bash
L'invite de commande de Git Bash

Sur la capture d'écran ci-dessus, l'utilisateur est matth, le nom de la machine est MASTA-AMD et le chemin est ~.

Le chemin est l'information la plus importante parmi celles fournies par l'invite de commande. Il est important de comprendre que la console permettant de naviguer au sein de l'arborescence de votre système de fichiers, elle est à l'image d'une fenêtre de l'explorateur de fichiers toujours "située" dans un seul dossier à la fois. Ce fameux chemin nous informe donc sur notre emplacement actuel. A tout moment, il est possible d'exécuter des commmandes dans le répertoire actuel, ou bien de changer de répertoire (ce qui se fait également en entrant une commande).

Ici, ~ est un raccourci pointant vers votre dossier utilisateur. Pour moi il s'agit de C:\Users\matth\. La console est donc, pour moi, actuellement "située dans" mon dossier utilisateur.

Si vous avez bien compris que la console va vous servir à vous déplacer sur votre machine ET à entrer des commandes, vous êtes prêts pour la suite : la découverte des principales commandes bash.

6 - Découverte des principales commandes bash

Liste des commandes présentées

  1. Changer de répertoire avec cd
  2. Lister le contenu d'un répertoire avec ls
  3. Créer un fichier avec touch
  4. Créer un fichier avec cat
  5. Créer un dossier avec mkdir
  6. Renommer ou déplacer un fichier ou un dossier avec mv
  7. Copier un fichier ou un dossier avec cp
  8. Supprimer un fichier avec rm
  9. Supprimer un dossier vide avec rmdir
  10. Supprimer un dossier non vide avec rm -rf

Changer de répertoire avec cd

Syntaxe :

cd [chemin]

La commande cd est la plus importante de toutes : elle vous permet de vous déplacer sur votre machine. Sans elle, on serait bloqué dans le même dossier et on ne pourrait pas faire grand chose. Très simple à utiliser, il suffit de lui passer en paramètre le chemin du dossier que l'on cherche à atteindre.

Ce chemin peut être au choix :

  • Absolu : c'est à dire qu'il part de la racine du disque dur (/c/ dans Git Bash)
  • Relatif : c'est à dire qu'il part de l'emplacement actuel

Par exemple, pour se déplacer dans le dossier Program Files à l'aide d'un chemin absolu, on utilisera la commande suivante :

cd "/c/Program Files"

Notez qu'on entoure le chemin de guillemets dès lors que celui-ci contient des espaces.

Autre exemple, pour se déplacer dans le dossier d'installation de Git en partant de l'emplacement actuel, c'est à dire du dossier Program Files, et donc à l'aide d'un chemin relatif, on utilisera la commande suivante :

cd Git

Si l'on veut revenir dans le dossier Program Files, on peut utiliser le raccourci .. qui permet d'atteindre le dossier parent peu importe où l'on se trouve :

cd ..

Enfin, si l'on veut revenir dans notre dossier utilisateur, on pourra utiliser le raccourci ~ que nous avions déjà aperçu :

cd ~
Changer de répertoire avec la commande cd
Notez le chemin affiché dans l'invite de commande qui change à chaque fois qu'on se déplace

Lister le contenu d'un répertoire avec ls

Syntaxe :

ls [-options] [chemin]

Ici comme avec cd, on pourra passer un chemin en paramètre de la commande. Cependant, avec ls le chemin est optionnel : si vous ne le précisez pas, la commande affichera le contenu du répertoire courant.

Au passage, les règles d'écriture du chemin sont les mêmes que pour la commande cd. Elles s'appliqueront également pour toutes les commandes que nous verrons qui utilisent un chemin comme paramètre.

Une autre différence par rapport à cd, c'est qu'on va pouvoir passer d'autres paramètres à la commande : des options. Il en existe une multitude, dont vous pouvez obtenir la liste en entrant la commande suivante :

ls --help

Cette option --help est disponible pour la majorité des commandes. Très utile quand on a oublié le nom d'une option dont on a besoin 😉

Les options de ls que je vous recommande sont les suivantes :

  • -l : affiche une liste détaillée, plus lisible et apportant plus d'informations
  • -a : affiche tous les fichiers et dossiers y compris ceux cachés
  • -h : affiche des tailles en Mo, Ko, etc, plutôt qu'en octets

Il est possible de passer les trois options séparément en paramètre, comme ceci :

ls -l -a -h [chemin]

Ou bien, plus rapide, les trois d'un coup comme ceci :

ls -lah [chemin]
Afficher le contenu d'un répertoire avec ls
Affichage du contenu du répertoire courant. Notez la présence des raccourcis .. et . Ce dernier, dont nous n'avions pas encore parlé, nous sera peu utile : c'est un raccourci vers le répertoire courant. Autrement dit un raccourci pour aller où vous êtes déjà.

Créer un fichier avec touch

Syntaxe :

touch [chemin]

Très simple à utiliser, la commande crée un fichier vide portant le nom spécifié à l'emplacement spécifié.

Par exemple pour créer un fichier nommé fichier vide.txt dans le répertoire courant :

touch "fichier vide.txt"

Où pour créer un fichier nommé test à la racine du disque dur (en utilisant un chemin absolu) :

touch /c/test

Notez qu'il est possible de créer un fichier avec ou sans l'extension de votre choix. Une extension de fichier n'est, après tout, que la fin d'un nom de fichier, elle fait partie de ce dernier. A vous donc d'en inclure une ou non. Par exemple, pour créer un fichier HTML on pourrait faire :

touch index.html

Le fichier sera de toute façon créé vide. C'est ce que nous écrirons à l'intérieur qui en fera un vrai fichier HTML.

Créer un fichier avec cat

Syntaxe :

cat > [chemin]

Méthode alternative à touch, la différence est qu'avec cat nous allons directement pouvoir saisir le contenu de notre fichier depuis la console.

En effet après avoir entré la commande, l'invite de commande ne réapparaît pas. C'est parce que l'exécution de la commande cat n'est pas terminée. Pourtant, vous pouvez saisir du texte. Mais pas de commande. Tout ce que vous tapez là sera écrit dans le fichier que vous souhaitez créer. Lorsque vous avez terminé d'écrire, il faut utiliser le raccourci clavier CTRL+D pour valider, ce qui créera votre fichier et terminera l'exécution de la commande. Vous pouvez à la place utiliser CTRL+C, ce qui annulera votre saisie (le fichier sera quand même créé, mais vide).

Par exemple si l'on voulait créer un fichier nommé nouveau-fichier dans le répertoire parent, on pourrait utiliser le raccourci .. :

cat > ../nouveau-fichier

Si l'on saisit le texte "Hello World", ce texte sera inscrit dans notre fichier.

Créer un fichier avec touch ou cat
Exemples de créations de fichiers avec les commandes touch et cat. On vérifie ensuite la présence des fichiers grâce à ls.

Créer un dossier avec mkdir

Syntaxe :

mkdir [-options] [chemin]

Rien de très particulier avec cette commande. Le chemin fonctionne comme d'habitude, c'est à dire que vous pouvez créer un dossier à un emplacement différent de votre emplacement actuel.

Il y a une option que je vous recommande, il s'agit de -p. Elle permet de créer l'ensemble des dossiers du chemin s'ils n'existe pas. Ce qui vous permet de créer des dossiers "sur plusieurs niveaux".

Par exemple, en entrant la commande suivante :

mkdir -p sous-dossier-1/sous-dossier-2

Si sous-dossier-1 n'existe pas déjà dans le répertoire courant, il sera créé. Ensuite, sous-dossier-2 sera créé à l'intérieur de sous-dossier-1

Créer un dossier avec mkdir
Créations de dossiers avec mkdir et vérification de leur présence avec ls.

Renommer ou déplacer un fichier ou un dossier avec mv

Syntaxe :

mv [-options] [ancien-chemin] [nouveau-chemin]

Très pratique, la commande mv permet de déplacer aussi bien un fichier qu'un dossier. Le nouveau chemin que vous passez en paramètre indique le nouvel emplacement et le nouveau nom du fichier ou dossier concerné. Ainsi, il est possible de simplement renommer un fichier sans changer son emplacement.

Par exemple, si l'on voulait renommer fichier.txt en fichier-renommé.txt, il suffit d'entrer la commande suivante :

mv fichier.txt fichier-renommé.txt

Si, ensuite, on voulait déplacer le fichier fichier-renommé.txt dans le dossier parent, on pourrait utiliser la commande suivante :

mv fichier-renommé.txt ../fichier-renommé.txt
Renommer et déplacer un fichier avec mv
Exemple de renommage et de déplacement d'un fichier avec la commande mv.

Pour information, il existe plusieurs options pour la commande mv, essentiellement liées à la gestion de conflits (quand vous essayez de déplacer un fichier ou dossier à un emplacement qui contient déjà un fichier ou dossier). Comme d'habitude, je vous invite à regarder ces options de plus près en affichant l'aide de la commande :

mv --help

Copier un fichier ou un dossier avec cp

Syntaxe :

cp [-options] [chemin-source] [chemin-copie]

Cette commande fonctionne de façon similaire à mv. Cependant, deux options sont utiles :

  • -r : indispensable si vous voulez pouvoir copier des dossiers
  • -u : si jamais le fichier cible existe déjà, il ne sera remplacé par une copie du fichier source que si ce dernier est plus récent

Exemple de copie dans le répertoire courant du fichier fichier-renommé.txt (précédemment déplacé dans le répertoire parent) :

Copier un fichier avec cp
Exemple de copie d'un fichier avec cp et vérification de la présence du fichier copié avec ls.

Pour copier le dossier sous-dossier-1 il faudrait utiliser l'option -r :

cp -r sous-dossier-1 sous-dossier-1-copie

On pourra avec ls vérifier que le contenu du dossier a également été copié. C'est le but de l'option -r : effectuer une copie récursive du dossier, son contenu, tous ses sous-dossiers et tous leurs contenus.

Copier un dossier avec cp
Exemple de copie d'un dossier avec cp et vérification de la présence du dossier copié et de son contenu avec ls.

Supprimer un fichier avec rm

Syntaxe :

rm [-options] [chemin]

L'option -i permet de demander une confirmation avant la suppression. Tapez "y" ou "yes" puis Entrée pour valider. Si vous n'utilisez pas l'option -i, le fichier spécifié sera instantanément supprimé.

⚠️ Attention : les fichiers supprimés avec rm ne vont pas dans la corbeille de Windows, ils disparaissent !

A titre d'exemple, si l'on veut supprimer le fichier fichier vide.txt avec une demande de confirmation, on entrera la commande suivante :

rm -i "fichier vide.txt"
Supprimer un fichier avec rm
Exemple de suppression d'un fichier du répertoire courant avec rm et vérification de l'absence du fichier avec ls.

Supprimer un dossier vide avec rmdir

Syntaxe :

rmdir [-options] [chemin]

Ne fonctionne que sur les dossiers vides.

L'option p permet de supprimer l'ensemble des dossiers du chemin s'ils sont vides, ce qui vous permet de supprimer des dossiers "sur plusieurs niveaux".

Par exemple, en entrant la commande suivante :

rmdir -p sous-dossier-1-copie/sous-dossier-2

D'abord, si sous-dossier-2 est vide il sera supprimé. Puis, si sous-dossier-1-copie est vide à son tour (s'il ne contenait que sous-dossier-2), il sera lui aussi supprimé.

Supprimer un dossier vide avec rmdir
Exemple de suppression de dossiers du répertoire courant avec rmdir et vérification de leur absence avec ls.

Supprimer un dossier non vide avec rm -rf

Syntaxe :

rm [-r] [-f] [chemin]

⚠️ Attention : commande très dangereuse si mal utilisée, à manier avec une extrême précaution !

L'option -r fonctionne de la même façon que pour la commande cp : elle amène la récursivité, donc la suppression de tous les sous-dossiers contenus dans le dossier ciblé... ainsi que de leurs contenus !

L'option -f quant à elle, force la suppression. C'est-à-dire qu'avec cette option, la commande ne vous demandera pas de confirmation : elle supprimera tout sans broncher.

La commande avec les deux options ensemble, à savoir rm -rf, est donc très pratique lorsque l'on veut supprimer d'un coup un dossier et tout son contenu. Mais elle peut aussi s'avérer très dangereuse si l'on se trompe dans le chemin que l'on passe en paramètre...

Pire encore : si on utilise comme chemin la racine du disque dur... à savoir / sur Linux et MacOS, et /c/ sur Windows avec Git Bash... Alors on demande à la commande d'effacer TOUS les dossiers et fichiers de notre disque dur. Et ce sans la moindre confirmation si on a utilisé l'option -f.

⚠️ J'insiste : vous l'avez compris, il n'y a rien de tel qu'un simple rm -rf / pour détruire entièrement tout un système. Autant vous dire que je ne me suis jamais amusé à essayer. Et je vous conseille très fortement de suivre mon exemple si vous ne voulez pas détruire votre système d'exploitation et perdre toutes vos données.

Un exemple de ce qu'il arrive à Ubuntu quand on entre la commande interdite

Au quotidien, si l'on fait très attention, utiliser la commande reste pratique, quand on est sûr de ce que l'on supprime. A titre d'exemple, nous pourrions supprimer le dossier sous-dossier-1 et tout son contenu, en entrant simplement :

rm -rf sous-dossier-1
Supprimer un dossier non vide avec rm -rf
Exemple de suppression d'un dossier non vide avec rm -rf, puis vérification de l'absence du dossier avec ls.

...et voilà pour la présentation des principales commandes Bash !

Il en existe bien évidemment beaucoup d'autres. Mais je vous conseille de vous entrainer déjà un peu avec ces bases là avant d'aller plus loin. Vous habituer aux quelques commandes présentées ici vous permettra dans un premier temps d'être à l'aise avec la console, après quoi vous pourrez progressivement aller plus loin.

Command-line master illustration
Maintenant que vous connaissez les principales commandes Bash, votre parcours pour devenir Grand Maître de la Ligne de Commande peut commencer !

7 - Éditer des fichiers avec Vim

Vim est un éditeur de texte en ligne de commande. Une sorte de notepad pour la console. La souris n'étant pas disponible dans le terminal, Vim ne propose pas d'interface graphique, seulement une interface en ligne de commande. Pas de boutons, pas de menus... Dans Vim on fait tout avec des commandes et des raccourcis clavier.

Attends, j'en ai entendu parler de ton truc, ça a l'air super compliqué... j'ai vraiment besoin d'apprendre ça pour utiliser Git ?

Réponse courte : Non 😊

Réponse plus sérieuse : Il est vrai que Vim est réputé difficile à apprendre, et il est vrai qu'il n'est pas indispensable à l'utilisation de Git. Cependant, pour utiliser confortablement le terminal au quotidien, il vous faut être capable d'éditer rapidement des fichiers. Car c'est un besoin très fréquent, pour lequel il peut être fastidieux d'avoir sans cesse à alterner entre votre terminal et un éditeur de texte avec interface graphique. Dans la console, on a souvent besoin d'éditer rapidement de petits fichiers, par exemple des fichiers de configuration. Vous pouvez également avoir besoin d'un éditeur dans un environnement ssh ou autre environnement dépourvu d'interface graphique. Enfin, Git lui-même a parfois tendance à attendre de vous que vous utilisiez Vim et à le lancer pour vous (selon l'éditeur que vous avez configuré lors de l'installation à la fin du module précédent). Il peut donc arriver qu'on ait besoin au minimum de savoir quitter Vim lorsqu'il est ouvert, ce qui n'est pas si intuitif que ça.

Trapped in Vim by CommitStrip
Quitter Vim, un vrai traumatisme pour certains développeurs restés coincés dedans plusieurs jours

Pour tous ces besoins, une connaissance des bases est intéressante. Lancer et quitter l'éditeur évidemment, mais également saisir du texte et sauvegarder un fichier. A savoir les bases les plus élémentaires possibles. Le kit de survie minimum.

Si Vim vous intéresse, il existe plein de livres et autres cours en ligne qui lui sont consacrés. L'éditeur offre beaucoup de fonctionnalités à découvrir, et est réputé pour permettre d'atteindre une vitesse de travail très perfomante une fois qu'on le maîtrise bien, ce notamment grâce à ses raccourcis clavier qui ont été pensés pour être les plus logiques possibles.

Évidemment ça c'est à condition de s'y intéresser pour de vrai. Quand on ne voit que les bases, comme nous allons faire, il reste une vraie courbe d'apprentissage avant de réellement pouvoir prétendre à maîtriser l'éditeur. Je vous rassure, on s'en sort très bien en tant que développeur sans être un expert Vim.

Je vous propose donc de faire ensemble et très rapidement le tour de ces quelques notions faisant partie du "kit de survie" avec Vim.

Lancer Vim

Syntaxe :

vim [-options] [chemin]

On n'abordera pas les options de la commande Vim dans le cadre de ce tuto, mais il en existe plein. Pour l'instant, nous nous contenterons donc du plus simple :

vim [chemin]

Si le fichier correspondant au chemin existe, Vim va l'ouvrir. Sinon, il va ouvrir un fichier vierge, et se préparer à l'enregistrer à l'emplacement indiqué par le chemin au moment où vous lui direz.

Pour l'exemple, nous allons ouvrir un nouveau fichier au nom de nouveau fichier.txt :

vim "nouveau fichier.txt"
Ouvrir un nouveau fichier avec Vim : la commande permettant de lancer l'éditeur
Ouvrir un nouveau fichier avec Vim : l'éditeur une fois ouvert
Ouverture d'un nouveau fichier avec Vim

Passer en mode insertion et saisir du texte

La première chose à comprendre avec Vim est qu'il compense l'absence d'interface graphique par des modes. Les deux modes principaux sont :

  • Le mode commande : C'est le mode dans lequel Vim s'ouvre par défaut. Il permet de saisir des commandes internes à l'éditeur afin de manipuler le fichier ouvert et l'éditeur lui-même.
  • Le mode insertion : C'est le mode qui nous permet de saisir du texte dans le fichier.

On alternera donc fréquemment entre les modes commande et insertion selon nos besoins.

Le mode commande étant le mode par défaut, votre éditeur devrait actuellement être dans ce mode là. Pour passer en mode insertion il faut utiliser un raccourci clavier : la touche i.

Une fois le mode insertion activé, le texte -- INSERTION -- s'affiche en bas à gauche de l'éditeur, et un curseur de texte clignote dans l'éditeur, vous permettant de saisir le contenu de votre fichier.

Passer en mode insertion avec Vim
Le mode insertion de Vim

Quitter le mode insertion, sauvegarder le fichier et quitter Vim

Pour quitter le mode insertion rien de plus facile : on utilise la touche Echap.

Nous sommes donc de retour dans le mode commande. Nous pouvons maintenant entrer la commande permettant de sauvegarder le fichier : :w. Si le fichier existe déjà et doit être remplacé, Vim voudra une confirmation de notre part, ce qu'on peut lui indiquer en plaçant un point d'exclamation à la fin de la commande, comme ceci : :w!

Pour quitter Vim il faut utiliser la commande :q. Si vous voulez quitter sans enregistrer vos modifications, Vim voudra également une confirmation de votre part, ce que vous pouvez lui indiquer toujours en plaçant un point d'exclamation à la fin de la commande : :q!

Si jamais vous voulez sauvegarder et quitter, vous pouvez utiliser les deux commandes à la fois, comme ceci : :wq. Avec bien évidemment l'équivalent :wq! pour confirmer le remplacement du fichier si nécessaire.

Enregistrer le fichier et quitter Vim
La commande que tant ont cherché...

Et c'est tout pour les bases rudimentaires de Vim. Il y aurait bien plus à découvrir mais je laisse ça à votre curiosité. Le module d'aujourd'hui est déjà très long et Vim n'est pas le sujet de ce tuto.

Cependant avec ce qu'on vient de voir vous connaissez l'essentiel pour que cela soit pratique au quotidien. Besoin d'éditer un fichier rapidement ? C'est fait en quelques secondes avec Vim, et sans quitter le terminal !

Il est à noter que deux autres éditeurs en ligne de commande sont très populaires : Emacs et Nano, jetez-y un oeil à l'occasion.

8 - Quelques astuces supplémentaires

Nous avons presque fini pour ajourd'hui, et ça fait déjà pas mal de nouvelles notions !

Il est temps de les compléter avec quelques astuces qui vont vous rendre l'utilisation de la console plus agréable :

  • Windows Terminal propose un menu très pratique dans lequel vous pourrez retrouver l'ensemble des fonctionnalités de l'application, accessible avec le raccourci clavier CTRL + MAJ + P
  • Vous pouvez naviguer dans l'historique des commandes saisies avec les flèches et du clavier. C'est un vrai gain de temps lorsque l'on doit entrer de nouveau une commande longue à écrire, n'hésitez pas à en abuser.
  • Chaque fois que vous tapez un chemin, vous pouvez utiliser l'auto-complétion avec la touche (tabulation). Là aussi c'est un réel gain de temps au quotidien.
  • Copier du texte depuis un terminal : CTRL + Insert
  • Coller du texte dans un terminal : MAJ + Insert
  • Annuler une commande en cours (qui prend du temps) : CTRL + C
  • Obtenir de l'aide sur une commande : [commande] --help
  • Effacer les résultats des commandes précédentes : clear
  • Entrer deux commandes (ou plus) à la suite : [commande1] && [commande2] && [...]
  • Écrire le résultat d'une commande dans un fichier : [commande] > [chemin]

Prenez le temps de vous exercer et de vous familiariser avec tout ceci, vous verrez que votre productivité et votre confort vous en remercieront !

Definitely not lazy par CommitStrip
La recherche du gain de temps a parfois ses limites, CommitStrip l'a bien compris...

9 - Configurer votre installation de Git

Dernière étape pour aujourd'hui, histoire de nous recentrer un peu sur notre sujet initial : maintenant que nous savons utiliser la console, nous allons pouvoir l'utiliser pour configurer Git. Rassurez-vous, c'est très simple : il faut entrer deux commandes.

Le but de ces deux commandes est d'indiquer à Git votre nom et votre adresse email. Ces informations seront utilisées par Git pour signer vos commits c'est à dire votre travail. Ce sont ces informations qui permettront aux autres développeurs du projet de savoir que vous êtes l'auteur de votre code.

Configuration de votre nom d'utilisateur (remplacez "Prénom Nom") :

git config --global user.name "Prénom Nom"

Configuration de votre nom d'utilisateur (remplacez prenom.nom@email.com) :

git config --global user.email prenom.nom@email.com

Si jamais vous avez un compte Github, Bitbucket ou Gitlab, il est recommandé d'indiquer à Git les mêmes nom d'utilisateur et mot de passe que sur votre compte.

Grâce à l'option --global cette configuration est valable pour l'ensemble de votre machine (donc à faire une seule fois par installation de Git). Il est cependant possible de configurer ces valeurs pour un projet Git spécifique, en entrant les mêmes commandes sans l'option --global, dans le dossier du projet.

Configuration de Git
Configuration de Git en ligne de commande

Et voilà pour aujourd'hui !

Dans le module suivant, nous pourrons enfin aborder la pratique avec Git en créant notre premier dépôt et nos premiers commits. D'ici là, prenez le temps de vous familiariser avec la console.

J'espère que tout ceci vous aidera. N'hésitez pas à me signaler les erreurs, incohérences et/ou typos qui pourraient rester dans l'article, il est long donc je n'ai peut-être pas tout vu. Merci 😊