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).
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$PATHest 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 ~.
- 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 estdocuments/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 :
rmn'utilise pas de corbeille. Ce que vous supprimez disparaît. Ajoutez-ipour 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.
typedistingue commandes internes et externes ;whichaffiche le chemin d'un exécutable.PATHindique 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..,..,~. mvconserve le propriétaire ;cpcrée un nouveau fichier. Linux distingue la casse.- Jokers :
*,?,[...],[!...]et des classes comme[[:digit:]].