Aller au contenu
Administration Linux medium

Bourne Again Shell (Bash) : maîtriser le shell

18 min de lecture

logo bash

Bash est le shell par défaut sur la majorité des systèmes Unix tels que Linux et macOS et il joue un rôle essentiel dans l’administration des systèmes et l’automatisation des tâches. Grâce à sa flexibilité et à sa puissance, Bash permet aux utilisateurs de personnaliser leur environnement de travail et de le rendre plus efficace.

Dans ce guide, je vais vous montrer comment personnaliser et optimiser Bash à l’aide d’outils tels que bash-it, tout en explorant des astuces pour rendre votre terminal plus fonctionnel et adapté à vos besoins.

Bash, acronyme de “Bourne Again Shell”, a été créé en 1989 par Brian Fox dans le cadre du projet GNU. Conçu pour être un successeur amélioré du sh (le shell Bourne original), Bash a été développé avec l’objectif d’offrir des fonctionnalités avancées tout en restant compatible avec les scripts existants.

Initialement, Bash a été adopté principalement sur les systèmes Linux, en raison de son inclusion dans le projet GNU, garantissant une alternative libre aux shells propriétaires de l’époque. Sa flexibilité, combinée à des fonctionnalités comme la gestion des variables, la redirection de flux et les structures de contrôle, en a fait un choix de prédilection pour les administrateurs systèmes et développeurs.

Avec le temps, Bash est devenu le shell par défaut sur de nombreuses distributions Linux et même sur macOS jusqu’en 2019, où il a été remplacé par Zsh. Cependant, Bash reste toujours largement utilisé et apprécié pour sa stabilité et sa vaste compatibilité.

Comparé à d’autres shells tels que Zsh, Ksh et Tcsh, Bash se distingue par son équilibre entre simplicité et fonctionnalité. Cet historique d’évolution et d’adoption généralisée témoigne de la robustesse et de la polyvalence de Bash, qui continue d’être un pilier central dans l’administration des systèmes modernes.

L’un des avantages de Bash est qu’il est préinstallé sur la plupart des systèmes Linux et macOS, rendant son installation généralement inutile. Cependant, il peut être nécessaire de configurer Bash comme shell par défaut ou de vérifier sa version pour s’assurer que vous utilisez la plus récente.

Pour vérifier la version de Bash installée sur votre système, utilisez la commande suivante :

Fenêtre de terminal
bash --version

Cela vous permettra de voir la version actuelle et de savoir si une mise à jour est recommandée pour bénéficier des dernières fonctionnalités et correctifs.

Comment définir Bash comme shell par défaut sur Linux

Section intitulée « Comment définir Bash comme shell par défaut sur Linux »

Pour changer votre shell par défaut et le configurer sur Bash, utilisez la commande suivante :

Fenêtre de terminal
chsh -s $(which bash)

Cette commande modifie le fichier /etc/passwd pour que Bash soit lancé automatiquement chaque fois que vous ouvrez un terminal. Assurez-vous que le chemin vers Bash est correct et que vous avez les permissions nécessaires pour effectuer cette modification.

Personnaliser Bash : astuces pour le fichier .bashrc

Section intitulée « Personnaliser Bash : astuces pour le fichier .bashrc »

Le fichier .bashrc est un script de configuration exécuté à chaque ouverture d’une nouvelle session de terminal interactif non connecté. Il est l’un des éléments clés pour personnaliser l’environnement Bash et le rendre plus efficace et convivial.

Le fichier .bashrc est généralement situé dans votre répertoire personnel (~/.bashrc). Il permet de définir des variables d’environnement, des alias, des fonctions et des configurations spécifiques pour améliorer votre expérience utilisateur.

Les alias sont des raccourcis pour les commandes que vous utilisez fréquemment. Voici comment ajouter des alias dans votre fichier .bashrc :

Fenêtre de terminal
# Alias pour afficher les fichiers cachés en mode détaillé
alias ll='ls -la'
# Alias pour naviguer rapidement
alias ..='cd ..'
alias ...='cd ../..'
# Alias pour des commandes complexes
alias update='sudo apt update && sudo apt upgrade -y'

Après avoir ajouté des alias, rechargez le fichier .bashrc pour appliquer les changements :

Fenêtre de terminal
source ~/.bashrc

Si vous ne maitrisez pas le gestionnaire de paquets apt, je vous recommande de lire mon guide sur apt pour mieux comprendre son fonctionnement.

Le prompt est la ligne qui apparaît dans votre terminal avant que vous tapiez une commande. Vous pouvez le personnaliser en modifiant la variable PS1 :

Fenêtre de terminal
# Exemple de prompt personnalisé affichant l'utilisateur, l'hôte et le répertoire courant
export PS1='\u@\h:\w\$ '

Dans cet exemple :

  • \u représente le nom d’utilisateur.
  • \h représente le nom de l’hôte.
  • \w représente le répertoire de travail courant.

Pour ajouter des couleurs au prompt, utilisez des codes ANSI :

Fenêtre de terminal
export PS1='\[\e[32m\]\u@\h:\[\e[34m\]\w\[\e[0m\]\$ '

Ce code colore l’utilisateur et l’hôte en vert et le répertoire en bleu.

Les fonctions permettent d’automatiser des tâches complexes en regroupant plusieurs commandes. Par exemple, une fonction pour nettoyer un répertoire temporaire peut ressembler à ceci :

Fenêtre de terminal
clean_temp() {
rm -rf ~/temp/*
echo "Dossier temporaire nettoyé."
}

Ajoutez cette fonction à votre .bashrc, puis rechargez-le avec source ~/.bashrc pour l’utiliser.

Le fichier .bashrc permet également de définir des variables d’environnement pour configurer des comportements spécifiques. Par exemple :

Fenêtre de terminal
# Ajouter des répertoires au PATH
export PATH=$PATH:/usr/local/bin:/opt/scripts

Cette personnalisation via le fichier .bashrc vous permet de configurer votre environnement de travail pour mieux répondre à vos besoins, en rendant l’utilisation de Bash plus intuitive et puissante.

bash-it : framework pour personnaliser Bash facilement

Section intitulée « bash-it : framework pour personnaliser Bash facilement »

bash-it est un framework open-source qui simplifie et améliore la personnalisation de Bash. Il offre un ensemble de scripts, d’alias, de plugins et de thèmes qui rendent l’utilisation de Bash plus puissante et agréable, sans avoir besoin de configurer manuellement chaque élément.

bash-it regroupe et automatise des configurations avancées qui seraient fastidieuses à implémenter individuellement. Grâce à ce framework, vous pouvez rapidement ajouter des alias personnalisés, des complétions de commande, des fonctions et des thèmes pour embellir et enrichir votre terminal.

bash-it se compose de plusieurs éléments :

  • Alias : Raccourcis prédéfinis pour simplifier les commandes courantes.
  • Plugins : Modules qui ajoutent des fonctionnalités spécifiques (ex. : support Git, Docker).
  • Thèmes : Personnalisation du prompt pour rendre le terminal plus informatif et esthétique.
  • Complétions : Améliorations de l’autocomplétion pour des commandes complexes.

L’installation de bash-it est simple et permet de configurer rapidement un environnement de terminal personnalisé. Voici comment procéder pour installer et configurer bash-it sur votre système.

  1. Cloner le dépôt de bash-it : Pour installer bash-it, commencez par cloner le dépôt GitHub dans votre répertoire personnel.

    Fenêtre de terminal
    git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
  2. Lancer le script d’installation : Exécutez le script d’installation pour initialiser bash-it. Vous pouvez choisir de sauvegarder votre fichier .bashrc existant avant qu’il ne soit modifié.

    Fenêtre de terminal
    ~/.bash_it/install.sh

    Pendant l’installation, vous aurez la possibilité de choisir si vous souhaitez que bash-it modifie automatiquement votre fichier .bashrc pour activer les configurations par défaut.

  3. Activer bash-it : Si vous choisissez de ne pas modifier votre .bashrc automatiquement, vous devrez ajouter la ligne suivante manuellement pour activer bash-it :

    Fenêtre de terminal
    source ~/.bash_it/bash_it.sh
  4. Recharger la configuration : Pour appliquer les modifications, rechargez votre fichier .bashrc en utilisant la commande :

    Fenêtre de terminal
    source ~/.bashrc

bash-it est livré avec de nombreuses fonctionnalités prêtes à l’emploi. Vous pouvez personnaliser votre installation en activant ou désactivant des modules spécifiques.

Les alias sont stockés dans des fichiers individuels dans le dossier ~/.bash_it/aliases/enabled. Pour activer un alias, utilisez la commande :

Fenêtre de terminal
bash-it show alias
Alias Enabled? Description
ag [ ] the silver searcher (ag) aliases
ansible [ ] ansible abbreviations
apt [ ] Apt and dpkg aliases for Ubuntu and Debian distros.
atom [ ] Atom.io editor abbreviations
bash-it [ ] Aliases for the bash-it command (these aliases are automatically included with the "general" aliases)
bolt [ ] puppet bolt aliases
bundler [ ] ruby bundler
bash-it enable alias ansible

Cette commande active un fichier d’alias spécifique (par exemple, pour Git) qui facilite l’exécution de commandes courantes.

Les plugins ajoutent des fonctionnalités spécifiques à votre terminal. Pour activer un plugin, utilisez la commande suivante :

Fenêtre de terminal
bash-it show plugins
Plugin Enabled? Description
alias-completion [ ]
autojump [ ] Autojump configuration, see https://github.com/wting/autojump for more details
aws [ ] AWS helper functions
base [x] miscellaneous tools
...
bash-it enable plugin docker

Cette commande active le plugin Docker, qui fournit des commandes simplifiées et des complétions pour gérer vos conteneurs.

Les complétions de commande permettent à Bash de proposer des options lorsque vous commencez à taper une commande. Pour activer une complétion, utilisez :

Fenêtre de terminal
bash-it enable completion ssh

Cela active la complétion pour les commandes SSH, facilitant la saisie de vos commandes de connexion.

L’un des aspects les plus attrayants de bash-it est la facilité avec laquelle vous pouvez personnaliser l’apparence de votre terminal grâce à une grande variété de thèmes. Ces thèmes permettent de modifier le prompt pour afficher des informations essentielles, telles que l’utilisateur, le nom de la machine, le répertoire courant, l’état de Git et bien plus encore. Cette personnalisation rend l’environnement plus informatif et agréable à utiliser.

bash-it propose de nombreux thèmes prêts à l’emploi. Pour voir la liste complète des thèmes disponibles, vous pouvez parcourir le dossier ~/.bash_it/themes. Chaque sous-dossier contient un fichier .bash correspondant au thème.

Fenêtre de terminal
ls ~/.bash_it/themes
90210 codeword font modern powerline-naked sexy
agnoster cooperkid gallifrey modern-t powerline-plain simple
atomic cupcake githelpers.theme.bash modern-time powerturk sirup
axin demula gitline morris primer slick
bakke dos hawaii50 n0qorg pro standard
barbuk doubletime inretio newin pure tonka
base.theme.bash doubletime_multiline iterate norbu purity tonotdo
binaryanomaly doubletime_multiline_pyonly kitsune nwinkler radek tylenol
bira dulcie lambda nwinkler_random_colors rainbowbrite wanelo
bobby duru liquidprompt oh-my-posh ramses zitron
bobby-python easy luan p4helpers.theme.bash rana zork
brainy elixr mairan parrot redline
brunton emperor mbriggs pete rjorgenson
candy envy metal powerline robbyrussell
clean essential minimal powerline-multiline roderik

Certains des thèmes les plus populaires incluent powerline, bobby et pure.

Pour changer de thème, modifiez la variable BASH_IT_THEME dans votre fichier .bashrc. Par exemple, pour utiliser le thème powerline :

Fenêtre de terminal
export BASH_IT_THEME='powerline'

Ensuite, rechargez votre configuration pour appliquer le nouveau thème :

Fenêtre de terminal
source ~/.bashrc

Chaque thème peut être modifié pour inclure ou exclure certaines informations. Pour personnaliser un thème existant, localisez le fichier .bash correspondant dans le répertoire ~/.bash_it/themes et apportez les modifications nécessaires.

Par exemple, pour ajouter une information sur l’état de la batterie à votre prompt, vous pouvez éditer le fichier et ajouter un appel de fonction approprié :

Fenêtre de terminal
# Ajouter un segment d'état de la batterie
battery_status() {
if command -v acpi &> /dev/null; then
acpi -b | grep -o '[0-9]*%' | head -n 1
fi
}
export PS1='$(battery_status) '$PS1

fzf est un outil de recherche de fichiers en ligne de commande extrêmement performant et interactif, qui améliore considérablement la navigation dans le terminal. Voici comment l’installer, l’activer avec bash-it et configurer votre .bashrc pour une utilisation optimale.

Pour installer fzf, vous pouvez utiliser le gestionnaire de paquets de votre système ou le cloner directement depuis GitHub.

  • Ubuntu/Debian :

    Fenêtre de terminal
    sudo apt install fzf
  • Arch Linux :

    Fenêtre de terminal
    sudo pacman -S fzf
  • macOS avec Homebrew :

    Fenêtre de terminal
    brew install fzf

Si vous utilisez bash-it, l’intégration est encore plus facile grâce au plugin dédié. Pour activer le plugin fzf, utilisez la commande suivante :

Fenêtre de terminal
bash-it enable plugin fzf

Cette commande active le plugin fzf dans votre environnement bash-it et permet d’utiliser des commandes et des raccourcis pratiques liés à fzf.

Pour assurer un fonctionnement optimal de fzf, il est recommandé d’ajouter quelques lignes de configuration à votre fichier .bashrc. Voici ce que vous devez inclure :

Fenêtre de terminal
# Option pour utiliser Ctrl+R pour la recherche dans l'historique
source /usr/share/bash-completion/completions/fzf
source /usr/share/doc/fzf/examples/key-bindings.bash
export FZF_DEFAULT_OPTS="--height 40% --reverse --border"

Après avoir modifié votre fichier .bashrc, rechargez-le pour appliquer les changements :

Fenêtre de terminal
source ~/.bashrc

Écrire des scripts Bash : automatisation et bonnes pratiques

Section intitulée « Écrire des scripts Bash : automatisation et bonnes pratiques »

L’écriture de scripts Bash est une compétence essentielle pour automatiser les tâches répétitives et simplifier l’administration des systèmes. Dans ce chapitre, je vais brièvement introduire les concepts de base de l’écriture de scripts Bash et vous renvoyer vers mes guides pour des détails approfondis sur la création et la sécurisation des scripts.

Un script Bash est un fichier contenant une série de commandes qui sont exécutées en séquence. Ces scripts permettent d’automatiser des tâches complexes et de créer des processus reproductibles.

Un script Bash commence par la ligne de shebang, qui indique au système que le fichier doit être exécuté avec Bash :

#!/usr/bin/env bash
echo "Bonjour, ceci est un script Bash simple"

Cette première ligne #!/usr/bin/env bash doit être présente au début du fichier pour que le système sache quel interpréteur utiliser. Ensuite, des commandes et des instructions sont ajoutées pour former le corps du script.

Dans les scripts Bash, vous pouvez utiliser des variables pour stocker des valeurs et des paramètres pour rendre le script plus flexible.

#!/usr/bin/env bash
nom_utilisateur=$1
echo "Bienvenue, $nom_utilisateur!"

Ici, $1 représente le premier argument passé au script.

Les structures de contrôle telles que if, for et while permettent de contrôler le flux d’exécution du script.

#!/bin/bash
if [ -f "/etc/passwd" ]; then
echo "Le fichier /etc/passwd existe."
else
echo "Le fichier /etc/passwd n'existe pas."
fi

Pour exécuter un script, il doit être rendu exécutable :

Fenêtre de terminal
chmod +x mon_script.sh
./mon_script.sh

Pour apprendre à écrire correctement vos scripts et adopter de bonnes pratiques, je vous recommande de consulter mes guides détaillés :

Aller plus loin avec Bash : outils et personnalisation avancée

Section intitulée « Aller plus loin avec Bash : outils et personnalisation avancée »

Pour aller encore plus loin dans la personnalisation, envisagez l’intégration d’outils supplémentaires tels que asdf et direnv. asdf est un gestionnaire de versions qui vous permet de gérer facilement plusieurs versions de langages de programmation et d’outils, idéal pour les développeurs travaillant sur des projets variés. direnv est un utilitaire qui charge et décharge automatiquement des variables d’environnement spécifiques en fonction du répertoire courant, rendant la gestion des environnements de développement plus fluide et sans erreur.

Ces outils, combinés à bash-it, permettent de créer un environnement de développement avancé et personnalisé, parfaitement adapté à vos besoins. On arrive presque au même niveau que le shell zsh.