← Vizion.Blog / Licence / Pratique des machines

Notes de cours. Le texte du cours vient des pads de mon enseignant ; les réponses et les compléments ont été rédigés avec Claude, une IA d'Anthropic, et s'adressent à moi. Dans cette version publique, j'ai retiré l'adresse des pads et reformulé les remarques sur le cours.

Pratique des machines, jour 2 (préambule)

Hiérarchie de fichiers et archives

Cours du 15 septembre 2026

Comment lire cette note

Le contenu du cours est conservé tel quel. Mes ajouts sont dans des encadrés : compléments, mises en garde, et une évaluation honnête de ma réponse.

Voir aussi : Jour 1 : flux et redirections


Énoncé

Exercice : 100% en ligne de commande, sans même utiliser un éditeur de texte.

Créez une hiérarchie de fichiers adaptée à vos enseignements contenant a minima :

Conseils du prof


Ma réponse (liste de commandes)

Ce que j'avais répondu
ÉtapeCommandes listées
1mkdir, cd
2touch, cp, cat, echo, wget, mkdir
3mkdir, mv
4zip
5mv
6rm

Évaluation honnête de cette réponse

Les commandes sont les bonnes. Le problème n'est pas là : la moitié d'entre elles échouera telle quelle, parce qu'il manque les options qui les rendent capables de travailler sur des dossiers.

C'est un point de fond, pas un détail. Sous Unix, beaucoup de commandes refusent par défaut de toucher à un répertoire. C'est une protection : un dossier peut contenir des milliers de fichiers, et une commande destructrice lancée par erreur dessus ferait des dégâts irréversibles. Le système exige donc que tu dises explicitement "oui, je sais que c'est un dossier, descends dedans".

Ce mot-clé est récursif (recursive) : appliquer l'opération au dossier, puis à tout ce qu'il contient, puis à tout ce que ça contient, et ainsi de suite jusqu'au bout.

Ta commandeCe qu'il faut réellementSans l'option
cpcp -r (ou mieux, cp -a)cp: -r not specified; omitting directory
zipzip -rcrée une archive vide ou presque
rm sur un dossierrm -rrm: cannot remove: Is a directory
mvmv (pas d'option)fonctionne déjà sur les dossiers

mv est l'exception : déplacer un dossier ne fait que changer une entrée dans la table du système de fichiers, sans toucher au contenu. C'est pour ça qu'un mv est instantané même sur 50 Go, alors qu'un cp peut prendre plusieurs minutes.


Solution complète, étape par étape

Dérouler la solution
Terminal
# --- Étape 1 : la hiérarchie des cours -------------------------------
mkdir -p ~/Cours/{pdm,algo,maths,anglais}
cd ~/Cours/pdm

# --- Étape 2 : le contenu du dossier pdm ------------------------------
mkdir TP{1..5}

echo "# Liens utiles - Pratique des machines" > liens_utiles.md
echo "- Jour 1 : https://pads.up8.edu/ADRESSE-DU-PAD" >> liens_utiles.md
echo "- Jour 2 : https://pads.up8.edu/ADRESSE-DU-PAD" >> liens_utiles.md

curl -L -o jour1.md "https://pads.up8.edu/ADRESSE-DU-PAD/download"
less jour1.md            # vérifier le contenu (q pour quitter)
echo "Fin !" >> jour1.md
tail -n 3 jour1.md       # vérifier que la ligne est bien à la fin

# --- Étape 3 : la copie de sauvegarde ---------------------------------
mkdir -p ~/backup
cp -a ~/Cours ~/backup/

# --- Étape 4 : l'archive ----------------------------------------------
cd ~
zip -r backup.zip backup/
unzip -l backup.zip      # lister le contenu SANS extraire : toujours vérifier

# --- Étape 5 : déplacer sur le Bureau ---------------------------------
mv backup.zip "$(xdg-user-dir DESKTOP)"

# --- Étape 6 : détruire -----------------------------------------------
rm "$(xdg-user-dir DESKTOP)/backup.zip"

Les quatre pièges de cet exercice

Piège 1 - l'expansion d'accolades

Terminal
mkdir TP{1..5}

Cette syntaxe s'appelle l'expansion d'accolades (brace expansion). Le shell la remplace avant d'exécuter la commande : mkdir TP{1..5} devient littéralement mkdir TP1 TP2 TP3 TP4 TP5.

Pour t'en convaincre, préfixe par echo pour voir ce que le shell fabrique :

Terminal
echo TP{1..5}
echo ~/Cours/{pdm,algo,maths}

Ce réflexe vaut de l'or. Devant une commande destructrice dont tu n'es pas sûr, mets echo devant : tu vois exactement ce qui allait s'exécuter, sans rien casser. C'est la ceinture de sécurité du shell.

L'option -p de mkdir (parents) crée les dossiers parents manquants et ne râle pas si le dossier existe déjà. Indispensable dans un script.

Piège 2 - cp -r contre cp -a

Les deux copient un dossier. La différence est invisible à l'affichage et fondamentale pour une sauvegarde.

OptionNomCe qui est préservé
-rrecursivel'arborescence et le contenu des fichiers
-aarchivetout ça plus les permissions, les dates, les propriétaires, les liens symboliques

Avec cp -r, tous tes fichiers copiés prennent la date d'aujourd'hui et les permissions par défaut. Ta « sauvegarde » a donc perdu une partie de l'information. Ce n'est pas grave pour des notes de cours, ça l'est pour un vrai backup système.

cp -a équivaut à cp -dR --preserve=all. Retiens simplement : pour sauvegarder, -a. Pour dupliquer vite fait, -r.

Piège 3 - où est le Bureau ?

Sur ta Debian en français, le dossier s'appelle ~/Bureau. Sur un système en anglais, ~/Desktop. Un script qui code en dur l'un ou l'autre casse dès qu'il change de machine.

La bonne façon interroge la configuration du système :

Terminal
xdg-user-dir DESKTOP

Ces chemins sont définis dans ~/.config/user-dirs.dirs. Va le lire :

Terminal
cat ~/.config/user-dirs.dirs

Les guillemets autour de "$(xdg-user-dir DESKTOP)" ne sont pas décoratifs : si le chemin contenait une espace, le shell découperait le résultat en deux arguments et la commande échouerait. Prends l'habitude d'entourer de guillemets toute variable qui contient un chemin. C'est la source de bug numéro un des scripts bash, et aussi une porte d'entrée classique en sécurité.

Piège 4 - rm ne pardonne pas

Il n'y a pas de corbeille en ligne de commande. rm détruit immédiatement et définitivement. Les données restent physiquement sur le disque un moment, mais les récupérer demande des outils de forensique et le résultat est incertain.

Trois réflexes à prendre dès maintenant :

  1. ls avant rm. Lance d'abord ls avec exactement les mêmes arguments. Ce que ls affiche est précisément ce que rm va détruire.
  2. rm -i demande confirmation fichier par fichier. Pénible, mais utile au début.
  3. Jamais d'espace parasite. rm -r ~/ backup au lieu de rm -r ~/backup efface ton dossier personnel entier. Une seule espace.

Et bien sûr : ne tape jamais rm -rf / ni rm -rf /*, même « pour voir ».


Compléments

Vérifier une archive avant de s'y fier

Une archive que tu n'as jamais ouverte n'est pas une sauvegarde, c'est une supposition. Deux commandes qui listent sans extraire :

Terminal
unzip -l backup.zip      # pour un .zip
tar -tvf backup.tar.gz   # pour un .tar.gz

Fais-le systématiquement. Le jour où tu restaures, il est trop tard pour découvrir que l'archive était vide.

zip contre tar.gz : pourquoi Linux préfère tar

Le cours demande du zip parce que c'est universel et que Windows l'ouvre nativement. Dans le monde Unix, la norme est plutôt tar.gz.

Raison historique intéressante : tar (tape archive) ne sait que coller des fichiers bout à bout en préservant toutes leurs métadonnées Unix. Il ne compresse rien. gzip ne sait que compresser un flux. On les combine :

Terminal
tar -czvf backup.tar.gz backup/
LettreSignification
ccreate, créer l'archive
zpasser le résultat dans gzip
vverbose, afficher ce qui se passe
fle nom de fichier qui suit

Pour extraire, c devient x (extract) : tar -xzvf backup.tar.gz.

Tu reconnais le principe du pipe du Jour 1 : deux outils qui font une seule chose chacun, assemblés. C'est encore la philosophie Unix.

Ce que ferait un vrai backup

cp -a recopie tout à chaque fois. Sur des notes de cours, sans importance. Sur des dizaines de Go, c'est absurde. L'outil standard est rsync, qui ne transfère que ce qui a changé :

Terminal
rsync -av --delete ~/Cours/ ~/backup/Cours/

Tu le croiseras partout en administration système. Pas la peine de l'apprendre maintenant, mais sache qu'il existe.


Auto-test

  1. Pourquoi cp refuse-t-il de copier un dossier sans option, alors que mv accepte ?
  2. Que devient mkdir ~/Cours/{pdm,algo} après expansion par le shell ? Comment le vérifier sans rien créer ?
  3. Quelle différence concrète entre cp -r et cp -a pour une sauvegarde ?
  4. Pourquoi coder ~/Bureau en dur dans un script est-il une mauvaise idée ?
  5. Quelle commande liste le contenu d'un .zip sans l'extraire, et pourquoi le faire systématiquement ?
  6. Que détruit exactement rm -r ~/ backup et en quoi diffère-t-il de rm -r ~/backup ?

À faire

↑