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 :
- Le shell et le kernel
- Console, Terminal, CLI, GUI
- Fonctionnement du shell bash
- Bash et système de fichiers
- 4.1- Naviguer dans le système de fichiers
- 4.1.1- Se repérer
- pwd : print working directory
- ls : list segment
- 4.1.2- De déplacer
- cd : change directory
- Commandes sur un autre répertoire
- Taper un long chemin (auto-complétion)
- 4.1.1- Se repérer
- 4.2- Modifier le système de fichiers
- 4.2.1- Créer, supprimer des fichiers, des répertoires
- mkdir : make directory
- touch (affecter)
- rm : remove
- rmdir : remove directory
- 4.2.2- Copier, renommer, déplacer des fichiers, des répertoires
- cp : copy
- mv : move
- 4.2.1- Créer, supprimer des fichiers, des répertoires
- 4.1- Naviguer dans le système de fichiers
- Affichage et édition de fichiers
- wget
- 5.1- Recherche
- find (« trouver »)
- grep : Global Regular Expression Print
- wc : word count
- 5.2- Affichage
- echo
- cat : catenate (concatener) / head / tail
- Dans un éditeur de texte
- 5.3- Redirection de résultats vers un fichier texte
- 5.4- Gestion des droits sur les fichiers et répertoires
- Scripts Bash et bien plus encore
- Conclusion : utilité du Bash pour les développeurs
- 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.
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
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.
2.2- Shell
L’un des shell les plus populaires est Bash… Mais il en existe d’autres, comme par exemple :
- sur Linux et Mac : ZSH (Zorn shell), auquel on peut adjoindre le plugin zsh-copilot pour y mettre de l’IA de shell
- chez Miscrosoft : MS-DOS, PowerShell, Azur Cloud Shell
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.
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
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 avechistory
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 –
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
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)
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)
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)
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.
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 primegrep -c
donne le nombre de lignes correspondant à la recherchegrep -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
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 :
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 :
head, tail
voir le début (head = tête), ou la fin (tail = queue) d’un fichier sur 10 lignes. Exemple :
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 :
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
- 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 >>
.
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 :
▶️ Wiki ubuntu-fr • Gérer les droits d’accès (propriétés et permissions) des fichiers et répertoires
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)
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 :
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)
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 ?
- 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.
- 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 :
- Déploiement d’une application React/node/mongoDB avec Nginx (2 parties) – NonoduWeb (20 min + 28 min)
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…
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
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
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 :
- Aquarium ASCII
- Générateur de Bonsaï
- Obtenir une /voiture avec gti au lieu de git
- De la neige sur le bureau
- Inviter des nuées de pingouins sur le bureau (ou de nombreux autres thèmes : Simpson, Sonic…)
- Un système de dessins et de textes comme Cowsay, mais avec une multitude de thèmes
- Un arbre de Noël pour votre terminal
- Chasse au chat et à la souris sur tout l’écran
- Un Tetris pour console
- Simuler l’affichage de « The Matrix »
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)