Personnalisation de Bash
Le shell Linux sert d’interface entre l’utilisateur et le système d’exploitation. Différents shells existent, comme bash, zsh, fish… Mais bash étant par défaut sur la plupart des distributions Linux, c’est sur ce dernier que je vais me focaliser.
Explication
Au démarrage d’une session shell, différents fichiers se chargent automatiquement. Cela permet de charger les configurations nécessaires au fonctionnement du prompt, comme son apparence, les variables d’environnement…
Dans le home directory, se trouvent des fichiers cachés contenant ces informations :
- le fichier
.profile, pour déterminer l’emplacement des binaires/commandes que l’on utilise, et le shell qui est utilisé (dans notre cas, bash) - le fichier
.bashrc, pour configurer bash (l’apparence du prompt, la longueur de l’historique des commandes, le chargement des complétions de commandes…)
Fichier .bashrc
# ─── .bashrc ─────────────────────────────────────────────────────────────
# if not interactive
case $- in
*i*) ;;
*) return ;;
esac
# global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# history
HISTCONTROL=ignoreboth
HISTSIZE=10000
HISTFILESIZE=10000
shopt -s histappend
# options
shopt -s autocd
shopt -s checkwinsize
shopt -s globstar
# colors
case "$TERM" in
*-256color)
export COLORTERM=truecolor
;;
esac
# ls colors
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
fi
# envman
[[ -s "$HOME/.config/envman/load.sh" ]] && source "$HOME/.config/envman/load.sh"
# aliases
[[ -f ~/.bash_aliases ]] && . "$HOME/.bash_aliases"
# solus
[[ -f "/usr/share/defaults/etc/profile.d/50-prompt.sh" ]] && . "/usr/share/defaults/etc/profile.d/50-prompt.sh"
# prompt
case "$TERM" in
xterm* | rxvt*)
PS1="\[\e]0;\u@\h: \w\a\]$PS1"
;;
*) ;;
esac
# completion
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fiFichier .bash_aliases
Le fichier .bashrc est préconfiguré pour charger un fichier personnalisé, appelé .bash_aliases. C’est ce dernier que nous allons créer et y ajouter nos personnalisations, notamment les aliases, qui permettent de se créer des “raccourcis” de commande, ou des fonctions. Le fichier est lu comme un script, il est donc possible d’y placer des conditions, ou des boucles.
Là encore, le plus simple, c’est que je vous partage le fichier que j’utilise.
Il est utilisable aussi bien pour votre user que pour root. Attention dans ce cas, le fichier ne se charge pas par défaut. Il faut ajouter dans le fichier .bashrc de root les lignes suivantes :
# aliases
[[ -f ~/.bash_aliases ]] && . ~/.bash_aliasesMon fichier .bash_aliases se divise en plusieurs parties :
- Une coloration spécifique pour certains fichiers/dossiers cachés dans les listings (
LS_COLORS) - Un paramètre pour ignorer la casse lors de la saisie (remplace automatiquement les caractères concernés lors d’une tabulation)
- La définition de certaines variables d’environnement (langue, éditeur par défaut)
- La gestion de sudo (pour la suite du fichier, et pour faire
suau lieu desudo -spour passer root) - La liste des aliases de base que j’utilise
- Des aliases supplémentaires pour des applications spécifiques, chargés uniquement si les applications sont installées
- Quelques fonctions, dans le cas où un simple alias est trop limitant
- Une transformation automatique des scripts présents dans
~/Documents/scriptsen aliases
Vous pouvez le récupérer directement sur github en suivant ce lien.
Le contenu du fichier :
# ─── .bash_aliases ───────────────────────────────────────────────────────
# ls colors
hidden=".gitignore .history .old"
for file in $hidden; do
export LS_COLORS="$LS_COLORS:*$file=00;90"
done
# options
if [[ $- == *i* ]]; then
bind 'set colored-stats on' # Couleurs lors de la complétion
bind 'set completion-ignore-case on' # Ignorer la casse lors de la complétion
bind 'set show-all-if-unmodified on' # Affiche les correspondances immédiatement
fi
# prompt
if [[ "$EUID" -eq 0 ]]; then
PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
else
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
fi
# variables
export LANG=fr_FR.UTF-8
export LANGUAGE=$LANG
export LC_ALL=$LANG
export EDITOR=vim
export VISUAL=$EDITOR
# ─── aliases ─────────────────────────────────────────────────────────────
alias ls='ls --color=auto' # Ajoute la couleur
alias l='ls -lh' # Liste détaillée
alias la='ls -lhA' # Liste avec les fichiers cachés
alias lr='ls -lLhR' # Liste en récursif
alias lra='ls -lhRA' # Liste en récursif avec les fichiers cachés
alias lrt='ls -lLhrt' # Liste par date
alias lrta='ls -lLhrtA' # Liste par date avec les fichiers cachés
alias dus='du -sh * | sort -hr' # Tri par taille
alias grep='grep -i --color=auto' # Grep sans sensibilité à la casse
alias zgrep='zgrep -i --color=auto' # Grep dans les fichiers compressés
alias psp='ps -eaf | grep -v grep | grep' # Chercher un process (psp <nom>)
alias iostat='iostat -m --human' # iostat lisible
alias ifc='ip -br -c addr | grep -vw lo' # Adresses IP (ifconfig obsolète)
alias ssp='ss -tunlH | grep' # Chercher un port (ssp <port>)
alias pubip='curl -s -4 https://ipecho.net/plain ; echo' # IP publique
alias df='df -h -x tmpfs -x devtmpfs -x overlay' # df sans montages inutiles
alias halt='sudo halt -p' # Arrêt système
alias reboot='sudo reboot' # Redémarrage
# sudo
[[ "$EUID" -ne 0 ]] && alias root='sudo -s'
# ssh keygen
alias genkey='ssh-keygen -t ed25519 -a 100'
alias genkeyrsa='ssh-keygen -t rsa -b 4096 -a 100'
# ─── applications facultatives ───────────────────────────────────────────
# apt : gestionnaire de paquets deb
if command -v apt &>/dev/null; then
alias apt='sudo apt'
alias upgrade='sudo apt update && sudo apt full-upgrade && sudo apt -y autoremove'
fi
# btop / htop : top amélioré
if command -v btop &>/dev/null; then
alias top='btop'
elif command -v htop &>/dev/null; then
alias top='htop'
fi
# dnf : gestionnaire de paquets rpm
if command -v dnf &>/dev/null; then
alias dnf='sudo dnf'
alias upgrade='sudo dnf -y upgrade && sudo dnf -y autoremove'
fi
# duf : df amélioré
if command -v duf &>/dev/null; then
alias df='duf -hide special --hide-mp /boot'
fi
# dust : du amélioré
if command -v dust &>/dev/null; then
alias dus='dust -rb'
fi
# eopkg : gestionnaire de paquets solus
if command -v eopkg &>/dev/null; then
alias eo='sudo eopkg'
alias upgrade='sudo eopkg up && sudo eopkg rmo'
fi
# fd : find amélioré
if command -v fdfind &>/dev/null; then
alias fd='fdfind -HI'
export FZF_DEFAULT_COMMAND='fdfind -HI'
elif command -v fd &>/dev/null; then
alias fd='fd -HI'
export FZF_DEFAULT_COMMAND='fd -HI'
fi
# fzf : recherche avancée avec thème Catppuccin Mocha
if command -v fzf &>/dev/null; then
eval "$(fzf --bash)"
export FZF_DEFAULT_OPTS=" \
--color=bg+:#313244,bg:#1E1E2E,spinner:#F5E0DC,hl:#F38BA8 \
--color=fg:#CDD6F4,header:#F38BA8,info:#CBA6F7,pointer:#F5E0DC \
--color=marker:#B4BEFE,fg+:#CDD6F4,prompt:#CBA6F7,hl+:#F38BA8 \
--color=selected-bg:#45475A \
--color=border:#6C7086,label:#CDD6F4"
fi
# herdr : émulateur de terminal
if command -v herdr &>/dev/null; then
alias hr='herdr'
alias hrstop='herdr session stop default'
fi
# icdiff : diff amélioré
if command -v icdiff &>/dev/null; then
alias diff='icdiff -N'
elif command -v colordiff &>/dev/null; then
alias diff='colordiff'
fi
# ncdu : équivalent à TreeSize
if command -v ncdu &>/dev/null; then
alias ncdu='ncdu --color dark'
fi
# procs : ps amélioré
if command -v procs &>/dev/null; then
alias psp='procs'
fi
# rg : plus performant que grep
if command -v rg &>/dev/null; then
alias rg='rg -i --no-ignore'
fi
# tty-clock : horloge en CLI
if command -v tty-clock &>/dev/null; then
alias clock='tty-clock -c -f %d/%m/%Y'
fi
# ufw : firewall simplifié
if command -v ufw &>/dev/null; then
alias ufw='sudo ufw'
alias ufws='sudo ufw status numbered'
fi
# vim : vi amélioré
if command -v vim &>/dev/null; then
alias vi='vim -O'
fi
# zed : éditeur de code
if command -v zed &>/dev/null; then
alias e='zed'
elif command -v zedit &>/dev/null; then
alias e='zedit'
fi
# zoxide : cd amélioré
if command -v zoxide &>/dev/null; then
eval "$(zoxide init bash)"
fi
# ─── fonctions ───────────────────────────────────────────────────────────
# cleanlog : nettoyer les logs systemd (cleanlog <jours>)
cleanlog() { [[ -n "$1" ]] && sudo journalctl --vacuum-time="${1}"d; }
# cpsave : copier un fichier ou dossier avec suffixe .old
cpsave() { cp -Rp "$1" "${1%/}.old"; }
# md5 : MD5 d'une chaîne
md5() { printf '%s' "$1" | md5sum | cut -d' ' -f1; }
# tarc : créer une archive tar.gz
tarc() { for file in "$@"; do tar czvf "${file%/}.tar.gz" "$file"; done; }
# tarx : décompresser une archive tar
tarx() { for file in "$@"; do tar xvf "$file"; done; }
# diskbench : tester la vitesse d'écriture disque
diskbench() {
dd if=/dev/zero of=testfile bs=64M count=16 oflag=direct status=progress
rm testfile
}
# webi : gestionnaire de paquets
webinstall() {
curl -sS https://webi.sh/webi | sh
source "$HOME/.config/envman/PATH.env"
}
# zipd : créer une archive zip par dossier/fichier donné
zipd() { for file in "$@"; do /usr/bin/zip -r "${file%/}.zip" "$file"; done; }
# ─── scripts ─────────────────────────────────────────────────────────────
# Transforme les scripts en alias
scripts=~/Documents/scripts
if [[ -d $scripts ]]; then
for i in "$scripts"/*; do
scr=${i##*/}
# shellcheck disable=SC2139,SC2086
[[ -f "$scripts/$scr/$scr.sh" ]] && alias $scr="$scripts/$scr/$scr.sh"
done
fiNote
Le dernier bloc, scripts, parcourt le dossier ~/Documents/scripts et crée automatiquement un alias pour chacun d’eux, du moment qu’il respecte la convention <nom>/<nom>.sh
Les aliases de base :
| Commande | Description |
|---|---|
| l | Liste les fichiers et les répertoires |
| la | Même chose que l, dont les cachés |
| lr | Liste les fichiers et les répertoires en récursif |
| lra | Même chose que lr, dont les cachés |
| lrt | Liste les fichiers et les répertoires dans l’ordre chronologique |
| lrta | Même chose que lrt, dont les cachés |
| grep | Ajoute la gestion de la couleur à grep |
| zgrep | Même chose pour zgrep (grep dans les fichiers compressés) |
| psp | Suivi d’une chaîne, permet de rechercher rapidement un process |
| iostat | Commande iostat, mais plus lisible |
| ifc | Utilise le programme ip (ifconfig n’existe plus sous Debian) |
| ssp | Suivi d’une chaîne, permet de rechercher rapidement un port d’écoute |
| pubip | Affiche rapidement l’IP publique de la machine |
| df | Commande df, mais sans les volumes temporaires |
| halt | Permet l’arrêt de la machine et non seulement le système |
| reboot | Ajoute sudo devant la commande reboot |
| root | Permet de se connecter en root via sudo |
| apt | Ajoute sudo et la commande upgrade |
| genkey | Génère une clé au format ed25519 (plus sécurisé que rsa) |
| genkeyrsa | Génère une clé au format rsa en 4096 bits |
Les aliases actifs uniquement dans le cas où les applications sont installées :
| Commande | Description |
|---|---|
| diff | Remplace la commande par icdiff (colordiff prend le relais à défaut) |
| df | duf est un df amélioré |
| dus | Lance dust, la commande du améliorée |
| fd | Outil équivalent à find mais bien plus simple à utiliser |
| fzf | fzf est un outil de recherche avancé |
| top | Remplace la commande top par btop (ou htop à défaut) |
| hr | Lance herdr, un multiplexeur de terminal pour agents de code |
| hrstop | Arrête la session herdr par défaut |
| ncdu | ncdu est un équivalent de Treesize |
| psp | Remplace la commande par procs, plus lisible et plus rapide |
| rg | ripgrep est un grep récursif lisible |
| clock | Lance tty-clock, un petit outil pour afficher l’heure |
| ufw | ufw est un Firewall accessible |
| ufws | Affiche le status de ufw, avec les règles numérotées |
| vi | vim avec le split vertical actif |
| e | Ouvre Zed (ou zedit à défaut), l’éditeur de code |
| eo | Ajoute sudo devant eopkg (distributions Solus) |
| z | zoxide est un cd intélligent |
Et enfin, les fonctions :
| Commande | Description |
|---|---|
| cleanlog | Supprimer les logs systemd en spécifiant le nombre de jours |
| cpsave | Créer une copie en .old d’un fichier ou d’un dossier spécifié |
| md5 | Calculer le hash MD5 d’une chaîne de caractères |
| tarc | Créer un tar.gz d’un ou plusieurs fichiers ou dossiers passés en paramètre |
| tarx | Pour extraire un ou plusieurs tar.gz passés en paramètre |
| diskbench | Tester la vitesse du disque courant en créant un fichier |
| webinstall | Installe webi, un gestionnaire de paquets |
| zipd | Facilite l’utilisation de la commande zip (zip <fichier>) |