RousselTMLEARNING

Systèmes & Linux

Le shell Bash et les fichiers : navigation, redirections, pipes et traitement de texte

Maîtriser la ligne de commande Linux : chemins, manipulation de fichiers, jokers, redirections, pipes, recherche avec find et grep, traitement de texte avec sed, awk, sort et cut, archives tar et édition avec vim.

1. Se déplacer #

Chemins et navigation.

Chemins absolus et relatifs #

Chemins absolus et relatifs
Un chemin relatif dépend du répertoire courant ; un chemin absolu, jamais.

Un chemin absolu part de la racine (/etc/nginx/nginx.conf), un chemin relatif part du répertoire courant (../logs). ~ désigne le répertoire personnel, . le répertoire courant, .. le parent.

pwd                  # où suis-je ?
cd /var/log ; cd -   # aller puis revenir au répertoire précédent
ls -lah              # liste détaillée, fichiers cachés, tailles lisibles
ls -lt | head        # fichiers les plus récents
tree -L 2 /etc/nginx # arborescence sur 2 niveaux

Le prompt et l'historique #

history | grep systemctl   # retrouver une commande
!!                         # relancer la dernière commande (sudo !! si oubli de sudo)
Ctrl+R                     # recherche incrémentale dans l'historique
Ctrl+A / Ctrl+E            # début / fin de ligne
Tab                        # complétion des commandes et chemins

2. Manipuler les fichiers #

Créer, copier, déplacer, supprimer.

Commandes de base #

mkdir -p projet/{src,docs,tests}   # créer une arborescence
touch notes.txt                    # créer un fichier vide
cp -a /etc/nginx /etc/nginx.bak    # copier en préservant droits et dates
mv rapport.txt archives/           # déplacer ou renommer
rm -i fichier ; rm -r dossier      # supprimer (sans corbeille !)
ln -s /srv/app/current app         # lien symbolique
stat fichier ; file fichier        # métadonnées, type réel
Erreur Courante : rm -rf ne demande aucune confirmation et il n'y a pas de corbeille. Vérifiez la variable avant rm -rf "$DIR"/* : si elle est vide, la commande vise la racine.

Jokers (globbing) #

MotifCorrespond à
*.logtous les fichiers finissant par .log
app?.confapp1.conf, appA.conf
[0-9]*commence par un chiffre
{a,b}.txta.txt et b.txt (expansion, même s'ils n'existent pas)

C'est le shell qui développe les jokers avant d'exécuter la commande : echo *.log montre ce que la commande recevra.

Lire un fichier #

cat fichier            # tout afficher
less /var/log/syslog   # paginer (/ pour chercher, q pour quitter)
head -n 20 ; tail -n 50
tail -f /var/log/nginx/error.log   # suivre en temps réel
wc -l fichier          # nombre de lignes

3. Redirections et pipes #

Assembler de petites commandes.

Flux standard #

Flux standard d'une commande
Séparer stdout et stderr permet de garder les résultats et de jeter ou journaliser les erreurs.
FluxNuméroRedirection
Entrée standard (stdin)0< fichier
Sortie standard (stdout)1> fichier (écrase), >> fichier (ajoute)
Erreur standard (stderr)22> erreurs.log, 2>&1 (vers stdout)
find / -name '*.conf' 2>/dev/null     # masquer les erreurs de permission
./backup.sh > backup.log 2>&1         # tout dans un fichier
./backup.sh 2>&1 | tee backup.log     # afficher et enregistrer
sudo tee /etc/motd <<'EOF'            # écrire un fichier root (heredoc)
Serveur de production : soyez prudent.
EOF

Le pipe #

Pipeline de commandes
La philosophie Unix : des outils simples qui font une chose et se combinent.
Analyse d'un journal d'accès
En deux lignes, on trouve l'URL responsable des erreurs 500.
À savoir : sudo echo x > /etc/fichier échoue : la redirection est faite par votre shell, sans les droits root. Utilisez echo x | sudo tee /etc/fichier.

4. Chercher et transformer du texte #

find, grep, sed, awk et compagnie.

Trouver des fichiers #

find /var/log -name '*.log' -mtime -1          # modifiés depuis 24 h
find / -xdev -type f -size +500M 2>/dev/null   # gros fichiers sur la partition racine
find /srv -user www-data -perm -o+w            # fichiers modifiables par tous
find /tmp -type f -mtime +7 -delete            # nettoyer
locate nginx.conf                              # recherche rapide par index (updatedb)

Chercher dans les fichiers #

grep -i error /var/log/syslog
grep -rn 'listen' /etc/nginx/          # récursif avec numéros de ligne
grep -v '^#' sshd_config | grep -v '^$' # configuration sans commentaires ni lignes vides
grep -E 'error|fail' -c app.log        # expression étendue, compter
zgrep 'Out of memory' /var/log/syslog*.gz

Transformer #

cut -d: -f1,7 /etc/passwd                  # colonnes 1 et 7, séparateur :
sort -t: -k3 -n /etc/passwd                # trier numériquement sur la 3e colonne
sort | uniq -c | sort -rn                  # compter les occurrences
tr 'a-z' 'A-Z' < fichier                   # remplacer des caractères
sed -i.bak 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config   # remplacer en place, avec sauvegarde
sed -n '10,20p' fichier                    # afficher les lignes 10 à 20
awk -F: '$3 >= 1000 {print $1}' /etc/passwd # utilisateurs « humains »
awk '{s += $10} END {print s/1024/1024 " Mo"}' access.log   # somme d'une colonne
diff -u ancien.conf nouveau.conf           # comparer deux fichiers
Bonne Pratique : Avant un sed -i sur un fichier de configuration, testez sans -i pour voir le résultat, et gardez une copie (-i.bak).

5. Archives et édition #

tar, compression et vim.

Archiver et compresser #

tar -czf etc-$(date +%F).tar.gz /etc     # créer une archive gzip
tar -tzf etc-2026-10-26.tar.gz | head    # lister le contenu
tar -xzf archive.tar.gz -C /tmp/restore  # extraire ailleurs
tar -cJf logs.tar.xz /var/log/app        # compression xz (plus forte)
zip -r site.zip /srv/www ; unzip site.zip
gzip -9 gros.log ; zcat gros.log.gz | less

Survivre dans vim #

Modes de vim
Perdu dans vim ? Échap, puis :q! pour quitter sans enregistrer.
ToucheAction
ipasser en mode insertion
Échaprevenir en mode normal
:w / :q / :wq / :q!enregistrer / quitter / les deux / quitter sans enregistrer
/motif, nchercher, occurrence suivante
dd, yy, pcouper, copier, coller une ligne
uannuler
:%s/ancien/nouveau/gremplacer partout

nano est plus simple pour débuter (raccourcis affichés en bas). Choisissez votre éditeur par défaut avec sudo update-alternatives --config editor ou la variable EDITOR.

Articles liés

Architecture d'un système Linux : noyau, démarrage et arborescence

Comprendre comment fonctionne un serveur Linux : noyau et espace utilisateur, séquence de démarrage UEFI, GRU…

Utilisateurs, groupes, sudo et permissions sous Linux

Gérer les comptes Linux (useradd, usermod, passwd, chage), les groupes, sudo et visudo, les permissions rwx e…

Paquets, services systemd, journaux et tâches planifiées

Installer et mettre à jour des logiciels avec apt et dnf, piloter les services avec systemctl, écrire une uni…

Pour aller plus loin