Qu’est-ce qu’un terminal ?

Un terminal est une interface qui permet d’interagir avec une machine (ordinateur ou serveur distant) en saisissant des commandes. Il donne accès aux fichiers, aux programmes et aux outils de développement sans passer par une interface graphique.

Pour ce cours, nous utiliserons Git Bash sous Windows (cf. section pré-requis pour installer Git for Windows si ce n’est pas déjà fait) et Terminal sous macOS ou Linux.

Découverte du terminal

Lorsque le terminal attend une commande, il affiche un prompt. Il contient généralement le nom de l’utilisateur, celui de la machine ainsi que le dossier courant.

utilisateur@machine:~/mon-projet$

Le symbole $ n’est pas une partie de la commande : il indique simplement que la commande doit être saisie après le prompt.

Dans cet exemple, l’utilisateur est alanna, le nom de la machine est ordi-alanna et le terminal est dans le dossier Documents.

:bulb: La touche tabulation (ou tab) complète souvent le nom d’un fichier ou d’une commande. Les flèches haut et bas permettent de retrouver les commandes précédentes.

Commandes de base

Identifier l’utilisateur courant

Connaître l’utilisateur courant est particulièrement utile lorsque l’on se connecte à divers serveurs et savoir quelle identité on a. Pour cela, la commande whoami (who am I) indique le nom de l’utilisateur courant.

Identifier le dossier courant

Le terminal travaille toujours depuis un dossier courant. Pour connaître ce dossier, écrire pwd (pour print work directory) dans le terminal.

pwd

Ici le terminal indique qu’il le situe dans le dossier /Users/alanna/Documents.

Lister le contenu d’un dossier

Il est souvent utile de connaître le contenu d’un dossier, sans passer par l’explorateur de fichiers. Pour cela, la commande ls permet d’en lire le contenu. La majorité des commandes shell permettent d’ajouter des options. Ces options sont préfixées par un tiret.

Dans le cas de la commande ls, deux options sont particulièrement utiles en termes d’affichage : -a affiche les fichiers cachés (ceux dont le nom commencent par un point) et -l affiche les fichiers sous forme de liste. Il est possible de les concaténer comme une seule option -al (au lieu d’ajouter deux options -a et -l).

# affiche les fichiers
ls
# affiche tous les fichiers (dont ceux cachés)
ls -a
# affiche tous les fichiers (dont ceux cachés) sous forme de liste
ls -al

ls -la affiche également les fichiers cachés et leurs informations détaillées.

drwxr-xr-x décrit le type et les permissions d’un fichier ou dossier :

  • r (read) : lire le contenu ;
  • w (write) : modifier le contenu ;
  • x (execute) : exécuter un fichier ou, pour un dossier, y entrer et accéder à son contenu ;
  • - : permission absente.
Utilisateur Permissions Signification
Propriétaire rwx lire, modifier et accéder au dossier
Groupe r-x lire et accéder au dossier, sans le modifier
Autres r-x lire et accéder au dossier, sans le modifier

Se déplacer dans les dossiers

La commande cd (change directory) permet de changer de dossier.

# se déplacer dans le dossier "nom-du-dossier"
cd nom-du-dossier
# se déplacer dans le dossier parent
cd ..
# se déplacer dans le dossier personnel
cd ~
  • Dans Git Bash, un chemin Windows s’écrit avec des /. Voici un exemple pour changer de disque.

    cd /d/Users/monutilisateur/Documents
    cd "/d/Users/monutilisateur/Documents/Documents personnels"
    

    Les guillemets permettent de gérer les chemins contenant des espaces. Dans la pratique, il est conseillé de ne pas utiliser d’espaces dans le nom des fichiers et dossiers.

  • Sous Linux et macOS, un chemin ressemble à ceci :

    cd /Users/monutilisateur/Documents/
    cd "/Users/monutilisateur/Documents/Documents personnels"
    

    Les guillemets permettent de gérer les chemins contenant des espaces. Dans la pratique, il est conseillé de ne pas utiliser d’espaces dans le nom des fichiers et dossiers.

Chemins relatifs et absolus

Un chemin relatif part du dossier courant :

exercices/notes.txt

Un chemin absolu indique l’emplacement complet du fichier.

  • Il commence généralement par une lettre de lecteur sous Windows :

    Windows : C:\Users\utilisateur\Documents\exercices\notes.txt
    
  • Il commence généralement par / sous Linux et macOS :

    Linux   : /home/utilisateur/Documents/exercices/notes.txt
    
  • Il commence généralement par / sous Linux et macOS :

    macOS   : /Users/utilisateur/Documents/exercices/notes.txt
    

:bulb: Il est recommandé d’utiliser des noms de fichiers simples, sans caractères spéciaux ni espaces. Sinon, il faut ajouter des guillemets autour du chemin vers le fichier

Créer des dossiers et des fichiers

Lors que l’on est connecté à un serveur, il est nécessaire de créer des dossiers ou des fichiers de configuration. Dans ces cas-là, on n’a pas accès à un explorateur de fichier. Il est donc nécessaire de savoir créer un dossier ou un fichier via le terminal.

Créer un dossier

La commande mkdir pour make directory permet de créer un dossier.

mkdir exercices

Créer et modifier un fichier

Pour créer un fichier vide, la commande touch permet de créer le fichier s’il n’existe pas. S’il existe déjà, elle actualise sa date de dernière modification sans modifier son contenu.

touch notes.txt
# Ouvre le fichier avec l'éditeur vi
vi notes.txt
# Ouvre le fichier avec l'éditeur vim, une version améliorée de vi
vim notes.txt
# Ouvre le fichier avec l'éditeur nano, plus simple pour débuter
nano notes.txt

La commande ouvre le fichier dans l’éditeur choisi. Si le fichier n’existe pas, l’éditeur le crée lorsqu’il est enregistré.

Installer un éditeur de texte

Pour vérifier si un éditeur est installé, il faut utiliser la commande command -v :

command -v nano
command -v vim
command -v vi

Si la commande affiche un chemin, l’éditeur est installé. Sinon, le terminal affiche généralement une erreur ou ne renvoie aucun résultat.

  • Git Bash contient généralement vi et vim.

    L’éditeur nano peut également être disponible selon la version de Git for Windows installée.

  • Sur Ubuntu ou Debian :

    sudo apt update
    sudo apt install nano vim
    

    Sur Fedora :

    sudo dnf install nano vim
    
  • Sur macOS, vi et nano sont généralement déjà installés. Via Homebrew, il est possible d’installer ou mettre à jour Vim :

    # installer Homebrew
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    # installer Vim
    brew install vim
    

Après l’installation, il suffit de vérifier que l’éditeur est bien installé.

command -v nano
command -v vim
Modifier un fichier avec vi ou vim

vi et vim sont des éditeurs modaux : le clavier ne sert pas toujours à saisir du texte.

vim notes.txt

Au démarrage, le terminal est en mode commande. Pour commencer à écrire :

  1. Appuyer sur i pour passer en mode insertion.
  2. Saisir ou modifier le texte.
  3. Appuyer sur Échap pour revenir au mode commande.
  4. Saisir :wq, puis appuyer sur Entrée pour enregistrer et quitter.

Pour quitter sans enregistrer, utiliser :q!, puis appuyer sur Entrée.

:warning: Pour débuter, nano est plus simple à prendre en main : ses commandes sont affichées en bas de l’écran.

Modifier un fichier avec nano

Pour débuter, utiliser nano :

nano notes.txt
  1. Déplacer le curseur avec les flèches.
  2. Saisir ou modifier le texte directement.
  3. Appuyer sur Ctrl + O pour enregistrer le fichier (Write Out).
  4. Appuyer sur Entrée pour confirmer le nom du fichier.
  5. Appuyer sur Ctrl + X pour quitter nano.

Dans nano, le symbole ^ signifie la touche Ctrl. Par exemple, ^X signifie Ctrl + X. En quittant nano sans enregistrer, une confirmation permet de sauvegarder ou non les modifications.

Lire le contenu d’un fichier

cat notes.txt

Pour lire un long fichier page par page, en utilisant le curseur de la souris ou le pad pour faire défiler le texte. Pour quitter l’affichage du texte, il faut appuyer sur la touche q.

less notes.txt

Copier, déplacer et supprimer

Pour manipuler des fichiers et dossiers, de nombreuses commandes sont pertinentes : cp, mv et rm.

  • La commande cp pour copy permet de copier un fichier d’un dossier vers un autre dossier.
  • La commande mv pour mv permet de déplacer un fichier d’un dossier vers un autre dossier. Il n’existe pas de commande pour renommer un fichier, pour cela on utilise la commande move.
  • Enfin, la commande rm pour remove permet de supprimer un fichier ou un dossier avec l’option -r pour itérer de manière récursive sur le dossier.
# Copie d'un fichier
cp path/to/old/folder/notes.txt path/to/old/folder/copie.txt
# Déplacement d'un fichier
mv copie.txt exercices/
# Renommage d'un fichier
mv old_name.txt new_name.txt
# Suppression d'un fichier
rm exercices/copie.txt
# Suppression d'un dossier
rm -r exercices/

:warning: Il est fortement conseillé de vérifier avec pwd et ls le fichier/dossier à supprimer avant d’exécuter la commande de suppression. En effet, la suppression est irréversible.

Utiliser l’aide

Il est normal de ne pas connaître toutes les options d’une commande. Pour cela, deux options existent :

  • utiliser l’option --help, qui affiche une aide synthétique directement dans le terminal ;
  • utiliser le manuel avec man. Il est généralement exhaustif. Pour le quitter, appuyez sur la touche q.
ls --help
man ls

Variables d’environnement

Les variables d’environnement configurent le comportement des programmes. Par exemple, PATH indique où rechercher les exécutables. Les commandes ci-dessous permettent d’afficher la valeur de la variable d’environnement.

echo $PATH

Place à la pratique

Réaliser les opérations suivantes dans un dossier de travail :

  1. Afficher le dossier courant.
  2. Créer un dossier boutique.
  3. Entrer dans ce dossier et créer fruits.txt.
  4. Ajouter une liste de fruits dans le fichier : pomme, poire et cerise.
  5. Renommer le fichier en fruits-locaux.txt.
  6. Afficher son contenu.
  7. Créer une copie nommée fruits-exotiques.txt contenant les fruits suivants : ananas, papaye, mangue et banane.
  8. Créer un sous-dossier archive et y déplacer la copie.
  9. Lister le contenu du dossier et de archive.
  10. Supprimer le fichier dans archive uniquement après avoir vérifié son chemin.