Linux · Chapitre 3

Linux Essentials : se repérer dans un système Linux

Premiers pas dans le shell : syntaxe des commandes, guillemets et variables, PATH, obtenir de l'aide, chemins, fichiers et jokers.

Ce chapitre couvre le thème 2 de l'examen Linux Essentials : se déplacer dans un système Linux en ligne de commande. C'est là que la théorie devient pratique : ouvrez un terminal et essayez chaque commande au fur et à mesure.

Le shell

Le shell ou interpréteur de commandes est le programme qui reçoit les commandes que vous tapez au clavier et les transmet au système d'exploitation. On parle aussi de terminal ou de ligne de commande, même si, au sens strict, le terminal est la fenêtre et le shell le programme qui tourne à l'intérieur.

Shell Caractéristiques
Bash Le plus répandu ; shell par défaut de la plupart des distributions. C'est celui de l'examen.
sh Le shell Unix classique ; base de la norme POSIX.
zsh Compatible avec Bash et très configurable ; shell par défaut de macOS.
csh / tcsh Syntaxe proche du langage C.
fish Pensé pour être convivial, avec des suggestions automatiques.
echo $SHELL        # le shell de votre utilisateur
clear              # efface l'écran (ou Ctrl + L)
pwd                # print working directory : où vous êtes

Anatomie d'une commande

Une commande comporte trois parties : la commande, ses options (elles modifient son comportement et commencent généralement par - ou --) et ses arguments (ce sur quoi elle agit).

Les parties d'une commande : commande, options et arguments

ls                 # commande seule
ls -l              # commande + option
ls -l /home        # commande + option + argument
ls -la /home       # plusieurs options courtes ensemble : -l et -a
ls --all /home     # option longue

Avec les commandes GNU, l'ordre des options et des arguments est souvent souple (ls /home -la fonctionne aussi), mais la convention est commande, options, arguments.

Afficher du texte : echo et les guillemets

echo "Bonjour le monde"
echo -e "Bonjour\tle monde"   # -e interprète \t (tabulation)
echo -e "Bonjour\nle monde"   # et \n (saut de ligne)

Les guillemets changent la façon dont le shell traite le texte :

Guillemets Comportement Exemple
Doubles "..." Développent les variables ($VAR) et les commandes $(...). echo "Votre PATH est $PATH"
Simples '...' Tout est littéral : rien n'est développé. echo 'Votre PATH est $PATH'
Barre oblique inverse \ Échappe un seul caractère. echo "Ça coûte \$5"
echo "Nous sommes $(date +%A)"    # substitution de commande

Savoir ce qu'est une commande : type, which, uname, whatis

type cd          # cd is a shell builtin   (commande interne de Bash)
type ls          # peut être un alias de ls --color=auto
type cp          # cp is /usr/bin/cp       (programme externe)

which cp         # chemin de l'exécutable : /usr/bin/cp

uname            # nom du noyau : Linux
uname -a         # toutes les informations : version, architecture, nom de la machine...
cat /etc/os-release   # nom et version de la distribution

La différence compte : les commandes internes (builtins) font partie du shell lui-même ; les externes sont des programmes sur le disque que le shell cherche dans les répertoires du PATH.

Variables : set, export, unset et env

salut="bonjour"          # variable locale du shell (sans espaces autour du =)
echo $salut

export EDITOR=nano       # variable d'environnement : héritée par les programmes lancés
env                      # liste les variables d'environnement
set                      # liste les variables et fonctions du shell
unset salut              # supprime la variable

set +o history           # désactive l'historique pour cette session
set -o history           # le réactive

La variable PATH

PATH contient la liste des répertoires, séparés par :, où le shell cherche les commandes externes. C'est grâce à elle que vous tapez ls au lieu de /usr/bin/ls.

echo $PATH
# /usr/local/bin:/usr/bin:/bin:...

Pour exécuter vos propres scripts depuis n'importe quel répertoire, ajoutez leur dossier au PATH :

mkdir -p ~/scripts
export PATH="$PATH:$HOME/scripts"

Ce changement ne dure que jusqu'à la fin de la session. Pour le rendre permanent, enregistrez-le dans ~/.bashrc (avec zsh, ~/.zshrc) et rechargez le fichier :

echo 'export PATH="$PATH:$HOME/scripts"' >> ~/.bashrc
source ~/.bashrc

Utilisez des guillemets simples dans le echo : ainsi, le texte $PATH est enregistré tel quel et développé à l'ouverture de chaque session. Avec des guillemets doubles, c'est toute la valeur actuelle qui serait enregistrée.

Votre premier script et le shebang

La première ligne d'un script, le shebang, indique quel interpréteur doit l'exécuter :

#!/bin/bash
# ~/scripts/bonjour.sh
echo "Bonjour, $USER"
echo "Nous sommes le $(date +%d/%m/%Y)"
chmod +x ~/scripts/bonjour.sh   # le rendre exécutable
bonjour.sh                      # fonctionne partout si ~/scripts est dans le PATH
./bonjour.sh                    # sinon, on l'exécute en indiquant son chemin

Obtenir de l'aide

Outil À quoi il sert
commande --help Résumé rapide des options.
man commande Le manuel complet. On navigue avec les flèches, / recherche, q quitte.
info commande Documentation plus détaillée, avec des liens entre sections.
whatis commande Description d'une ligne (comme man -f).
apropos mot Cherche le mot dans les descriptions des pages de manuel (comme man -k).
locate fichier Trouve des fichiers par leur nom grâce à une base mise à jour par updatedb.
whereis commande Où se trouvent le binaire, le code source et le manuel d'une commande.
/usr/share/doc/ Documentation supplémentaire des paquets installés.

Le manuel est divisé en sections. Le même mot peut apparaître dans plusieurs :

Section Contenu
1 Commandes utilisateur
5 Formats des fichiers de configuration
8 Commandes d'administration système
man passwd       # section 1 : la commande passwd
man 5 passwd     # section 5 : le fichier /etc/passwd
man -f cp        # = whatis cp
man -k copy      # = apropos copy

Répertoires et chemins

Le système de fichiers Linux est un arbre qui commence à la racine, /. Chaque utilisateur a son répertoire personnel, généralement /home/utilisateur, que l'on peut aussi écrire ~.

Chemins absolus et relatifs dans l'arborescence

  • Un chemin absolu commence par / et fonctionne depuis n'importe où : /home/utilisateur/documents/notes.txt
  • Un chemin relatif part du répertoire courant et ne commence pas par / : depuis /home/utilisateur, le même chemin est documents/notes.txt.
  • . est le répertoire courant et .. le répertoire parent.

Se déplacer avec cd

cd               # aller dans votre répertoire personnel (comme cd ~)
cd /etc          # chemin absolu
cd documents     # chemin relatif
cd ..            # remonter au répertoire parent
cd -             # revenir au répertoire précédent
cd /             # aller à la racine

Lister avec ls

ls -a        # inclut les fichiers cachés (ils commencent par .)
ls -l        # format long : permissions, propriétaire, taille, date
ls -lh       # tailles lisibles (K, M, G)
ls -S        # trie par taille, le plus gros en premier
ls -lr       # ordre inverse
ls -R        # récursif : entre dans les sous-répertoires

Créer, déplacer, copier et supprimer

touch notes.txt              # crée un fichier vide (ou met à jour sa date)

mkdir projets                # crée un répertoire
mkdir rep1 rep2 rep3         # plusieurs à la fois
mkdir -p cours/linux/lpi     # crée aussi les répertoires intermédiaires
mkdir "mes photos"           # nom avec des espaces (ou : mkdir mes\ photos)

cp notes.txt copie.txt       # copie un fichier
cp -r projets sauvegarde     # copie un répertoire entier

mv notes.txt projets/        # déplace
mv copie.txt resume.txt      # renomme

rm resume.txt                # supprime un fichier
rmdir rep1                   # supprime un répertoire vide
rm -r sauvegarde             # supprime un répertoire et tout son contenu

Attention : rm n'utilise pas de corbeille. Ce que vous supprimez disparaît. Ajoutez -i pour qu'il demande confirmation.

Une différence qui tombe à l'examen : mv conserve le propriétaire et les permissions du fichier, car il n'en crée pas de nouveau ; cp crée un nouveau fichier qui appartient à l'utilisateur qui copie.

Et rappelez-vous : Linux distingue les majuscules des minuscules. Notes.txt et notes.txt sont deux fichiers différents.

L'historique

history          # liste les commandes exécutées, numérotées
!123             # relance la commande numéro 123
!!               # relance la dernière commande

Ctrl + R recherche en arrière dans l'historique pendant que vous tapez.

Les jokers (globbing)

Les jokers permettent de désigner plusieurs fichiers d'un coup. Le shell les développe avant d'exécuter la commande.

Joker Signification Exemple Correspond à
* N'importe quel nombre de caractères (même aucun) ls *.txt notes.txt, a.txt
? Exactement un caractère ls photo?.jpg photo1.jpg, photoA.jpg
[abc] Un des caractères indiqués ls rapport[123].pdf rapport1.pdf, rapport3.pdf
[a-z] Un caractère de la plage ls [a-c]* fichiers commençant par a, b ou c
[!abc] N'importe quel caractère sauf ceux-là ls [!0-9]* fichiers ne commençant pas par un chiffre
[[:digit:]] Une classe de caractères (chiffres, lettres...) ls *[[:digit:]].log app1.log, app2.log
ls *.txt                  # tous les .txt
ls ??.conf                # noms de deux caractères finissant par .conf
cp *.jpg ~/photos/        # copie toutes les images .jpg
rm log-2026-0[1-3]-*.txt  # supprime les journaux de janvier à mars

Une astuce pour construire les motifs : commencez par la partie la plus distinctive, souvent à la fin du nom (l'extension), puis ajoutez des conditions vers la gauche.

À retenir

  • Le shell (Bash) interprète ce que vous tapez ; la syntaxe est commande, options, arguments.
  • Les guillemets doubles développent les variables ; les simples, non.
  • type distingue commandes internes et externes ; which affiche le chemin d'un exécutable.
  • PATH indique où chercher les commandes ; pour un changement permanent, ~/.bashrc.
  • Aide : --help, man (avec ses sections), info, whatis, apropos, locate.
  • Les chemins absolus commencent par / ; les relatifs, au répertoire courant. ., .., ~.
  • mv conserve le propriétaire ; cp crée un nouveau fichier. Linux distingue la casse.
  • Jokers : *, ?, [...], [!...] et des classes comme [[:digit:]].