Apprendre : expliquer le pourquoi de chaque journée, relire et compléter

- un encadré « Pourquoi » par journée, dont Git en local et Git à distance
- état de la préparation, python3-tk, configuration de Git, sessions conservées
- message d'erreur réel : « Aucun fichier ou dossier de ce type »
- « terminale » en minuscule, supercalculateurs à la place de la Station spatiale

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019V4mhmHoJD3b8YfQy249dC
This commit is contained in:
Alpinux 2026-10-22 08:12:24 +02:00
parent 261d6e7eef
commit 36b5bf87b2
3 changed files with 126 additions and 28 deletions

View file

@ -29,7 +29,7 @@ Les cours et fiches manquants sont en cours de rédaction.
## Animer une initiation ## Animer une initiation
- [Une semaine pour découvrir Linux — 3e et Terminale](semaine-college-lycee.md) : cinq - [Une semaine pour découvrir Linux — 3e et terminale](semaine-college-lycee.md) : cinq
journées sur Linux, le terminal, Bash, Python, Git et Forgejo, avec une enquête en fil rouge. journées sur Linux, le terminal, Bash, Python, Git et Forgejo, avec une enquête en fil rouge.
## Voir aussi ## Voir aussi

View file

@ -1,8 +1,8 @@
--- ---
description: Programme d'une semaine d'initiation (5 jours de 6 h) pour des élèves de 3e et de Terminale — Linux, terminal, Bash, Python, Git et Forgejo, avec une enquête en fil rouge. description: Programme d'une semaine d'initiation (5 jours de 6 h) pour des élèves de 3e et de terminale — Linux, terminal, Bash, Python, Git et Forgejo, avec une enquête en fil rouge.
--- ---
# Une semaine pour découvrir Linux — 3e et Terminale # Une semaine pour découvrir Linux — 3e et terminale
Cinq journées de six heures pour faire découvrir à des élèves ce qui se cache derrière les Cinq journées de six heures pour faire découvrir à des élèves ce qui se cache derrière les
serveurs, les sites web et le code : **Linux, le terminal, Bash, Python, Git et la forge serveurs, les sites web et le code : **Linux, le terminal, Bash, Python, Git et la forge
@ -16,14 +16,19 @@ Forgejo**. Le même déroulé sert pour les deux niveaux ; ce qui change, c'est
## Les principes ## Les principes
**Toujours dire pourquoi.** Chaque journée commence par la question à laquelle elle répond :
à quoi sert ce qu'on va apprendre, et quel problème cela règle. Une commande dont on ne
comprend pas l'utilité s'oublie dès le lendemain. Les encadrés **Pourquoi** de chaque journée
donnent ces réponses, à reformuler devant la classe.
**Alterner toutes les 45 minutes.** Une journée de 6 h devant un écran ne tient pas sans **Alterner toutes les 45 minutes.** Une journée de 6 h devant un écran ne tient pas sans
changer de forme. Chaque demi-journée enchaîne un **cours court** (sur le site), un **jeu**, changer de forme. Chaque demi-journée enchaîne un **cours court** (sur le site), un **jeu**,
de la **pratique sur un vrai terminal**, et si possible une **activité débranchée**. de la **pratique sur un vrai terminal**, et si possible une **activité débranchée**.
**Un fil rouge : l'enquête.** Lundi matin, le site du club informatique d'un lycée imaginaire **Un fil rouge : l'enquête.** Lundi matin, on découvre que le site du club informatique d'un
a été modifié pendant la nuit. Chaque après-midi, les élèves avancent dans l'enquête **sur les lycée imaginaire a été modifié pendant la nuit. Chaque après-midi, les élèves avancent dans
vrais postes Linux de la salle**, avec les commandes apprises le matin. Vendredi, une épreuve l'enquête **sur les vrais postes Linux de la salle**, avec les commandes apprises le matin.
finale en équipes désigne le coupable et remet le site en état. Vendredi, une épreuve finale en équipes désigne le coupable et remet le site en état.
**Les outils :** **Les outils :**
@ -42,7 +47,7 @@ finale en équipes désigne le coupable et remet le site en état.
| Horaire | Durée | Activité | | Horaire | Durée | Activité |
|---|---|---| |---|---|---|
| 9 h 00 | 15 min | Rappel de la veille : quiz éclair au tableau, ou une commande « mystère » à deviner | | 9 h 00 | 15 min | Rappel de la veille : quiz éclair au tableau, ou une commande « mystère » à deviner |
| 9 h 15 | 45 min | Cours sur le site, avec le terminal d'essai | | 9 h 15 | 45 min | Le pourquoi du jour, puis le cours sur le site, avec le terminal d'essai |
| 10 h 00 | 30 min | Jeu sur le site | | 10 h 00 | 30 min | Jeu sur le site |
| 10 h 30 | 15 min | Pause | | 10 h 30 | 15 min | Pause |
| 10 h 45 | 75 min | Pratique sur le vrai terminal, en binômes | | 10 h 45 | 75 min | Pratique sur le vrai terminal, en binômes |
@ -60,9 +65,19 @@ finale en équipes désigne le coupable et remet le site en état.
**Objectif du jour :** savoir ce qu'est Linux, se repérer dans l'arborescence et s'y déplacer **Objectif du jour :** savoir ce qu'est Linux, se repérer dans l'arborescence et s'y déplacer
au clavier. au clavier.
!!! question "Pourquoi le terminal, alors qu'on a une souris ?"
- **Les serveurs n'ont pas d'écran.** Les machines qui font tourner les sites web, les
jeux en ligne ou les réseaux sociaux sont presque toutes sous Linux, dans des salles
sans écran ni souris. On les pilote à distance, en tapant des commandes.
- **Une commande se note, se copie, se répète.** Un clic ne s'écrit pas dans un tuto ; une
commande, si. On peut l'envoyer à quelqu'un, la relancer demain, ou la confier à un
script mercredi.
- **C'est la porte d'entrée de toute la semaine** : Bash, Python et Git s'utilisent depuis
le terminal.
- **Accueil (30 min)** : qui est Alpinux, ce qu'est un logiciel libre, où se trouve Linux - **Accueil (30 min)** : qui est Alpinux, ce qu'est un logiciel libre, où se trouve Linux
sans qu'on le voie (téléphones Android, box Internet, serveurs, voitures, la Station sans qu'on le voie : téléphones Android, box Internet, téléviseurs, serveurs, et les 500
spatiale…). supercalculateurs les plus puissants du monde.
- **Débranché — l'arbre humain** : chaque élève porte une étiquette de dossier (`/`, `home`, - **Débranché — l'arbre humain** : chaque élève porte une étiquette de dossier (`/`, `home`,
`alex`, `etc`…) et tient l'épaule de son « parent ». Un élève-curseur se déplace selon les `alex`, `etc`…) et tient l'épaule de son « parent ». Un élève-curseur se déplace selon les
commandes `cd` lancées par la classe. Chemins absolus et relatifs se comprennent dans commandes `cd` lancées par la classe. Chemins absolus et relatifs se comprennent dans
@ -86,6 +101,15 @@ au clavier.
**Objectif du jour :** créer, déplacer et supprimer des fichiers, comprendre les droits, et **Objectif du jour :** créer, déplacer et supprimer des fichiers, comprendre les droits, et
retrouver une information dans une montagne de texte. retrouver une information dans une montagne de texte.
!!! question "Pourquoi des droits sur les fichiers ? Pourquoi chercher avec des commandes ?"
- **Linux est partagé.** Plusieurs personnes et plusieurs services utilisent la même
machine. Les droits empêchent un utilisateur de lire le courrier d'un autre, un site web
piraté de toucher au reste du système, et vous-même d'effacer par erreur un fichier
important.
- **On ne lit pas un journal de 50 000 lignes, on le filtre.** `grep` trouve en une
seconde la ligne qui compte. Enchaînées avec `|`, de petites commandes répondent à des
questions précises : combien d'erreurs ? quand ? venant d'où ?
- **Site** : jeu [Préparer un déploiement](https://dynamic.alpinux.org/jeux/terminal-fichiers/), - **Site** : jeu [Préparer un déploiement](https://dynamic.alpinux.org/jeux/terminal-fichiers/),
puis [rwx : le jeu des permissions](https://dynamic.alpinux.org/jeux/permissions/). puis [rwx : le jeu des permissions](https://dynamic.alpinux.org/jeux/permissions/).
- **Vrai terminal** : `mkdir`, `cp`, `mv`, `rm`, les redirections `>` et `>>`, et un premier - **Vrai terminal** : `mkdir`, `cp`, `mv`, `rm`, les redirections `>` et `>>`, et un premier
@ -108,15 +132,25 @@ retrouver une information dans une montagne de texte.
**Objectif du jour :** écrire un script, c'est-à-dire une suite de commandes que l'on peut **Objectif du jour :** écrire un script, c'est-à-dire une suite de commandes que l'on peut
relancer à volonté. relancer à volonté.
!!! question "Pourquoi écrire des scripts ?"
- **Ce qu'on tape deux fois, on l'écrit une fois.** Un script refait le même travail, dans
le même ordre, sans oubli ni faute de frappe, autant de fois qu'il le faut.
- **L'ordinateur travaille sans vous** : une sauvegarde à 3 h du matin, la vérification de
cent fichiers, la préparation de trente postes identiques.
- **Un script est une procédure écrite.** Il se relit, se corrige, se partage, et il dit
exactement ce qui a été fait.
- **Cours** : la ligne `#!/bin/bash`, `chmod +x`, les variables, `echo`, `read`, `if`, `for`. - **Cours** : la ligne `#!/bin/bash`, `chmod +x`, les variables, `echo`, `read`, `if`, `for`.
- **Site** : jeux [Sous le capot](https://dynamic.alpinux.org/jeux/noyau-processus/) et, pour - **Site** : jeu [Sous le capot](https://dynamic.alpinux.org/jeux/noyau-processus/) (ce qui
les Terminale, [Incident à 3 h du matin](https://dynamic.alpinux.org/jeux/terminal-incident/). se passe quand on lance une commande) et, pour les terminales,
[Incident à 3 h du matin](https://dynamic.alpinux.org/jeux/terminal-incident/).
- **Débranché — le robot idiot** : un élève joue le robot qui exécute à la lettre un - **Débranché — le robot idiot** : un élève joue le robot qui exécute à la lettre un
« script » écrit par un autre groupe pour, par exemple, faire un sandwich. Les bugs « script » écrit par un autre groupe pour, par exemple, faire un sandwich. Les bugs
apparaissent tout seuls, et l'on comprend pourquoi un programme doit être précis. apparaissent tout seuls, et l'on comprend pourquoi un programme doit être précis.
- **Enquête, chapitre 3 — Le script du pirate** : un script laissé sur le serveur. Il faut - **Enquête, chapitre 3 — Le script du pirate** : un script laissé sur le serveur. Il faut
le lire sans le lancer, comprendre ce qu'il fait, puis écrire son propre script pour le lire sans le lancer, comprendre ce qu'il fait, puis décoder le message qu'il a chiffré.
décoder le message qu'il a chiffré. En 3e, le décodage tient en une commande donnée par étapes ; en terminale, les élèves
écrivent le script de décodage eux-mêmes.
| | 3e | Terminale | | | 3e | Terminale |
|---|---|---| |---|---|---|
@ -130,8 +164,19 @@ relancer à volonté.
**Objectif du jour :** écrire et lancer un programme Python depuis le terminal, puis s'en **Objectif du jour :** écrire et lancer un programme Python depuis le terminal, puis s'en
servir comme outil. servir comme outil.
!!! question "Pourquoi Python, puisqu'on a Bash ?"
- **Chaque outil a son terrain.** Bash est imbattable pour enchaîner des commandes et
manipuler des fichiers. Dès qu'il faut calculer, mémoriser des données, les trier
finement ou écrire un vrai programme, il devient pénible : Python est fait pour ça.
- **Python est partout** : l'analyse de données, l'intelligence artificielle, les sites
web, l'automatisation, les cartes électroniques. Et c'est le langage de la spécialité
NSI au lycée.
- **Le même problème, deux outils** : l'après-midi, on compte les connexions d'un journal
en Python, comme on l'a fait en Bash mardi. Comparer les deux, c'est apprendre à choisir.
Le wiki contient déjà un [cours complet de Python pour débutants](../presentations/Python/README.md) : Le wiki contient déjà un [cours complet de Python pour débutants](../presentations/Python/README.md) :
la journée s'appuie sur ses chapitres plutôt que de tout réécrire. la journée s'appuie sur ses chapitres plutôt que de tout réécrire. Ce cours tutoie son
lecteur, à la différence du reste de ce programme.
- **Lancer Python** : l'interpréteur interactif `python3`, puis un fichier `.py` écrit avec - **Lancer Python** : l'interpréteur interactif `python3`, puis un fichier `.py` écrit avec
nano et lancé avec `python3 mon_programme.py`. nano et lancé avec `python3 mon_programme.py`.
@ -142,12 +187,12 @@ la journée s'appuie sur ses chapitres plutôt que de tout réécrire.
| | 3e | Terminale | | | 3e | Terminale |
|---|---|---| |---|---|---|
| Notions | Variables, `input`, conditions, boucles : chapitres [01](../presentations/Python/01-variables-types-operateurs.md), [02](../presentations/Python/02-conditions.md) et [03](../presentations/Python/03-boucles.md) | Fichiers, dictionnaires, CSV : chapitres [04](../presentations/Python/04-structures-de-donnees.md) et [07](../presentations/Python/07-fichiers-csv-json.md) | | Notions | Variables, `input`, conditions, boucles : chapitres [01](../presentations/Python/01-variables-types-operateurs.md), [02](../presentations/Python/02-conditions.md) et [03](../presentations/Python/03-boucles.md) | Fichiers, dictionnaires, CSV : chapitres [04](../presentations/Python/04-structures-de-donnees.md) et [07](../presentations/Python/07-fichiers-csv-json.md) |
| Projet | Le jeu « devine le nombre », puis des dessins avec `turtle` | Le même comptage qu'en Bash mardi, réécrit en Python : comparer les deux approches | | Projet | Le jeu « devine le nombre », puis des dessins avec `turtle` | Le comptage de mardi, réécrit en Python : comparer les deux approches |
!!! tip "Pour les Terminale NSI" !!! tip "Pour les élèves de terminale NSI"
Python est déjà le langage de NSI. L'intérêt de la journée n'est pas d'apprendre la Python est déjà leur langage. L'intérêt de la journée n'est pas d'apprendre la syntaxe,
syntaxe, mais de l'utiliser **hors de l'éditeur de l'école** : depuis le terminal, sur mais de l'utiliser **hors de l'éditeur de l'école** : depuis le terminal, sur de vraies
de vraies données, avec la bibliothèque standard (`pathlib`, `csv`, `collections`). données, avec la bibliothèque standard (`pathlib`, `csv`, `collections`).
--- ---
@ -156,19 +201,52 @@ la journée s'appuie sur ses chapitres plutôt que de tout réécrire.
**Objectif du jour :** garder l'historique de son travail avec Git, le publier sur une forge, **Objectif du jour :** garder l'historique de son travail avec Git, le publier sur une forge,
et travailler à plusieurs sur le même code. et travailler à plusieurs sur le même code.
!!! question "Pourquoi Git en local, sur sa propre machine ?"
Git enregistre des **photos successives** d'un projet, appelées *commits*, chacune avec
sa date, son auteur et un message qui dit ce qui a changé et pourquoi. Tout se passe sur
votre ordinateur, sans réseau ni compte.
- **Fini `rapport_final_v3_vraiment_final.txt`.** Un seul fichier, et toutes ses versions
rangées dans l'historique.
- **On peut revenir en arrière.** Une modification a tout cassé ? On retrouve la dernière
version qui marchait, en une commande.
- **On sait ce qui a changé** entre deux versions (`git diff`), ligne par ligne, et
**pourquoi** grâce au message du commit.
- **On essaie sans risque.** Une idée hasardeuse se développe sur une *branche* à part ;
si elle ne donne rien, on l'abandonne sans avoir abîmé le reste.
!!! question "Pourquoi Git à distance, sur une forge ?"
Une forge comme Forgejo garde une copie du projet sur un serveur. On y **envoie** ses
commits (`git push`) et on **récupère** ceux des autres (`git pull`).
- **Une sauvegarde hors de sa machine.** Un disque qui lâche, un ordinateur perdu, un
poste de salle réinitialisé : le travail reste sur la forge.
- **Travailler à plusieurs sur le même projet.** Chacun travaille sur sa copie, puis Git
assemble les modifications, et signale quand deux personnes ont touché à la même ligne.
- **Faire relire avant d'intégrer.** Une *pull request* propose une modification : les
autres la lisent, la commentent, et ne l'acceptent qu'une fois convaincus. C'est ainsi
que se fait ce wiki.
- **Partager et publier.** Un dépôt public, c'est un projet que tout le monde peut lire,
réutiliser et améliorer : c'est le fonctionnement même du logiciel libre.
**Dans quel ordre ?** D'abord en local : on travaille, on fait des commits, on se trompe
et on corrige, sans rien montrer à personne. Ensuite seulement, on envoie sur la forge un
travail propre. Le local, c'est le brouillon daté ; la forge, c'est le classeur partagé.
- **Débranché — la machine à remonter le temps** : un texte écrit à plusieurs sur une feuille, - **Débranché — la machine à remonter le temps** : un texte écrit à plusieurs sur une feuille,
avec une photo prise à chaque étape. Revenir à la photo d'hier, c'est un `git checkout` ; avec une photo prise à chaque étape. Revenir à la photo d'hier, c'est un `git checkout` ;
la pile de photos, c'est `git log`. la pile de photos, c'est `git log`. Puis deux groupes modifient chacun leur copie de la
même phrase : c'est un conflit, qu'il faut régler en se parlant.
- **Git en local** : `git init`, `git add`, `git commit`, `git log`, `git diff`. Chacun - **Git en local** : `git init`, `git add`, `git commit`, `git log`, `git diff`. Chacun
versionne les scripts et programmes écrits pendant la semaine. versionne les scripts et programmes écrits pendant la semaine.
- **Forgejo** : déposer ce travail sur la [forge d'Alpinux](../guides/git-alpinux.md), en - **Forgejo** : déposer ce travail sur la [forge d'Alpinux](../guides/git-alpinux.md), en
explorer l'interface web, et proposer une modification sur le dépôt d'un camarade. explorer l'interface web, et proposer une modification sur le dépôt d'un camarade.
- **Enquête, chapitre 5 — Le dénouement** : épreuve en équipes, chronométrée. Le site du club - **Enquête, chapitre 5 — Le dénouement** : épreuve en équipes, chronométrée. Le site du club
est versionné avec Git : l'historique des commits révèle qui l'a modifié et quand. Il faut est versionné avec Git, et c'est ce qui va trahir le coupable : chaque commit dit **qui** a
identifier le coupable, croiser avec les indices des jours précédents, puis remettre le modifié **quoi** et **quand**. Il faut identifier le coupable, croiser avec les indices des
site en état en revenant à une version saine. jours précédents, puis remettre le site en état en revenant à une version saine.
- **Clôture (45 min)** : remise des diplômes, ce qu'on retient de la semaine, et la suite - **Clôture (45 min, à la place de l'approfondissement)** : remise des diplômes, ce qu'on
(réunions Alpinux, install parties, spécialité NSI). retient de la semaine, et la suite (réunions Alpinux, install parties, spécialité NSI).
| | 3e | Terminale | | | 3e | Terminale |
|---|---|---| |---|---|---|
@ -176,11 +254,30 @@ et travailler à plusieurs sur le même code.
--- ---
## Où en est la préparation
| Jour | Cours sur le site | Jeux sur le site | Enquête |
|---|---|---|---|
| Lundi | ✅ Le terminal | ✅ Où range-t-on quoi ?, Premier jour sur le serveur | à écrire |
| Mardi | à écrire : fichiers et droits, chercher et filtrer | ✅ Préparer un déploiement, rwx | à écrire |
| Mercredi | à écrire : Bash | ✅ Sous le capot, Incident à 3 h du matin | à écrire |
| Jeudi | le cours Python du wiki | à prévoir | à écrire |
| Vendredi | à écrire : Git local et Forgejo | à prévoir | à écrire |
L'enquête sera installée sur chaque poste par un script : un dossier par élève, avec les
fichiers, les journaux et le dépôt Git du site du club.
---
## Ce qu'il faut préparer ## Ce qu'il faut préparer
**Sur les postes**, à vérifier en amont : **Sur les postes**, à vérifier en amont :
- [ ] un terminal accessible aux élèves, et les commandes `git`, `python3`, `nano`, `tree` ; - [ ] un terminal accessible aux élèves, et les commandes `git`, `python3`, `nano`, `tree` ;
- [ ] le paquet `python3-tk`, sans lequel le module `turtle` de Python ne fonctionne pas ;
- [ ] Git configuré avec un nom et une adresse pour chaque session
(`git config --global user.name` et `user.email`), sans quoi `git commit` refuse de
fonctionner. Pour des mineurs, un pseudonyme et une adresse fictive suffisent en local ;
- [ ] facultatif, pour le plaisir : `figlet`, `cowsay`, `sl` ; - [ ] facultatif, pour le plaisir : `figlet`, `cowsay`, `sl` ;
- [ ] l'accès à `dynamic.alpinux.org` et à `gitea.alpinux.org` depuis le réseau de - [ ] l'accès à `dynamic.alpinux.org` et à `gitea.alpinux.org` depuis le réseau de
l'établissement (certains filtres bloquent les forges) ; l'établissement (certains filtres bloquent les forges) ;
@ -196,6 +293,7 @@ débranchées, un carnet de bord par élève, des diplômes à imprimer.
| Question | Pourquoi c'est important | | Question | Pourquoi c'est important |
|---|---| |---|---|
| **Les comptes Forgejo des élèves.** Comptes AlpID nominatifs, comptes anonymes de classe (`eleve01`, `eleve02`…), ou forge installée localement pour la semaine ? | Les élèves sont mineurs : la solution la plus simple côté données personnelles est celle des comptes anonymes, créés à l'avance et supprimés après la semaine. | | **Les comptes Forgejo des élèves.** Comptes AlpID nominatifs, comptes anonymes de classe (`eleve01`, `eleve02`…), ou forge installée localement pour la semaine ? | Les élèves sont mineurs : la solution la plus simple côté données personnelles est celle des comptes anonymes, créés à l'avance et supprimés après la semaine. |
| **Les sessions sont-elles conservées d'un jour à l'autre ?** | Beaucoup de postes d'établissement effacent tout à la déconnexion. L'enquête et le travail de la semaine doivent survivre jusqu'au vendredi : sinon, prévoir une clé USB par binôme, ou s'appuyer plus tôt sur la forge. |
| **Le nombre d'élèves et de postes.** | Le travail en binômes demande un poste pour deux au minimum. | | **Le nombre d'élèves et de postes.** | Le travail en binômes demande un poste pour deux au minimum. |
| **La distribution installée et les droits.** Peut-on installer des paquets ? Les élèves ont-ils `sudo` ? | Sans droits d'installation, il faut vérifier toute la liste ci-dessus avant le lundi. | | **La distribution installée et les droits.** Peut-on installer des paquets ? Les élèves ont-ils `sudo` ? | Sans droits d'installation, il faut vérifier toute la liste ci-dessus avant le lundi. |
| **Les horaires exacts** de l'établissement. | Le déroulé type se décale facilement, mais les pauses et le repas sont imposés. | | **Les horaires exacts** de l'établissement. | Le déroulé type se décale facilement, mais les pauses et le repas sont imposés. |

View file

@ -104,7 +104,7 @@ Tout part de la racine `/`. Les dossiers à connaître :
| Message | Cause probable | Réflexe | | Message | Cause probable | Réflexe |
|---|---|---| |---|---|---|
| `Aucun fichier ou dossier de ce nom` | mauvais dossier courant, ou nom mal écrit | `pwd`, `ls`, puis **Tab** pour compléter | | `Aucun fichier ou dossier de ce type` | ce nom n'existe pas ici : mauvais dossier courant, ou nom mal écrit | `pwd`, `ls`, puis **Tab** pour compléter |
| `commande introuvable` | faute de frappe, majuscule, ou programme non installé | relire ; `which commande` | | `commande introuvable` | faute de frappe, majuscule, ou programme non installé | relire ; `type commande` dit si elle existe |
| `Permission non accordée` | les droits ne le permettent pas | `ls -l` pour voir les droits | | `Permission non accordée` | les droits ne le permettent pas | `ls -l` pour voir les droits |
| un nom avec espace « coupé en deux » | l'espace sépare les arguments | entourer de guillemets : `cat "mon fichier.txt"` | | un nom avec espace « coupé en deux » | l'espace sépare les arguments | entourer de guillemets : `cat "mon fichier.txt"` |