Skip to content

Le Shell

Table des matières

Origines

Le terme shell signifie « coquille » en anglais. Ce nom reflète son rôle : il sert de couche externe (d'interface) autour du noyau du système d’exploitation. L’utilisateur interagit avec le système principalement via le shell.

  • 1971 : Le premier shell, le Thompson Shell (sh), est créé par Ken Thompson pour Unix.
  • 1979 : Le Bourne Shell (sh) de Stephen Bourne le remplace et devient la norme.
  • 1989 : Bash (Bourne Again Shell) est créé par Brian Fox pour le projet GNU.

Bash est rapidement devenu le shell par défaut sur la plupart des distributions Linux.

Principe

Le shell est un interpréteur de commandes. Il s’agit d’une interface en ligne de commande qui permet d’interagir directement avec le système d’exploitation pour exécuter des commandes, manipuler des fichiers, et automatiser des tâches à travers des scripts.

Exemples de shells

  • sh (Bourne Shell) : Le shell Unix original, simple et présent partout.
  • Bash (Bourne Again SHell) : Le plus célèbre, par défaut sur la majorité des systèmes Linux et sur macOS. Il est riche en fonctionnalités et compatible avec sh.
  • Zsh (Z Shell) : Un shell très populaire offrant des fonctionnalités avancées comme l’autocomplétion améliorée, la correction automatique et une personnalisation poussée.
  • Fish (Friendly Interactive SHell) : Conçu pour être facile à utiliser, avec une syntaxe claire et des fonctionnalités prêtes à l'emploi.

Pourquoi utiliser un shell ?

Le shell offre une interface rapide, légère et puissante pour :

  • exécuter des commandes ;
  • automatiser des tâches répétitives via des scripts ;
  • gérer des fichiers, des processus et des utilisateurs ;
  • personnaliser son environnement de travail.

Le Terminal

Le terminal (ou plus précisément, l'émulateur de terminal) est l'application graphique qui nous donne accès au shell.

Il ne faut pas les confondre :

  • Terminal ➜ Interface d'affichage

    • Rôle : Gère l'affichage et la saisie de texte.
    • Exemples : GNOME Terminal, Konsole, Alacritty, Kitty.
  • Shell ➜ Interpréteur de commandes

    • Rôle : Interprète et exécute les commandes que vous tapez dans le terminal.
    • Exemples : Bash, Zsh, Fish.

Exemples de terminaux

  • Gnome Terminal : Le terminal par défaut de l'environnement GNOME.
  • Kitty : Un terminal moderne et très performant, utilisant le GPU pour l'affichage. Il est écrit en C et Go.
  • Konsole : Le terminal par défaut de l'environnement KDE.
  • Alacritty : Un terminal multiplateforme, écrit en Rust, qui se concentre sur la vitesse et la simplicité.
  • Terminator : Permet de diviser l'écran en plusieurs panneaux pour gérer plusieurs sessions.
Émulateur de Terminal 'xfce4-terminal'
Émulateur de Terminal 'xfce4-terminal'
Émulateur de Terminal 'gnome-terminal'
Émulateur de Terminal 'gnome-terminal'

L'invite de commande (prompt)

C'est la ligne où l'on tape les commandes. Elle affiche des informations utiles.

bash
zil@myDebian:~$
  • zil : Nom de l'utilisateur.
  • @ : Séparateur.
  • myDebian : Nom de la machine (hostname).
  • ~ : Répertoire courant (ici, le répertoire personnel, /home/zil).
  • $ : Type d'utilisateur. $ pour un utilisateur standard, # pour le super-utilisateur root.

INFO

Dans ce cours, l'invite de commande sera simplement représentée par $. Il ne faut pas le saisir lors de la frappe des commandes.

Raccourcis clavier utiles

RaccourciDescription
Ctrl + CInterrompt (tue) la commande en cours.
Ctrl + DFerme le shell (équivaut à la commande exit).
Flèches haut/basNavigue dans l'historique des commandes.
Ctrl + A / Ctrl + EDéplace le curseur en début / fin de ligne.
Ctrl + LEfface l'écran du terminal (équivaut à la commande clear).
TabAutocomplète une commande, un nom de fichier ou de répertoire.
Ctrl + RRecherche une commande dans l'historique.
!!Répète la dernière commande (fonctionnalité du shell).

Structure d'une commande

Une commande respecte généralement cette structure :

commande [options] [arguments]

  • La commande : Le nom du programme à exécuter (ex: ls).
  • Les options : Modifient le comportement de la commande. Elles commencent souvent par - (forme courte, ex: -l) ou -- (forme longue, ex: --list).
  • Les arguments : Les données sur lesquelles la commande opère (ex: un chemin de fichier /home/zil).

Commandes fondamentales

echo

Affiche le texte ou la valeur d'une variable.

bash
$ echo "Bonjour le monde"
$ echo $SHELL # Affiche le shell par défaut de l'utilisateur

commande echo $SHELL

whoami

Affiche le nom de l'utilisateur actuellement connecté.

bash
$ whoami

pwd (print working directory)

Affiche le chemin complet du répertoire de travail actuel.

bash
$ pwd

commande pwd

ls (list)

Liste les fichiers et répertoires.

bash
$ ls # Liste le contenu du répertoire courant

commande ls

bash
$ ls -l # Affiche une liste détaillée

commande ls -l

bash
$ ls -l / # Liste le contenu de la racine

commande ls -l /

clear

Efface l'écran du terminal.

bash
$ clear

Obtenir de l'aide

  • --help : La plupart des commandes affichent une aide rapide avec cette option.

    bash
    $ pwd --help

    commande pwd --help

  • man (manual) : Affiche le manuel complet d'une commande.

    bash
    $ man pwd

    commande man pwd

    • barre d'espace pour descendre d'une page
    • flèche bas pour descendre d'une ligne
    • flèche haut pour remonter d'une ligne
    • q pour quitter

explainshell.com

Le site explainshell.com est un excellent outil pour décomposer et comprendre des commandes complexes. Il suffit de saisir une commande pour obtenir une explication détaillée de chaque partie.

Informations système

lsb_release

Affiche des informations sur la distribution Linux.

bash
$ lsb_release -a

commande lsb_release -a

Commande non trouvée ?

lsb_release n'est pas toujours installé. Une méthode plus universelle est d'afficher le contenu du fichier /etc/os-release avec la commande cat /etc/os-release

uname (Unix name)

Affiche des informations sur le noyau du système.

bash
$ uname -a # Affiche toutes les informations

commande uname

hostname

Affiche le nom de la machine.

bash
$ hostname

nproc (number of processors)

Affiche le nombre de cœurs de processeur disponibles.

bash
$ nproc

history

Affiche l'historique des commandes que vous avez tapées.

bash
$ history

commande history

bash
$ history -c # Efface l'historique

exit

Ferme la session du shell.

bash
$ exit

lsblk (list block devices)

La commande lsblk permet de lister les périphériques de bloc (disques, partitions, etc.) connectés au système. Elle affiche une vue hiérarchique des disques et de leurs partitions.

$ lsblk
commande lsblk
On peut voir qu'il y a un disque dur (sda) de type SATA avec plusieurs partitions (sda1, sda2, etc.).
Le système est sur `/`, qui est la partition principale (sda2) du disque dur et qui a une taille de 7Go.
Le répertoire `/home` est sur une autre partition (sda6) de 8,6Go.

Pratique 💃

Pratiquez ces commandes dans votre terminal pour vous familiariser avec elles. N'hésitez pas à utiliser --help ou man pour explorer davantage chaque commande.

Quiz 🎉

👋🏾 Cliquez sur la bonne réponse.

1 / 13 👉🏾 Quel est le rôle principal du shell dans un système d’exploitation ?
  • A. Gérer le matériel informatique

  • B. Servir de couche d’interface entre l’utilisateur et le système

  • C. Installer des logiciels

  • D. Exécuter des programmes graphiques

.