Cloud / DevOps
2023-08-01
12 min
Équipe Blent

Bash : qu'est-ce que c'est ?

Bash (qui signifie Bourne Again SHell) est un interpréteur de commandes (shell) pour les systèmes d'exploitation Linux. Il s'agit du principal langage de script et d'interface en ligne de commande utilisé dans les systèmes Linux qui permet d'interagir avec le système d'exploitation en utilisant des commandes textuelles.

Bash : qu'est-ce que c'est ?

Dans les systèmes informatiques, les systèmes Linux sont omniprésents. Peu connus du grand public, en comparaison avec Windows, une grande partie des systèmes d'exploitation dans le Cloud sont des distributions basées sur Linux, dont les variantes les plus connues sont Ubuntu et Debian.

Contrairement aux ordinateurs de bureau, les serveurs dans le Cloud n'ont pas d'interfaces graphiques. Pour interagir avec ces derniers, nous devons utiliser les commandes UNIX, qui sont des commandes systèmes permettant d'effectuer toutes les opérations de navigation, de lecture/écriture, d'administration ou encore d'exécution d'applications.

Logo UNIX

La très grande majorité des commandes systèmes sont disponibles dans toutes les distributions basées sur le noyau Linux. On retrouvera ainsi la plupart des commandes sur des systèmes Linux comme Ubuntu ou Debian, tout comme sur macOS. Il peut néanmoins y avoir des différences selon les applications installées (éditeurs de texte, gestionnaires de paquets, etc).

À lire aussi : découvrez notre formation Cloud / DevOps

Que l'on soit développeur, DevOps Engineer ou même Data Engineer, la connaissance des principales commandes Linux est indispensable, car ces profils vont très rapidement devoir manipuler des commandes dans le Cloud.

Une histoire de Bash

Bash (qui signifie Bourne Again SHell) est un interpréteur de commandes (shell) pour les systèmes d'exploitation Linux. Il s'agit du principal langage de script et d'interface en ligne de commande utilisé dans les systèmes Linux qui permet d'interagir avec le système d'exploitation en utilisant des commandes textuelles.

Logo Bash

Avant de rentrer dans le détail de Bash, il faut bien comprendre tout d'abord c'est qu'est un shell. Un shell est un programme informatique qui agit comme une interface entre l'utilisateur et le système d'exploitation. Il permet ainsi d'interagir avec le système en utilisant des commandes textuelles plutôt que des interfaces graphiques (comme des applications fenêtrées que l'on utilise au quotidien). Le shell reçoit les commandes saisies par l'utilisateur, les interprète et les transmet au système d'exploitation pour exécution. Une fois que le système d'exploitation a terminé l'exécution de la commande, le shell peut afficher les résultats.

Il n'existe donc pas un shell mais plusieurs shells.

  • Le Bourne Shell (sh) : il s'agit du shell original pour UNIX, et a été développé par Stephen Bourne en 1979 (appelé ainsi en l'honneur de son créateur). Le Bourne Shell était très basique, mais il a posé les bases des interpréteurs de commandes pour les systèmes UNIX.
  • Très rapidemment, d'autres shells comme le C Shell (csh) ou le Korn Shell (ksh) ont vu le jour, dans l'optique d'améliorer le shell par défaut sh. Ils disposaient en général de meilleures fonctionnaliés comme l'édition de fichiers ou la complétion automatique (en appuyant sur la touche tabulation).
  • Presque dix ans après, le Bourne Again Shell (bash) est apparu, avec un support des commandes classiques du Bourne Shell, tout en ajoutant les nouvelles fonctionnalités développées à l'occasion pour le C Shell et le Korn Shell.

Ainsi, il est donc possible d'utiliser le shell que l'on souhaite en fonction de ses préférences, même si Bash est aujourd'hui de facto le shell par défaut dans de nombreux systèmes Linux.

Premiers pas avec Bash

La première question, c'est déjà où exécuter ces fameuses commandes ? Sous Windows, il faut accéder à l'invite de commande pour exécuter des commandes. Sous les environnements Linux, nous devons passer par un terminal afin d'exécuter des commandes.

❓ Mais comment je vais exécuter des commandes Linux si j'ai un Windows ?

Pour cela, il suffit juste de configurer le WSL pour avoir accès à un environnement Linux directement dans son Windows ! Et si vous êtes déjà sous Linux (ou MacOS), alors il suffit d'ouvrir le Terminal dans les applications, et nous voilà en face de notre Bash !

Commençons avec une toute première commande.

ls

bash

La commande ls permet de lister les fichiers présents dans le répertoire courant, c'est-à-dire là où nous sommes positionnés. Si l'on remarque bien, il n'y a aucune sortie ! Et c'est tout à fait normal, puisque par défaut, il n'y a aucun fichier dans l'environnement.

Essayons de créer un fichier avec la commande touch.

touch fichier.txt

bash

En exécutant à nouveau la commande ls, nous voyons que le fichier texte apparaît bien.

La commande ls va effectuer une action précise, qui consiste à lister les éléments d'un dossier. Ces commandes peuvent être utilisées avec des arguments, c'est-à-dire des paramètres permettant de détailler le comportement de la commande. Par exemple, la commande ls dispose des arguments -a et -l, qui permettent respectivement d'afficher les éléments cachés et de lister les éléments sur chaque ligne.

ls -a -l

bash

total 48
drwsrwsr-x 8 jovyan users 4096 Feb  9 12:07 .
drwxr-xr-x 1 root   root  4096 Feb  8 06:21 ..
-rw-rw-r-- 1 jovyan users  220 Feb 25  2020 .bash_logout
-rw-rw-r-- 1 jovyan users 3823 Feb  8 06:21 .bashrc
drwsrwsr-x 4 jovyan users 4096 Feb  9 12:06 .cache
drwsrwsr-x 2 jovyan users 4096 Feb  9 12:06 .conda
drwxr-sr-x 3 jovyan users 4096 Feb  9 12:07 .config
-rw-r--r-- 1 jovyan users    0 Feb  9 12:07 fichier.txt
drwsrws--- 2 jovyan users 4096 Feb  9 12:06 .jupyter
drwxr-sr-x 3 jovyan users 4096 Feb  9 12:06 .local
drwsrwsr-x 2 jovyan users 4096 Feb  8 06:23 .npm
-rw-rw-r-- 1 jovyan users  807 Feb 25  2020 .profile
-rw-rw-r-- 1 jovyan users  227 Feb  9 12:01 .wget-hsts

console

Nous voyons beaucoup d'éléments ayant pour préfixe .. Dans les systèmes Linux, le . en préfixe indique que l'élément en question est un fichier ou dossier caché : il ne sera pas visible par défaut sans argument -a. C'est notamment utile pour ne pas afficher des fichiers ou dossiers de configuration et ne pas surcharger l'affichage du contenu.

Les deux premières éléments sont particulièrement intéressants.

  • L'élément . concerne le répertoire lui-même. Par exemple, le chemin d'accès ./fichier.txt indique que l'on accède à l'élément nommé fichier.txt du répertoire courant.
  • L'élément .. concerne le répertoire parent. Par exemple, le chemin d'accès ../fichier.txt indique que l'on accède à l'élément nommé fichier.txt du répertoire parent.

Cela est très utile pour naviguer entre les fichiers. Prenons un exemple en créant un dossier dans le répertoire courant.

mkdir dossier

bash

Pour se diriger dans un dossier, nous utilise la commande cd (pour change directory), en spécifiant ensuite le chemin d'accès. Ce dernier peut être absolu (un chemin d'accès complet) ou relatif (par rapport au répertoire courant). Dirigeons-nous dans le dossier que nous venons de créer.

cd dossier

bash

Nous pouvons voir d'après le préfixe de commande que nous sommes dans ~/dossier. Essayons d'afficher le contenu du fichier avec la commande cat.

cat ../fichier.txt

bash

Rien ne s'affiche, là aussi parce que le fichier est vide. Essayons de modifier le contenu du fichier en ajoutant une ligne.

echo "Bonjour !" >> ../fichier.txt

bash

La commande echo permet d'afficher un message. Ce qui est important ici, c'est la redirection >> : cela indique au système que le résultat de cette commande sera enregistré dans le fichier spécifié.

Affichons à nouveau le contenu du fichier.

cat ../fichier.txt

bash

Bonjour !

console

Tout fonctionne bien ! Terminons par revenir au dossier parent.

cd ..

bash

Il nous reste plus qu'à supprimer le dossier que nous venons de créer avec la commande rm.

rm dossier

bash

rm: cannot remove 'dossier': Is a directory

console

Cette commande ne fonctionne pas. En effet, selon l'erreur affichée, nous ne pouvons pas supprimer directement l'élément car il s'agit d'un dossier. Pour cela, nous devons rajouter l'argument -r pour spécifier que l'on supprime de manière récursive l'élément, indispensable pour supprimer un dossier.

rm -r dossier

bash

En exécutant à nouveau la commande ls, seul l'élément fichier.txt est présent.

Lecture et écriture de fichiers

Maintenant que nous avons abordé les principales commandes sous UNIX, allons un peu plus loin dans la gestion des fichiers.

À lire aussi : découvrez notre formation Cloud / DevOps

Éditeur nano

Une des premières difficultés lorsque l'on ne dispose pas d'interface graphique est de pouvoir éditer un fichier. Dans le terminal, cela n'est pas facile puisque tout doit s'effectuer sans la souris. Un des premiers éditeurs plutôt facile à prendre en main est nano. Ouvrons le fichier que nous avons créé avec nano.

nano fichier.txt

bash

Pour se déplacer à l'intérieur de l'éditeur, nous devons utiliser les flèches du clavier, qui aura pour action de bouger le curseur vers la position désirée. Ajoutons une nouvelle ligne au fichier. Nous souhaitons maintenant enregistrer ce fichier.

Nous pouvons voir une barre d'outil en bas du terminal : cela indique quels sont les raccourcis clavier de nano. Par exemple, ^O, pour Ctrl+O, va avoir pour effet d'enregistrer le fichier. En appuyant sur les touches, nano demande vers quel fichier enregistrer le contenu (qui par défaut correspond au fichier ouvert).

Éditeur nano

Nous pouvons valider en appuyant sur Entrée. Pour quitter l'éditeur, toujours d'après la barre d'outils, nous devons appuyer sur Ctrl+X. Affichons le contenu du fichier.

cat fichier.txt

bash

Bonjour !
Hello World !

console

Les modifications ont été correctement apportées.

Pipe

Le pipe est une opération très puissante qui permet d'utiliser la sortie d'une commande comme entrée d'une autre. Pour bien comprendre, nous allons créer le fichier lignes.txt qui va contenir mille lignes.

for((i=1;i<=1000;i+=1)); do echo "Ligne $i"; done >> lignes.txt

bash

Si nous affichons le contenu du fichier, nous pouvons voir l'intégralité du contenu.

cat lignes.txt

bash

Mais cela n'est pas forcément pertinent lorsque l'on souhaite avoir les 10 premières ou dernières lignes du fichier. Dans ce cas, les commandes tail et head vont se révéler utiles.

La commande tail permet d'afficher les nn dernières lignes d'un texte en spécifiant l'argument -n. Mais comment appliquer cette commande non pas sur du texte mais sur le contenu d'un fichier ? C'est ainsi que le pipe intervient. Avec l'opérateur |, nous utiliserons le résultat d'une commande précédente (à gauche du pipe) comme entrée de la commande suivante (à droite du pipe).

Analysons la commande suivante.

cat lignes.txt | tail -n 10

bash

D'une part, la commande cat lignes.txt va afficher l'intégralité du fichier spécifié. D'autre part, la commande tail -n 10 va uniquement garder les 10 dernières lignes du texte mentionné. Puisqu'il n'y a pas de texte mentionné, c'est le pipe | qui fait la liaison et qui va automatiquement considérer la sortie de la première commande comme étant le texte à n'afficher que les 10 dernières lignes. Et comme prévu, nous obtenons bien le résultat escompté.

Ligne 991
Ligne 992
Ligne 993
Ligne 994
Ligne 995
Ligne 996
Ligne 997
Ligne 998
Ligne 999
Ligne 1000

console

Le fonctionnement est identique pour la commande head, qui affiche les premières lignes du fichier.

cat lignes.txt | head -n 10

bash

Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5
Ligne 6
Ligne 7
Ligne 8
Ligne 9
Ligne 10

console

Le pipe peut être appliqué à toute commande nécessitant des entrées de type texte. Par exemple, la commande grep permet de rechercher un contenu spécifique dans un ou plusieurs fichiers. Si l'on souhaite obtenir tous les mots commençant par Ligne 15, alors nous pouvons utiliser la commande grep 'Ligne 15' sur un ensemble de fichiers.

grep -i 'Ligne 15' lignes.txt 

bash


Ligne 15
Ligne 15
Ligne 150
Ligne 151
Ligne 152
Ligne 153
Ligne 154
Ligne 155
Ligne 156
Ligne 157
Ligne 158
Ligne 159

console

La commande grep peut également être utilisée avec le pipe.

cat lignes.txt | grep 'Ligne 15'

bash

Jusqu'ici, nous n'avons abordé qu'une infime partie des commandes Bash disponibles : vous pourrez trouver ici une liste détaillée de toutes les commandes Bash et de quelques utilitaires supplémentaires.

Quand doit-on utiliser Bash ?

Bien évidemment, la question ne se pose pas dès lors que l'on évolue dans un environnement Linux. Maintenant, il y a des situations où il est possible d'utiliser des langages de programmation (comme Python) plutôt que Bash : pour pouvoir faire ce choix, il faut garder à l'esprit que Bash ne nécessite pas d'installer un environnement d'exécution supplémentaire sur un système Linux.

À lire aussi : découvrez notre formation Cloud / DevOps

  • Automatisation de tâches système : avec sa capacité de scripting, Bash est idéal pour automatiser des tâches système répétitives ou complexes. C'est ainsi qu'il est régulièrement utilisé pour automatiser des tâches d'installation d'applications ou de configuration systèmes.
  • Automatisation de déploiements : Bash est également régulièrement utilisé dans les pipelines de déploiement, notamment pour les applications Web ou les logiciels qui seront amenés à être déployés sur des serveurs.
  • Scripts de démarrage et d'arrêt du système : avec les services systèmes, Bash se pose comme une référence pour la gestion et l'administration de ces derniers. Dans un environnement DevOps, les scripts Bash interviennent fréquemment lors du démarrage de serveurs pour préparer l'exécution d'applications sur ces derniers.
  • Environnement de développement : enfin, les développeurs vont également régulièrement utiliser Bash afin de configurer leurs environnements de développement. On retrouve ainsi beaucoup de commandes npm pour les développeurs Front, et beaucoup de commandes javac ou python pour les développeurs Back.

En conclusion, Bash est omniprésent dans le monde IT et intervient au-delà du contexte DevOps : maîtriser ce Shell permettra d'augmenter grandement sa productivité et permettra d'être beaucoup plus à l'aise pour effectuer des configurations systèmes.

Articles similaires

Helm : gestion de packages sur Kubernetes
Cloud / DevOps
2026-04-03
7 min

Helm : gestion de packages sur Kubernetes

Véritable gestionnaire de packages pour Kubernetes, Helm permet de définir, installer et mettre à jour des applications complexes sous forme de "charts", des packages réutilisables et paramétrables. Projet gradué de la Cloud Native Computing Foundation (CNCF), Helm est aujourd'hui utilisé par la grande majorité des organisations qui opèrent Kubernetes en production. Des entreprises comme Microsoft, Google ou encore Bitnami maintiennent des catalogues entiers de charts, facilitant le déploiement d'applications aussi diverses que PostgreSQL, Prometheus ou WordPress en quelques commandes.

Lire l'article
HashiCorp Vault : gérer les secrets
Cloud / DevOps
2026-04-01
9 min

HashiCorp Vault : gérer les secrets

Véritable coffre-fort numérique pour les infrastructures, HashiCorp Vault s'est imposé comme la référence du marché pour la gestion centralisée des secrets. Développé par HashiCorp, l'éditeur derrière Terraform et Consul, ce projet open source permet aux organisations de stocker, accéder et distribuer des secrets de manière sécurisée tout en maintenant une traçabilité complète des accès. Utilisé par des entreprises comme Adobe, Cisco ou encore Shopify, Vault est devenu un pilier des architectures zero-trust et des pratiques DevSecOps modernes.

Lire l'article
Istio : service Mesh sous Kubernetes
Cloud / DevOps
2026-03-30
7 min

Istio : service Mesh sous Kubernetes

Véritable couche d'infrastructure dédiée à la gestion du trafic réseau, un Service Mesh permet de contrôler, sécuriser et observer les communications entre microservices de manière transparente. Parmi les solutions disponibles, Istio s'est imposé comme la référence du marché. Développé initialement par Google, IBM et Lyft, ce projet open source est aujourd'hui utilisé par des entreprises comme Airbnb, eBay ou encore Salesforce pour gérer le trafic de leurs applications critiques sur Kubernetes.

Lire l'article