01 - Le terminal, bash et zsh
Ce que tu vas apprendre
- La différence entre bash et zsh (et pourquoi ca compte)
- Naviguer dans le système de fichiers sans perdre le nord
- Les raccourcis clavier qui te feront gagner des heures
- L'historique des commandes et les alias
Prerequisites
Avoir un terminal ouvert (WSL, macOS Terminal, ou un serveur Linux). Voir l'article précédent si tu ne sais pas par ou commencer.
Le terminal, c'est pas une punition
Je sais que le terminal fait peur. Un ecran noir, pas de boutons, pas de menus. Ca sent les annees 80. Mais une fois que tu maitrises les bases, tu vas plus vite qu'avec n'importe quelle interface graphique. Je ne dis pas ca pour faire le geek. C'est juste un fait : taper mv *.json backup/ prend 2 secondes. Le faire a la souris avec un glisser-deposer sur 47 fichiers, c'est penible.
bash vs zsh : le match
Bash (Bourne Again Shell) est le shell par défaut sur la plupart des distributions Linux. Zsh (Z Shell) est le shell par défaut sur macOS depuis Catalina. Les deux sont tres proches :
bash# Verifier ton shell actuel
echo $SHELL
# /bin/bash ou /bin/zsh
# Verifier les shells disponibles
cat /etc/shells
# /bin/sh
# /bin/bash
# /bin/zsh
# /usr/bin/fish
# Changer de shell (permanent)
chsh -s /bin/zsh
En pratique, 95% de ce que tu ecris en bash fonctionne en zsh. Les différences qui comptent :
| Fonctionnalite | bash | zsh |
|---|---|---|
| Autocompletion | Basique | Avancee (menus, fuzzy) |
| Globbing | Standard | Etendu (**/*.js) |
| Prompt | Simple | Tres personnalisable |
| Correction typo | Non | Oui (sl -> ls ?) |
| Themes/plugins | Manuels | Oh My Zsh |
Mon avis : apprends bash d'abord (c'est ce que tu trouveras sur les serveurs), puis utilise zsh sur ta machine de dev pour le confort.
Naviguer comme un pro
Les commandes de base, tu les connais peut-etre deja. Mais il y a des raccourcis que meme des devs seniors ignorent :
bash# Les basiques
pwd # Affiche le repertoire courant
ls # Liste le contenu
cd /var/log # Aller dans /var/log
# Les raccourcis qui changent la vie
cd ~ # Aller dans ton home (/home/nicolas)
cd # Pareil que cd ~ (sans argument)
cd - # Retourner au repertoire precedent
cd .. # Remonter d'un niveau
cd ../.. # Remonter de deux niveaux
# Tab completion : tape le debut et appuie sur Tab
cd /etc/apa[TAB] # Complete en /etc/apache2/
ls /usr/lo[TAB] # Complete en /usr/local/
Le cd - est sous-estime. Quand tu alternes entre deux répertoires (genre ton code et tes logs), ca évité de retaper le chemin complet a chaque fois :
bash$ cd /var/log/nginx
$ cd /home/nicolas/project/src
$ cd -
/var/log/nginx
$ cd -
/home/nicolas/project/src
Les raccourcis clavier indispensables
C'est la que tu passes de débutant a efficace. Ces raccourcis fonctionnent dans bash et zsh :
bash# Navigation dans la ligne
Ctrl+A # Aller au debut de la ligne
Ctrl+E # Aller a la fin de la ligne
Ctrl+U # Effacer du curseur jusqu'au debut
Ctrl+K # Effacer du curseur jusqu'a la fin
Ctrl+W # Effacer le mot precedent
Alt+B # Reculer d'un mot
Alt+F # Avancer d'un mot
# Controle
Ctrl+C # Annuler la commande en cours
Ctrl+D # Fermer le terminal (ou EOF)
Ctrl+L # Effacer l'ecran (comme clear)
Ctrl+Z # Suspendre le processus en cours
# Recherche
Ctrl+R # Recherche dans l'historique (reverse search)
Le Ctrl+R merite qu'on s'y attarde. Tu appuies sur Ctrl+R, tu tapes un bout de commande, et bash te retrouve la dernière commande qui correspond. Tu rappuies sur Ctrl+R pour remonter dans l'historique. Quand tu l'as, tu appuies sur Entree.
bash$ (reverse-i-search)`docker': docker compose up -d
# J'ai tape "docker" et il m'a retrouve ma derniere commande docker
L'historique, ta mémoire externe
L'historique des commandes est stocke dans un fichier (~/.bash_history ou ~/.zsh_history). Voici comment l'exploiter :
bash# Voir l'historique complet
history
# Chercher dans l'historique
history | grep "docker"
# Repeter la derniere commande
!!
# Repeter avec sudo (classique : tu oublies sudo, tu fais sudo !!)
$ apt update
# Permission denied
$ sudo !!
sudo apt update
# Ca marche
# Reutiliser le dernier argument
$ mkdir -p /opt/myapp/config
$ cd !$
cd /opt/myapp/config
# Executer la commande numero 142 de l'historique
!142
# Configurer la taille de l'historique
echo 'HISTSIZE=10000' >> ~/.bashrc
echo 'HISTFILESIZE=20000' >> ~/.bashrc
Le combo sudo !! est celui que j'utilise le plus. Tu tapes une commande, ca dit "permission denied", tu fais sudo !! et c'est regle.
Les alias : tes raccourcis personnels
Un alias, c'est un raccourci pour une commande que tu tapes souvent :
bash# Definir un alias (temporaire, disparait a la fermeture du terminal)
alias ll='ls -la'
alias gs='git status'
alias dc='docker compose'
# Voir tous les alias actifs
alias
# Supprimer un alias
unalias ll
Pour rendre les alias permanents, tu les mets dans ton fichier de config :
bash# Pour bash
nano ~/.bashrc
# Pour zsh
nano ~/.zshrc
# Ajouter tes alias
alias ll='ls -lah'
alias gs='git status'
alias gp='git push'
alias dc='docker compose'
alias k='kubectl'
alias ..='cd ..'
alias ...='cd ../..'
# Recharger la config apres modification
source ~/.bashrc # ou source ~/.zshrc
.bashrc et .zshrc : le fichier qui personnalise tout
Ce fichier est exécuté a chaque ouverture de terminal. C'est la que tu mets tes alias, tes variables d'environnement, et tes personnalisations :
bash# Exemple de .bashrc utile pour un dev
# ---
# Alias de navigation
alias ll='ls -lah --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
# Alias git
alias gs='git status'
alias gl='git log --oneline -10'
alias gd='git diff'
# Alias Docker
alias dc='docker compose'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'
# Prompt personnalise (affiche le repertoire courant + branche git)
parse_git_branch() {
git branch 2>/dev/null | grep '\*' | sed 's/* //'
}
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[33m\] $(parse_git_branch)\[\033[00m\]\$ '
# Historique ameliore
HISTSIZE=10000
HISTFILESIZE=20000
HISTCONTROL=ignoredups:erasedups # Pas de doublons
Un conseil : versionne ton .bashrc ou .zshrc dans un repo git "dotfiles". Le jour ou tu changes de machine, tu recuperes ta config en 30 secondes.
Si tu cherches des exemples de dotfiles bien structures, paltemps.fr partage des ressources utiles pour les devs.
Résumé
- bash est le standard sur les serveurs, zsh est plus confortable pour le quotidien
cd -pour alterner entre deux répertoires,Tabpour autocompleterCtrl+Rpour chercher dans l'historique,!!pour répéter la dernière commande- Les alias dans
.bashrc/.zshrcte font gagner des heures par semaine - Versionne ton fichier de config dans un repo dotfiles
Precedent : Introduction | Suivant : Fichiers et répertoires