Aller au contenu
Accueil / Le Shell Bash

Le Shell Bash

  •  
Logo Bash

Illustration : Bash (Bourne-Again shell), Bourne comme Steve Bourne

(Temps de lecture : 27 minutes)

Dès les débuts de l’informatique, afin de permettre aux humains d’interagir avec les ordinateurs, les ingénieurs en informatique ont développé un “shell” (un interpréteur de commande) pour les ordinateurs. Un shell (qui signifie coquille en anglais) est un programme qui sert d’interface en mode texte entre le noyau et l’utilisateur.

Au sommaire :

  1. Le shell et le kernel
  2. Console, Terminal, CLI, GUI
  3. Fonctionnement du shell bash
  4. Bash et système de fichiers
  5. Affichage et édition de fichiers
  6. Scripts Bash et bien plus encore
  7. Conclusion : utilité du Bash pour les développeurs
  8. Bonus ludique

Aller plus loin
Lisez aussi sur ce blog

1- Le shell et le kernel

Le terme shell provient d’une analogie : celle du noyau et de la coque de noix. L’idée ici est qu’un OS est composé de deux parties :

  • le shell (la coque)
  • et le kernel (le cœur).

Pour accéder au cœur de la noix, c’est-à-dire à la partie comestible, il faut passer par la coque. De même, pour envoyer nos commandes au cœur de notre OS afin qu’il les exécute, nous devons passer par le shell.

Le shell est l’interface entre le cœur (kernel) et l’utilisateur, ainsi qu’avec les applications tierces
Pour accéder au cœur de la noix, il faut passer par la coque
Le rôle du Kernel – source :
▶️ codeur-pro • Un système d’exploitation c’est quoi? (8 min)

↑ — Revenir au sommaire

2- Console, Terminal, CLI, GUI

Un shell, c’est-à-dire à proprement parler la coque logicielle d’un système d’exploitation peut se présenter sous deux formes :

  • soit une interface en ligne de commande (CLI pour “Command Line Interface”)
  • soit une interface graphique utilisateur (GUI pour “Graphical User Interface”).

2.1- Terminal

Notez cependant que la plupart des gens utilisent le terme “shell” pour désigner l’interface en ligne de commande uniquement. Ce shell en CLI est accessible depuis une console. La vraie console, c’est celle de l’écran noir des serveurs sans interface graphique, ou celle qu’on peut atteindre avec CTRL ALT F1 en desk sur Linux. Néanmoins, différents programmes permettent d’émuler cette console dans une fenêtre en environnement GUI, ce qui permet d’utiliser d’autres programmes en parallèle (Slack, Discord, navigateur, etc.) :

  • Mac, Linux (Gnome) et Windows proposent chacun par défaut un programme nommé Terminal. KDE propose lui Konsole.
  • On peut aussi en installer d’autres : Cmder ou PowerShell ISE pour Windows, Terminator pour Linux…
  • Git Bash permet d’utiliser Git et Bash dans un environnement Windows et comprend une CLI
  • L’IDE VS Code et son fork Cursor ont un terminal intégré, qui sert aussi de chat pour les IA de code
  • L’IDE Codeium a un terminal intégré auquel on peut adjoindre Termium pour y mettre de l’IA de shell
  • etc
Le Terminal permet à l’utilisateurs d’interagir avec le shell

Généralement ces programmes d’interface CLI permettent d’utiliser un shell, mais aussi toute une série d’utilitaires (Git, Node.js, Yarn, NVM, mySQL, Docker, WSL, YAML…) ou encore d’installer des logiciels (apt-get, snap, yum, dnf, pacman, brew, flatpak… ), sans que ça fasse partie pour autant du shell. Il faut bien distinguer les deux.

Le Terminal de Windows, lancé sur PowerShell. Il peut aussi gérer une variété d’autres CLI, notamment Bash via WSL

2.2- Shell

L’un des shell les plus populaires est Bash… Mais il en existe d’autres, comme par exemple :

Développé par la Free Software Foundation (FSF) dans le cadre du GNU Project, Bash est très réputé au sein de la communauté Open Source. Il s’agit aujourd’hui du shell UNIX le plus utilisé du fait de sa distribution avec Linux.

2.3- Linux Is Not UniX, GNU’s Not UNIX

Ci-dessous, Cocadmin nous raconte le contexte dans lequel est né Linux : UNIX, le C, le shell, GNU…

  • Linux mis au point par Linus Torvald, n’est que le noyau du système (le Kernel vu plus haut).
  • Tout ce qui gravite autours (pilotes, etc), est le résultat du travail du projet « GNU’s Not UNIX » ou GNU, initié par Richard Stallman.

Les deux projets sont nées quand UNIX, jusqu’alors libre et ouvert pour le monde universitaire US, est devenu payant. D’où la présence de « is not Unix » dans les deux noms. Quand on parle des distributions Linux, on devrait donc préciser distributions GNU / Linux.

▶️ Cocadmin • Linux n‘est pas Unix (24 min)

↑ — Revenir au sommaire

3- Fonctionnement du shell bash

Les commandes du shell bash sont des fichiers exécutables qui se trouvent dans le répertoire « /bin« . Le shell « sait » qu’un nom de fichier saisi à l’invite de commande est une « commande » parce que le fichier est marqué comme étant un exécutable (le fichier est un programme compilé).

3.1- Syntaxe

Toutes les commandes ont la même syntaxe :

commande options arguments

  • On peut utiliser une commande seule. Exemple : pwd
  • Cependant, certaines commandes ont besoin d’un contexte : quel fichier doit être lu ou supprimé, où copier un fichier, etc. Ce contexte est fourni par l’argument. Exemple : touch notes/memo.txt
  • Enfin, le comportement de la commande peut être modulé par les options. Exemple : ls -a -l
    Remarquons que bon nombre d’options peuvent être écrites
    • en abrégé avec un seul tiret, exemple -a,
    • ou en toutes lettres avec deux tirets, exemple –all.

-a et –all sont donc équivalents. Une convention qui a inspiré d’autres langages de CLI postérieurs (WSL, Git…). Mais toutes les options n’ont pas cette propriété : -l n’a pas d’équivalent en toutes lettres.

  • On peut parfois condenser l’écriture des options. Exemple :
    $ ls -l -a peut être condensé en $ ls -la
Le terminal du bureau Gnome d’Ubuntu

3.2- Manuel

  • Pour lister toutes les commandes du shell, taper ls /usr/bin
  • Pour connaitre le nombre de commandes du shell, taper ls /usr/bin | wc -l
  • Pour savoir comment utiliser une commande, taper man suivi du nom de la commande. Exemple : man ls
    On peut même lire le manuel du manuel : man man
  • Autre possibilité, si on veut juste connaître les options possibles, ajouter –help après le nom de la commande. Exemple : rm –help
  • D’autre part, on peut naviguer dans l’historique des dernières commandes tapées avec les flèches haut et bas
    On peut aussi afficher l’historique avec history ou y rechercher une commande avec CTRL R
  • Pour finir, si la fenêtre est pleine et qu’on veut y voir plus clair en la vidant, la commande est clear (ou CTRL L)
  • Quelques raccourcis clavier :
    CTRL A : ramène le curseur au début de la commande
    CTRL E : ramène le curseur à la fin de la commande
    CTRL U : Supprime tout ce qui se trouve à gauche du curseur
    CTRL K : Supprime tout ce qui se trouve à droite du curseur

3.3- sudo : Switch User do

Quand on travaille dans Bash, on est connecté avec un compte d’utilisateur aux droits limités.
Un seul utilisateur particulier possède tous les droits : Administrateur sous Windows, root sous Linux. Or certaines commandes nécessitent de disposer de ces droits étendus (installer un programme, créer un user…).

Pour éviter de passer de son profil à root et vice-versa continuellement, on peut faire précéder sa commande par sudo, ce qui nous confère les droits root temporairement, juste le temps de la commande (délégation de droits).
Exemple : sudo apt install firefox
En fait, c’est la forme abrégée de sudo -u root apt install firefox

▶️ Adrien Linuxtricks • Différences entre sudo, su et su –

↑ — Revenir au sommaire

4- Bash et système de fichiers

Pour un développeur web, les commandes les plus utilisées du Bash sont liées à la gestion de fichiers

L’arborescence type simplifiée des distributions Linux (cliquez pour aller à la source)

Parmi les répertoires importants de root :

  • boot : fichiers de démarrage de Linux, dont grub et efi
  • bin : contient tous les exécutables compilés du shell (binaries)
  • sbin : exécutables compilés réservés au super utilisateur root (system binaries)
  • dev : fichiers des points d’entrée des périphériques tels que clavier, webcam, mais aussi disque dur / SSD interne (devices)
  • media : points de montage des supports permanents mais amovibles (disques durs et SSD externes, clé USB, carte SD…) – voir aussi run/media
  • mnt : répertoire vide couramment utilisé par les administrateurs système comme point de montage temporaire, qu’on démonte après usage (mount)
  • etc : dossiers de configuration des services comme apache, mysql, php, ssh, mais aussi par exemple les groupes d’utilisateurs (Editable Text Configuration ou Extended Tool Chest)
    cat /etc/fstab
  • lib : les bibliothèques partagées (équivalent des dll de Windows)
  • usr : logiciels non essentiels au système mais utiles aux utilisateurs : Gimp, Libre Office, Ansible, Grub… (UNIX System Resources)
  • home : contient les dossiers de tous les utilisateurs (dans l’exemple ci-dessus on en a deux : sue et fred)
La liste complète des répertoires systèmes Linux (cliquez pour aller à la source)

Pour avoir avoir une vue de votre arborescence dans le terminal, taper tree -d -L 2

▶️ Malekal • Linux : Les répertoires systèmes et l’arborescence : /home, /var, /usr, /etc, /boot, …
▶️ Wikipedia • Filesystem Hierarchy Standard – FHS
▶️ Adrien Linuxtricks • Explications sur l’arborescence Linux (24 min)

↑ — Revenir au sommaire

4.1- Naviguer dans le système de fichiers

4.1.1- Se repérer

pwd : print working directory

Pour savoir où on se trouve dans l’arborescence :

$ pwd
/home/sue

/ pour root
home, le répertoire des utilisateurs
sue, le répertoire de l’utilisateur particulier sue

ls : list segment

  • $ ls : liste du contenu du répertoire courant
  • $ ls -l : détails sur les fichiers/répertoires (affichage long)
  • $ ls -a : afficher tous les fichiers (all), même les fichiers cachés, dont . et ..
  • $ ls -R : affichage récursif du contenu
  • $ ls -l -a peut être condensé en $ ls -la

4.1.2- De déplacer

cd : change directory

  • chemin absolu : part de la racine (root), commence par /
  • chemin relatif : part du répertoire courant

Aller dans le répertoire Pictures depuis le répertoire courant (chemin relatif, cf arborescence ci-dessus) :

$ cd Pictures
$ pwd
/home/sue/Pictures

retour au répertoire personnel :

$ cd
/home/sue

Remonter dans l’arborescence : cd ..

$ cd ../..
$ pwd
/
$ cd
$ pwd
/home/sue

Ici, on remonte de deux niveaux, ce qui nous amène au niveau racine, au dessus de home (root). Puis on retourne au répertoire personnel (sue)

Commandes sur un autre répertoire

On peut appliquer des commandes sur un autre répertoire, sans avoir besoin de s’y placer (indifféremment en chemin absolu ou relatif)

$ ls /home/sue/Pictures/pets
fido.jpg fluffy.jpg
$ pwd
/home/sue

$ ls Pictures/pets
fido.jpg fluffy.jpg
$ pwd
/home/sue

… en réalité on n’a jamais quitté le répertoire personnel

Taper un long chemin (auto-complétion)

Après chaque / taper les premières lettre du sous-dossier. En tapant la touche TAB, le prompt complète le nom :

$ cd /home/lurin/Bureau/DATA/Re

<TAB>

$ cd /home/lurin/Bureau/DATA/ReactMastery/

On peut aussi copier tout le chemin dans le gestionnaire de fichiers graphique (GUI), en ayant tapé CTRL l

<CTRL l> (l comme Lucien)

↑ — Revenir au sommaire

4.2- Modifier le système de fichiers

4.2.1- Créer, supprimer des fichiers, des répertoires

$ cd
$ pwd
/home/sue

mkdir : make directory

Créer un répertoire notes dans le répertoire personnel

$ mkdir notes

touch (affecter)

Créer un fichier memo.txt dans le répertoire notes (sans quitter sue) ;
L’extension txt est facultative avec Linux, l’ajouter permettra que le contenu du fichier puisse être lu également sous Windows.
Autre possibilité pour créer un fichier textuel, rediriger le résultat d’une commande, avec > et >>. Voir plus bas : 5.3- Redirection de résultats vers un fichier texte

$ touch notes/memo.txt

rm : remove

Supprimer le fichier memo.txt

$ rm notes/memo.txt

rmdir : remove directory

supprimer le répertoire notes

$ rmdir notes

ou

$ rm -d notes

Ces deux écritures ne permettent de supprimer un répertoire que s’il est vide
Pour passer outre, il faut choisir d’autres options :

  • rm -r ou rm –recursive : Supprime un répertoire non vide et son contenu, dont toute l’arborescence de ses sous-dossiers
  • rmdir -p : Supprime un sous-répertoire vide et son répertoire parent s’il est vide aussi

Rappel : Pour connaitre toutes les options possibles , se reporter au manuel : man rm et/ou rm –help
rmdir a aussi des options qu’on peut trouver dans le manuel : man rmdir et/ou mkdir –help

4.2.2- Copier, renommer, déplacer des fichiers, des répertoires

$ cd
$ pwd
/home/sue

cp : copy

Créer un fichier tom (quand aucune extension n’est précisée, c’est que le contenu sera du texte)

$ touch tom
$ ls
tom

Pour dupliquer le fichier tom :

$ cp <chemin/nom fichier ori> <chemin/nom copie>

S’il s’agit d’un répertoire et qu’on veut aussi copier son contenu : option -r pour récursif

$ cp -r <chemin/nom fichier ori> <chemin/nom copie>

$ cp tom jerry
$ ls
jerry tom

On obtient deux fichiers au contenu identique mais au nom différent.
Mais en précisant un chemin différent de part et d’autre, non seulement on duplique le fichier, mais en plus on place la copie dans un autre endroit. On ne serait alors pas obligé de changer le nom. Exemple :

$ mkdir cartoons
$ cp tom cartoons
$ ls
jerry tom
$ ls cartoons
tom

On a un deuxième fichier tom, mais dans le répertoire cartoons

mv : move

Renommer jerry en souris

$ mv <ancien nom fichier> <nouveau nom fichier>

$ mv jerry souris
$ ls
souris tom

En précisant un chemin différent de part et d’autre, non seulement on renomme le fichier, mais en plus on le déplace.

↑ — Revenir au sommaire

5- Affichage et édition de fichiers

wget

récupérer des fichiers sur internet (images, libraries, zip, iso…) dans le dossier courant, ou dans un dossier de destination qu’on spécifie. Exemple :

$ wget -P $HOME/dossier/de/destination http://www.site.org/rep/01/fichier.txt

Wget est un programme en ligne de commande non interactif de téléchargement de fichiers depuis le Web. Il supporte les protocoles HTTP, HTTPS et FTP. Il possède nombreuses options dont on peut retrouver les principales dans le Wiki Ubuntu francophone :
▶️ Wiki Ubuntu • wget

5.1- Recherche

find (« trouver »)

find est un puissant outil pour trouver un fichier ou un répertoire. Exemple :

$ find . -type f -iname « .jpeg » -or -iname « .jpg »

1- avec find, on peut chercher un fichier / répertoire :

  • dans un répertoire donné et ses sous répertoires
  • par son nom exact, casse comprise, avec l’option -name
  • par son nom exact, de façon insensible à la casse, avec l’option -iname (forme agrégée de -i -name )
  • ou un nom approchant à l’aide des caractères * et ?
  • par sa taille avec -size
  • par sa date de dernier accès avec -atime

2- On peut ne vouloir

  • que les répertoires : -type d
  • ou que les fichiers : -type f

3- On peut combiner plusieurs critères avec :

  • -and Les résultats de la recherche doivent remplir les deux conditions
  • -or Les résultats de la recherche doivent correspondre à au moins l’une des deux conditions
  • -not Ignore la condition suivante

4- Enfin, on peut même recourir aux Regex

Attention, find est capable de fouiller dans des dossiers sur lesquels on n’a pas les droits, ce qui génère des erreurs. Pour écarter ces erreurs, utiliser l’option -print

Aller plus loin :
▶️ HackMD • Comment utiliser la commande find ?
▶️ ionos • Commande find sous Linux

grep : Global Regular Expression Print

Chercher des motifs dans des fichiers. On peut même utiliser des regex simples. Exemple :

$ grep -n NAME /etc/os-release
1:NAME= »Red Hat Enterprise Linux »
7:PRETTY_NAME= »Red Hat Enterprise Linux 8.6 (Ootpa) »
9:CPE_NAME= »cpe:/o:redhat:enterprise_linux:8::baseos »
  • grep -n permet d’avoir le numéro de la ligne en prime
  • grep -c donne le nombre de lignes correspondant à la recherche
  • grep -r recherche de manière récursive dans un dossier et ses sous dossiers

▶️ Linuxtricks • grep : Afficher les lignes correspondant à un motif donné

wc : word count

Obtenir le nombre de lignes, de mots et de caractères d’un ou plusieurs fichiers. Exemple :

$ls
SignatureBagadGMailjpg.html SignatureBagadGMailsvg.html videofacebook.html
$wc SignatureBagadGMailsvg.html videofacebook.html
48 210 3238 SignatureBagadGMailsvg.html
16 48 867 videofacebook.html
64 258 4105 total
  • SignatureBagadGMailsvg.html contient 48 lignes, 210 mots et 3238 caractères
  • videofacebook.html contient 16 lignes, 48 mots et 867 caractères
  • La dernière ligne fait les totaux.

A noter que si on ne veut que le nombre de caractères, un listing au format long le fournit aussi :

$ls -l
total 16
-rw-r–r– 1 lurin lurin 3238 Aug 22 22:29 SignatureBagadGMailjpg.html
-rw-r–r– 1 lurin lurin 3238 Aug 22 22:03 SignatureBagadGMailsvg.html
-rw-r–r– 1 lurin lurin 867 Aug 19 23:54 videofacebook.html

Et bien entendu comme toujours, une foule d’options viennent modeler le rendu :
▶️ ionos • Commande Linux wc

↑ — Revenir au sommaire

5.2- Affichage

5.2.1- echo

Affiche un texte dans le terminal.
Pour éviter autant que possible les erreurs, il est recommandé de placer le texte entre guillemets.
On peut aussi faire afficher des variables.
echo sert donc plutôt dans les scripts. Exemples :

$ echo « Ceci est un exemple »
Ceci est un exemple
$ echo « Vous êtes dans le répertoire : $PWD »
Vous êtes dans le répertoire : /Users/Name/Desktop

Un peu à la manière de console.log en JavaScript, echo accepte une grande variété d’options sur la manière dont s’affichera le texte : couleurs, gras, souligné, clignotant, etc.
▶️ ionos • Commande echo sous Linux

5.2.2- cat : catenate (« concatener »)

Cat permet d’afficher le contenu d’un fichier (s’il n’est pas vide bien entendu). Exemple :

$ cat SignatureBagadGMailsvg.html

Pour limiter le défilement pour les fichiers de grande taille, vous pouvez ajouter l’option  | more
Puis descendre ligne par ligne avec ENTREE.
En effet, dans une véritable console telle qu’on la trouve dans un serveur Linux, il n’y a ni scroll, ni ascenseur, contrairement à l’émulation graphique qu’offre le Terminal. Exemple :

cat SignatureBagadGMailsvg.html | more

head, tail

voir le début (head = tête), ou la fin (tail = queue) d’un fichier sur 10 lignes. Exemple :

$ head SignatureBagadGMailsvg.html
$ tail SignatureBagadGMailsvg.html

Cat permet bien d’autres choses encore :

  • créer des fichiers,
  • concaténer des fichiers,
  • afficher les fin de lignes, les numéros de ligne (vides et/ou non vide), les caractères non imprimables,
  • supprimer les lignes vides,
  • et même afficher un contenu en ordre inverse !

Tout est expliqué dans ce tuto de Hostinger :

▶️ Hostinger • Commande Cat Linux

5.2.3- Dans un éditeur de texte

Si on veut faire des modifications dans un texte, on peut le faire dans un éditeur de texte comme nano :

$ nano SignatureBagadGMailsvg.html

Au passage, pour l’explication des nombreux tableaux dans ce fichier html, c’est parce que c’est une signature pour les mails, et que les gestionnaires de mail gèrent très mal le CSS. Les tableaux sont un moyen de contourner le problème, comme du temps du HTML 4 :

5.3- Redirection de résultats vers un fichier texte

↑ — Revenir au sommaire

  • Ecrire un truc dans un fichier : > (fichier qui sera créé pour l’occasion s’il n’existe pas déjà)
  • Ecrire un truc qui va écraser le contenu d’un fichier quand il existe déjà : >
  • Ecrire un truc qui va s’ajouter à l’existant d’un fichier : >>

Illustration :

J’écris hello dans un fichier bonjourlemonde.txt qui est créé pour l’occasion

$ echo hello > bonjourlemonde.txt
$ ls
bonjourlemonde.txt
$ cat bonjourlemonde.txt
hello

J’écris bonjour le monde dans bonjourlemonde.txt avec > : le contenu antérieur Hello est effacé.

$ echo bonjour le monde > bonjourlemonde.txt
$ cat bonjourlemonde.txt
bonjour le monde

J’écris Hello World dans bonjourlemonde.txt, mais avec >> : Hello World s’ajoute au contenu existant sans l’écraser

$ echo Hello World >> bonjourlemonde.txt
$ cat bonjourlemonde.txt
bonjour le monde
Hello World

Comme on l’a vu, echo est capable d’afficher les variables :

$ echo « Vous êtes dans le répertoire : $PWD » >> bonjourlemonde.txt
$ cat bonjourlemonde.txt
bonjour le monde
Hello World
Vous êtes dans le répertoire : /home/lurin/Testsbash

Bien entendu, cela ne fonctionne pas qu’avec echo. Toute commande débouchant sur un résultat textuel fonctionnera de même.
Imaginons par exemple qu’on sorte les log de connexion à un serveur : on peut les conserver dans un ficher avec > . De même, on peut écrire un script qui fait en sorte que chaque nouveau log viennent s’ajouter aux précédents dans un fichier, avec >> .

↑ — Revenir au sommaire

5.4- Gestion des droits sur les fichiers et répertoires

Quand on travaille dans Bash, on est connecté avec un compte d’utilisateur avec des droits déterminés ; non seulement sur les commandes, mais sur chaque fichier et répertoire.

Les utilisateurs sont réunis en groupes. Chaque fichier, chaque répertoire est associé à des droits pour les utilisateurs et pour les groupes.
Ces droits sont ceux de lecture (r), d’écriture (w), et d’exécution (x).

Un seul utilisateur, appelé root sous Linux, possède tous les droits, dont :

  • celui de créer/supprimer/modifier des utilisateurs et des groupes,
  • celui d’associer les utilisateurs à des groupes,
  • et celui d’attribuer à tout ce beau monde les droits sur les fichiers et répertoires.

Les simple utilisateurs ne peuvent effectuer qu’une partie de ces tâches.

La commande pour changer des droits est de la forme :

$ chmod 755 <chemin/nom fichier ou dossier>

Si on veut changer les droits de tout un répertoire mais aussi de son contenu :

$ chmod -R 755 <chemin/nom dossier>

En réalité on fait ici un premier pas dans l’administration système, qu’un développeur n’a généralement pas à gérer. Si vous voulez en savoir plus pour votre culture générale, voici une vidéo de Julien Code qui explique tout de manière simple :

▶️ Julien Code • Apprendre les droits linux en 10 commandes de base (14 min)

▶️ Wiki ubuntu-fr • Gérer les droits d’accès (propriétés et permissions) des fichiers et répertoires

↑ — Revenir au sommaire

6- Scripts Bash et bien plus encore

On peut tout à fait réaliser les opérations de gestion de fichiers présentées dans cet article avec l’interface graphique (tant avec Windows dans le cas de WSL qu’avec Linux équipé d’un bureau).

Ce que ne permettent pas les interfaces graphiques, ce sont les automatisations, comme la redirection des Entrées/Sorties également appelée « le traitement en pipeline » : le résultat d’une commande est envoyé à une autre commande, dont le résultat peut être envoyé à une troisième commande, etc. Exemple :

$ ls /usr/bin | wc -l
792
  • ls /usr/bin : liste moi les fichiers du répertoire bin
  • | wc -l Sans me les afficher, dis moi combien de lignes ça représente
  • Avec cette commande composée, on est capable de savoir combien de commandes sont à notre disposition dans notre Shell

Ainsi, Bash est beaucoup plus puissant que n’importe quelle interface graphique pour l’administration système ou la cybersécurité… Il s’agit alors d’automatiser des tâches et d’écrire de véritables scripts. Outre son rôle d’interpréteur de commandes, le shell peut servir d’éditeur de ligne de commande :

  • vim <nom_fichier> (avec l’éditeur vim)
  • nano <nom_fichier> (éditeur nano)
VIM dans WSL

Le shell est ainsi un interpréteur de commande et un langage de programmation.

La programmation shell consiste à écrire de « petits » programmes, les scripts shells à l’aide des outils du shell (commandes, options, arguments, variables, paramètres, fonctions, structures de contrôle, redirections, filtres,…). Les scripts shells (aussi appelés scripts d’environnement) sont des fichiers textes exécutables dont le shell interprète et traite chaque ligne séquentiellement. Voici l’explication de Copilot :

J’ai demandé à Copilot : Comment fait-on un script bash ?

Pour finalement aboutir au script suivant :

Et bien d’autres choses encore…

▶️ Adrien Linuxtricks • Nautilus Scripts : Exécutez des scripts sur des fichiers ou dossiers (13 min)
▶️ Adrien Linuxtricks • rtcwake : Éteindre le système pour une durée définie (18 min)
▶️ Cocadmin • 11 Incantations magiques pour apprendre Bash (25 min)
▶️ Cocadmin • BASH: Des scripts solides (20 min)
▶️ Julien Code • 10 commandes pour faire de la Maintenance Linux (14 min)
▶️ Christophe Casalegno • Pourquoi tu dois apprendre le BASH (16 min)
▶️ Christophe Casalegno • Sysadmin Jedi Linux ou Pentesters Sith : vos armes en Bash (20 min)
▶️ Christophe Casalegno • Je code un jeu de labyrinthe en Bash (15 min)

↑ — Revenir au sommaire

7- Conclusion : utilité du Bash pour les développeurs

En général, un développeur web n’a pas besoin d’une connaissance aussi poussée de Bash qu’un administrateur système ou qu’un expert en cyber-sécurité. Alors pourquoi s’y intéresser ?

  1. La première raison de se familiariser avec le terminal pour un développeur web, c’est que d’autres outils fonctionnent aussi sans interface graphique (Node.js ou git par exemple). A partir du moment où le terminal est déjà ouvert, autant y utiliser aussi Bash.
  2. Mais la principale raison pour un développeur, c’est quand il se retrouve à gérer l’hébergement : les serveurs Linux n’ont pas d’interface graphique, d’où l’intérêt d’y être déjà habitué en local.

Voici un exemple concret réalisé par un ancien collègue de la Wild Code School :

▶️ NonoduWeb • Déploiement d’une application React/node/mongoDB avec Nginx / Chapitre 1 : installation (20 min)

↑ — Revenir au sommaire

8- Bonus ludique

On peut donc faire beaucoup de travail sérieux dans le terminal. Mais saviez vous qu’on peut également y faire beaucoup de choses amusantes… Comme faire rouler un train ou parler une vache ?

8.1- sl : Steam Locomotive (locomotive à vapeur)

$ sudo apt install sl
$ sl

Installez le paquet, lancez la commande et…

https://infodocbib.net/wp-content/uploads/2024/09/Enregistrement-de-lecran-2024-09-06-183328.mp4
$ sl

Comme toute commande Bash, il existe de nombreuses options (train qui vole, passagers qui crient help…).Vous pouvez lire le manuel man sl , lire l’aide sl --help, ou lire les tutos ci-dessous :

▶️ Cyberciti • Linux / UNIX Desktop Fun: Steam Locomotive
▶️ Linux-Console • Exécution d’un train dans le terminal Linux

En installant la library lolcat en plus, vous pourrez même avoir la couleur !

$ sudo apt install lolcat

Essayez le code suivant (c’est une boucle, dans laquelle 4 variations successives du train vont traverser le terminal, et en couleur) :

$ for i in a l f o; do sl -${i} | lolcat; done

8.2- Cowsay (la vache qui dit)

Cowsay est un autre programme en ASCII. Sur le principe de la blague, ou de « l’easter egg », il existe maintenant sous toutes sortes de variantes (cowthink, xcowsay, etc.). Il est facile à réutiliser par les programmeurs pour inventer des codes qui permettent par exemple de signifier un message d’erreur ou l’arrivée de nouveaux courriels.

Installez la library, et faites dire ce que vous voulez au bovidé :

$ sudo apt install cowsay
$ cowsay Je suis une vache qui parle et qui pense
cowsay

Avec l’option  -f tux , c’est Tux la mascotte de Linux que pouvez faire parler !

Essayez également ceci :

$ cowsay -f /usr/share/cowsay/cows/eyes.cow « Les yeux du chat d’Alice au pays des Merveilles »
$ cowsay -f /usr/share/cowsay/cows/dragon.cow Du feu plein les naseaux
Allez voir votre dossier /usr/share/cowsay/cows/, vous pourriez bien y trouver d’autres animaux…

Découvrez toutes les options possibles dans le manuel man cowsay et l’aide cowsay --help

▶️ Tech & Tux • Cowsay Faire parler une vache dans un terminal
▶️ DesdeLinux • Combiner cowsay et fortune

8.3- De nombreux autres petits programmes amusants

Internet fourmille de ce genre de petits programmes amusants. Voici ci-dessous une liste non exhaustive :

https://infodocbib.net/wp-content/uploads/2024/09/bashmatrix-1.mp4
$ cmatrix

A vous d’en trouver d’autres !

Aller plus loin

▶️ Oscar Angel • Un petit tour dans le Shell
▶️ DataScientest • Bash (Bourne-Again shell) : principe, avantages, formation
▶️ Librecours • Prendre en main le terminal sous Linux
▶️ Librecours • Apprivoiser la ligne de commande
▶️ Pierre Giraud • Apprendre à utiliser le shell Bash
▶️ Patrick Hautrive • Les shells de LINUX
▶️ Lycée La Martinière Duchère de Lyon • La ligne de commande sous Linux
▶️ Malekal • Linux : Les répertoires systèmes et l’arborescence
▶️ Documentation Ubuntu • Commandes et lignes de commandes

▶️ Bande de Codeurs • 16 commandes LINUX à connaitre absolument (20 min)
▶️ Marie Développe • Maîtrisez le terminal Linux : Commandes Essentielles pour Débutants (16 min)
▶️ Julien Code • 10 commandes Linux pour Apprendre l’administration des Systèmes (23 min)

▶️ Hostinger • Cheat Sheet des commandes Linux (pdf)

↑ — Revenir au sommaire

Lisez aussi sur ce blog

↑ — Revenir au sommaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partagez
Tweetez
Partagez