Linux : texte, éditeurs et redirections
Linux traite le texte comme un flux : des petits programmes lisent du texte, le transforment, et le passent au suivant. Combiner ces programmes est l’un des grands atouts du système. Pour écrire des scripts, voir Bash : premiers scripts et Bash : redirections et pipes.
Les trois flux
Section intitulée « Les trois flux »| Flux | Numéro | Rôle | Par défaut |
|---|---|---|---|
| stdin | 0 | Entrée standard | Clavier |
| stdout | 1 | Sortie standard | Écran |
| stderr | 2 | Sortie d’erreurs | Écran |
Redirections
Section intitulée « Redirections »ls /etc > liste.txt # sortie vers un fichier (ÉCRASE)ls /var >> liste.txt # ajoute à la finsort < desordre.txt # lit l'entrée depuis un fichiercommande 2> erreurs.log # erreurs vers un fichiercommande > sortie.log 2>&1 # sortie ET erreurs dans le même fichiercommande &> tout.log # idem (bash)commande > /dev/null # jeter la sortiecommande 2> /dev/null # jeter les erreurscommande > /dev/null 2>&1 # tout jeter| Redirection | Effet |
|---|---|
> |
Écrit (écrase) |
>> |
Ajoute |
< |
Lit depuis un fichier |
2> |
Redirige les erreurs |
2>&1 |
Envoie les erreurs là où va la sortie standard |
Les tubes (|)
Section intitulée « Les tubes (|) »Un tube envoie la sortie d’une commande vers l’entrée de la suivante :
ls -l /etc | less # lire page par pageps aux | grep nginx # filtrercat /var/log/auth.log | grep "Failed" | wc -l # compter les échecsdu -sh /var/* 2>/dev/null | sort -h | tail -5 # les 5 plus gros dossiershistory | grep sshLe principe : chaque programme fait une chose, on les enchaîne.
Les outils de base
Section intitulée « Les outils de base »| Commande | Rôle | Exemple |
|---|---|---|
grep |
Filtrer des lignes | grep -i "erreur" app.log |
sort |
Trier | sort -n nombres.txt, sort -u (sans doublons) |
uniq |
Supprimer les doublons consécutifs | sort fichier | uniq -c (compter) |
wc |
Compter lignes, mots, octets | wc -l fichier |
cut |
Extraire des colonnes | cut -d: -f1 /etc/passwd |
head / tail |
Début / fin | tail -n 20 app.log |
tr |
Remplacer des caractères | echo "A B" | tr ' ' '_' |
tee |
Écrire dans un fichier et afficher | commande | tee sortie.log |
xargs |
Transformer l’entrée en arguments | find . -name "*.tmp" | xargs rm |
diff |
Comparer deux fichiers | diff -u ancien.txt nouveau.txt |
Exemples concrets
Section intitulée « Exemples concrets »cut -d: -f1 /etc/passwd | sort # liste des comptesgrep -c "" fichier.txt # nombre de lignesawk '{print $1}' acces.log | sort | uniq -c | sort -rn | head # adresses les plus fréquentesgrep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | headsort fichier.txt | uniq -d # lignes en doublediff -u /etc/hosts /etc/hosts.sauvegardesed et awk : l’essentiel
Section intitulée « sed et awk : l’essentiel »sed : remplacer
Section intitulée « sed : remplacer »sed 's/ancien/nouveau/' fichier.txt # première occurrence de chaque lignesed 's/ancien/nouveau/g' fichier.txt # toutes les occurrencessed -i 's/ancien/nouveau/g' fichier.txt # MODIFIE le fichier en placesed -i.bak 's/ancien/nouveau/g' fichier.txt # en place, avec copie de sauvegardesed -n '10,20p' fichier.txt # lignes 10 à 20sed '/^#/d' fichier.conf # supprimer les commentairessed '/^$/d' fichier.txt # supprimer les lignes videssed -i modifie le fichier définitivement : tester d’abord sans -i, ou utiliser -i.bak.
awk : colonnes et calculs
Section intitulée « awk : colonnes et calculs »awk '{print $1}' fichier.txt # première colonneawk -F: '{print $1, $3}' /etc/passwd # séparateur « : », colonnes 1 et 3awk '$3 > 1000 {print $1}' donnees.txt # filtrer sur une valeurawk '{somme += $2} END {print somme}' ventes.txtawk 'NR>1' fichier.csv # sans l'en-têteExpressions régulières (aperçu)
Section intitulée « Expressions régulières (aperçu) »| Motif | Correspond à |
|---|---|
. |
N’importe quel caractère |
* |
Zéro ou plus du précédent |
^ / $ |
Début / fin de ligne |
[abc] |
Un des caractères |
| (avec -E) |
Ou |
+, ? (avec -E) |
Un ou plus, zéro ou un |
grep "^root" /etc/passwdgrep -E "^(root|alice):" /etc/passwdgrep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" acces.logLes caractères spéciaux d’une expression régulière sont différents des jokers du shell (*.txt) : mettre l’expression entre guillemets pour que le shell n’y touche pas.
Éditeurs de texte en terminal
Section intitulée « Éditeurs de texte en terminal »nano : le plus simple
Section intitulée « nano : le plus simple »nano fichier.txtsudo nano /etc/hosts| Raccourci | Action |
|---|---|
Ctrl+O puis Entrée |
Enregistrer |
Ctrl+X |
Quitter |
Ctrl+W |
Rechercher |
Ctrl+K / Ctrl+U |
Couper la ligne / coller |
Ctrl+G |
Aide |
Alt+U |
Annuler |
Les raccourcis sont affichés en bas de l’écran (^ = Ctrl). Pour un fichier de configuration système, utiliser sudo nano ; pour définir nano comme éditeur par défaut : export EDITOR=nano (ou sudo update-alternatives --config editor).
vim : puissant, à apprendre
Section intitulée « vim : puissant, à apprendre »vim fichier.txt # (sudo apt install vim ; vi est présent par défaut)vim est modal : le clavier fait des choses différentes selon le mode.
| Mode | Accès | Usage |
|---|---|---|
| Normal | Échap |
Se déplacer, copier, supprimer |
| Insertion | i (avant le curseur), a (après), o (nouvelle ligne) |
Écrire du texte |
| Commande | : |
Enregistrer, quitter, chercher |
Survie minimale :
| Besoin | Touches |
|---|---|
| Écrire | i, taper, Échap |
| Enregistrer et quitter | Échap puis :wq puis Entrée |
| Quitter sans enregistrer | Échap puis :q! puis Entrée |
| Enregistrer seulement | :w |
| Chercher | /motif puis Entrée (n : suivant) |
| Supprimer une ligne | dd |
| Copier / coller une ligne | yy / p |
| Annuler / rétablir | u / Ctrl+R |
| Aller à la fin / au début du fichier | G / gg |
| Remplacer partout | :%s/ancien/nouveau/g |
Savoir quitter vim (Échap, :q!) évite bien des déconvenues sur un serveur. vimtutor lance un tutoriel interactif de 30 minutes.
Éditeurs graphiques ou à distance
Section intitulée « Éditeurs graphiques ou à distance »Sur un poste de développement, VS Code (avec l’extension Remote - SSH) permet d’éditer des fichiers d’un serveur distant ; en ligne de commande pure, nano suffit pour les fichiers de configuration.
Modifier un fichier de configuration : méthode
Section intitulée « Modifier un fichier de configuration : méthode »- Sauvegarder :
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.sauvegarde. - Éditer :
sudo nano /etc/ssh/sshd_config. - Vérifier la syntaxe si le service le permet (
sudo sshd -t,sudo nginx -t). - Recharger :
sudo systemctl reload ssh. - Tester (sur un serveur distant : depuis une seconde session, avant de fermer la première).
- En cas de problème : restaurer la sauvegarde.
Pour comparer ses modifications : diff -u /etc/ssh/sshd_config.sauvegarde /etc/ssh/sshd_config. Pour versionner sa configuration : etckeeper (sudo apt install etckeeper) place /etc sous Git.
Variables et substitution
Section intitulée « Variables et substitution »nom="Alice"echo "Bonjour $nom"fichiers=$(ls *.txt | wc -l) # résultat d'une commande dans une variableecho "Il y a $fichiers fichiers texte"echo "Aujourd'hui : $(date +%F)"cp rapport.txt "rapport-$(date +%F).txt"$(commande) insère le résultat d’une commande. Ces mécanismes sont la base des scripts : Bash : variables.
Un premier script
Section intitulée « Un premier script »#!/usr/bin/env bashset -euo pipefail
dossier="${1:-.}"echo "Les 5 plus gros fichiers de $dossier :"du -ah "$dossier" 2>/dev/null | sort -rh | head -5nano gros-fichiers.shchmod +x gros-fichiers.sh./gros-fichiers.sh /var/logVoir Bash : premiers scripts pour continuer.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
Le fichier a été vidé après un > |
> écrase : utiliser >>, ou set -o noclobber |
sudo echo x > /etc/fichier : Permission denied |
La redirection est faite par votre shell : echo x | sudo tee /etc/fichier |
grep ne trouve rien |
Casse (-i), expression régulière sans -E, guillemets |
sort classe 10 avant 2 |
Tri alphabétique : sort -n pour un tri numérique |
uniq ne supprime pas les doublons |
Ils ne sont pas consécutifs : trier d’abord (sort | uniq) |
sed -i a abîmé un fichier |
Utiliser -i.bak et restaurer ; tester sans -i |
Impossible de quitter vim |
Échap, puis :q! ou :wq |
| Caractères étranges dans un fichier venu de Windows | Fins de ligne CRLF : sudo apt install dos2unix, dos2unix fichier |
nano : Error opening terminal: unknown |
Variable TERM incorrecte (connexion exotique) : export TERM=xterm |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »nano est l’éditeur par défaut sur les deux versions. Les outils de traitement de texte (grep, sed, awk) ont les mêmes options pour l’usage courant ; sur 26.04, certains outils de base peuvent être des réécritures : en cas de différence, commande --help.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuels :
man grep,man sed,man awk,vimtutor, Bash : outils texte - Suite : Linux avancé : processus et ressources