From 261d6e7eeff2755982259a361e456b137247756e Mon Sep 17 00:00:00 2001 From: Alpinux Date: Thu, 22 Oct 2026 07:53:38 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Ajouter=20la=20rubrique=20=C2=AB=20Apprendr?= =?UTF-8?q?e=20=C2=BB=20:=20programme=20d'une=20semaine=203e/Terminale=20e?= =?UTF-8?q?t=20fiche=20terminal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - apprendre/index.md : présentation du site de jeux et de cours, et du parcours - apprendre/semaine-college-lycee.md : cinq journées (Linux, terminal, Bash, Python, Git/Forgejo) avec une enquête en fil rouge — brouillon à valider - apprendre/terminal-se-reperer.md : fiche de référence du terminal Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019V4mhmHoJD3b8YfQy249dC --- docs/apprendre/index.md | 40 +++++ docs/apprendre/semaine-college-lycee.md | 202 ++++++++++++++++++++++++ docs/apprendre/terminal-se-reperer.md | 110 +++++++++++++ mkdocs.yml | 4 + 4 files changed, 356 insertions(+) create mode 100644 docs/apprendre/index.md create mode 100644 docs/apprendre/semaine-college-lycee.md create mode 100644 docs/apprendre/terminal-se-reperer.md diff --git a/docs/apprendre/index.md b/docs/apprendre/index.md new file mode 100644 index 0000000..772c1a5 --- /dev/null +++ b/docs/apprendre/index.md @@ -0,0 +1,40 @@ +--- +description: Apprendre Linux en jouant — le site de jeux et de cours d'Alpinux, ses fiches de référence, et des programmes prêts à l'emploi pour animer une initiation. +--- + +# Apprendre Linux en jouant + +Alpinux propose un site pour apprendre Linux par le jeu : +**[dynamic.alpinux.org](https://dynamic.alpinux.org)**. On y trouve des cours courts avec un +terminal d'essai intégré, des jeux (missions dans un terminal simulé, associations, +permissions) et des quiz. Rien à installer, et rien ne peut casser. + +Cette rubrique du wiki en est le complément : les **fiches de référence**, à garder sous la +main ou à imprimer, et les **programmes** pour animer une initiation. + +--- + +## Le parcours « Linux pour le DevOps » + +| Étape | Cours | Jeu | Fiche | +|---|---|---|---| +| 1. L'arborescence | — | [Où range-t-on quoi ?](https://dynamic.alpinux.org/jeux/arborescence/) | — | +| 2. Le terminal | [Se repérer et se déplacer](https://dynamic.alpinux.org/cours/terminal-premiers-pas/) | [Premier jour sur le serveur](https://dynamic.alpinux.org/jeux/terminal-premiers-pas/) | [Le terminal](terminal-se-reperer.md) | +| 3. Les fichiers | — | [Préparer un déploiement](https://dynamic.alpinux.org/jeux/terminal-fichiers/) | — | +| 4. Les permissions | — | [rwx : le jeu des permissions](https://dynamic.alpinux.org/jeux/permissions/) | — | +| 5. Processus et système | — | [Sous le capot](https://dynamic.alpinux.org/jeux/noyau-processus/) | — | +| 6. Diagnostiquer | — | [Incident à 3 h du matin](https://dynamic.alpinux.org/jeux/terminal-incident/) | — | + +Les cours et fiches manquants sont en cours de rédaction. + +## Animer une initiation + +- [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. + +## Voir aussi + +- [Apprendre à programmer en Python](../presentations/Python/README.md), le cours complet + pour débutants. +- [Le Git d'Alpinux](../guides/git-alpinux.md) : créer son compte sur la forge et y publier + son travail. diff --git a/docs/apprendre/semaine-college-lycee.md b/docs/apprendre/semaine-college-lycee.md new file mode 100644 index 0000000..adbd059 --- /dev/null +++ b/docs/apprendre/semaine-college-lycee.md @@ -0,0 +1,202 @@ +--- +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 + +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 +Forgejo**. Le même déroulé sert pour les deux niveaux ; ce qui change, c'est la profondeur. + +!!! warning "Brouillon à valider" + Ce programme est une première proposition. Les points encore ouverts sont listés en fin + de page, dans [À décider avant la semaine](#a-decider). + +--- + +## Les principes + +**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**, +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 +a été modifié pendant la nuit. Chaque après-midi, les élèves avancent dans l'enquête **sur les +vrais postes Linux de la salle**, avec les commandes apprises le matin. Vendredi, une épreuve +finale en équipes désigne le coupable et remet le site en état. + +**Les outils :** + +| Outil | Rôle | +|---|---| +| [dynamic.alpinux.org](https://dynamic.alpinux.org/jeux/) | Cours avec terminal d'essai intégré, jeux, quiz. Rien à installer. | +| Les postes Linux de la salle | La pratique pour de vrai, et l'enquête. | +| Ce wiki | Les fiches de référence, et ce programme. | +| [La forge d'Alpinux](../guides/git-alpinux.md) | Vendredi : publier son travail et collaborer. | +| Un carnet de bord papier | Une page par jour : ce que j'ai appris, une commande à retenir, une question. | + +--- + +## Le déroulé type d'une journée + +| 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 15 | 45 min | Cours sur le site, avec le terminal d'essai | +| 10 h 00 | 30 min | Jeu sur le site | +| 10 h 30 | 15 min | Pause | +| 10 h 45 | 75 min | Pratique sur le vrai terminal, en binômes | +| 12 h 00 | | Repas | +| 13 h 30 | 15 min | Activité débranchée, pour se remettre en route | +| 13 h 45 | 90 min | Enquête : le chapitre du jour | +| 15 h 15 | 15 min | Pause | +| 15 h 30 | 45 min | Approfondissement, différent selon le niveau | +| 16 h 15 | 15 min | Bilan et carnet de bord | + +--- + +## Lundi — Linux et le terminal + +**Objectif du jour :** savoir ce qu'est Linux, se repérer dans l'arborescence et s'y déplacer +au clavier. + +- **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 + spatiale…). +- **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 + commandes `cd` lancées par la classe. Chemins absolus et relatifs se comprennent dans + l'espace avant de se comprendre à l'écran. +- **Site** : jeu [Où range-t-on quoi ?](https://dynamic.alpinux.org/jeux/arborescence/), puis + cours [Le terminal : se repérer et se déplacer](https://dynamic.alpinux.org/cours/terminal-premiers-pas/) + et jeu [Premier jour sur le serveur](https://dynamic.alpinux.org/jeux/terminal-premiers-pas/). +- **Vrai terminal** : ouvrir un terminal (Ctrl + Alt + T), les trois défis de fin de cours, + explorer son dossier personnel. Fiche : [Le terminal](terminal-se-reperer.md). +- **Enquête, chapitre 1 — L'alerte** : le dossier de l'enquête apparaît sur les postes. Le + premier message est caché quelque part : `ls -a`, `cd`, `cat`. + +| | 3e | Terminale | +|---|---|---| +| Approfondissement | Course d'orientation dans l'arborescence : trouver des fichiers à partir d'indices (« je suis un réglage du réseau… ») | Comment Linux démarre : noyau, `/boot`, `/proc`, PID 1 ; explorer `/proc/cpuinfo` et `/proc/meminfo` | + +--- + +## Mardi — Fichiers, droits et recherche + +**Objectif du jour :** créer, déplacer et supprimer des fichiers, comprendre les droits, et +retrouver une information dans une montagne de texte. + +- **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/). +- **Vrai terminal** : `mkdir`, `cp`, `mv`, `rm`, les redirections `>` et `>>`, et un premier + éditeur de texte dans le terminal, **nano**. +- **Débranché — le pipe humain** : une file d'élèves se passe un paquet de cartes. Le premier + ne garde que les cartes rouges (`grep`), le suivant les trie (`sort`), le dernier les compte + (`wc -l`). C'est exactement ce que fait `|`. +- **Enquête, chapitre 2 — Les morceaux** : le message du pirate est découpé en plusieurs + fichiers à rassembler (`cat`, `>`), l'un d'eux est verrouillé (`chmod`), et un indice se + cache dans un long journal (`grep`). + +| | 3e | Terminale | +|---|---|---| +| Approfondissement | Défi « ménage » : ranger un dossier en désordre dans des sous-dossiers par type de fichier | `find`, et les enchaînements `grep … \| sort \| uniq -c \| sort -n` sur un vrai journal | + +--- + +## Mercredi — Bash : faire travailler l'ordinateur à sa place + +**Objectif du jour :** écrire un script, c'est-à-dire une suite de commandes que l'on peut +relancer à volonté. + +- **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 + les Terminale, [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 + « 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. +- **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 + décoder le message qu'il a chiffré. + +| | 3e | Terminale | +|---|---|---| +| Script du jour | Un quiz interactif en Bash avec `read` et `if`, à faire passer au voisin | Un script de sauvegarde qui prend des arguments (`$1`), vérifie les erreurs (`$?`) et date ses archives | +| Approfondissement | Commandes « pour le plaisir » si elles sont installées : `figlet`, `cowsay`, `sl` | Processus et signaux : `ps`, `kill`, `top` ; lien avec le thème « processus » de NSI | + +--- + +## Jeudi — Python + +**Objectif du jour :** écrire et lancer un programme Python depuis le terminal, puis s'en +servir comme outil. + +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. + +- **Lancer Python** : l'interpréteur interactif `python3`, puis un fichier `.py` écrit avec + nano et lancé avec `python3 mon_programme.py`. +- **Enquête, chapitre 4 — Les traces** : un journal de connexions de plusieurs milliers de + lignes. Écrire un programme Python qui compte les connexions par adresse et par heure, + pour trouver quand le pirate est entré. + +| | 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) | +| 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 | + +!!! tip "Pour les Terminale NSI" + Python est déjà le langage de NSI. L'intérêt de la journée n'est pas d'apprendre la + syntaxe, mais de l'utiliser **hors de l'éditeur de l'école** : depuis le terminal, sur + de vraies données, avec la bibliothèque standard (`pathlib`, `csv`, `collections`). + +--- + +## Vendredi — Git, Forgejo, et le dénouement + +**Objectif du jour :** garder l'historique de son travail avec Git, le publier sur une forge, +et travailler à plusieurs sur le même code. + +- **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` ; + la pile de photos, c'est `git log`. +- **Git en local** : `git init`, `git add`, `git commit`, `git log`, `git diff`. Chacun + versionne les scripts et programmes écrits pendant la semaine. +- **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. +- **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 + identifier le coupable, croiser avec les indices des 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 + (réunions Alpinux, install parties, spécialité NSI). + +| | 3e | Terminale | +|---|---|---| +| Forgejo | Modifier un fichier depuis l'interface web et ouvrir une pull request | Branches, pull request depuis le terminal, résolution d'un conflit provoqué exprès | + +--- + +## Ce qu'il faut préparer + +**Sur les postes**, à vérifier en amont : + +- [ ] un terminal accessible aux élèves, et les commandes `git`, `python3`, `nano`, `tree` ; +- [ ] facultatif, pour le plaisir : `figlet`, `cowsay`, `sl` ; +- [ ] l'accès à `dynamic.alpinux.org` et à `gitea.alpinux.org` depuis le réseau de + l'établissement (certains filtres bloquent les forges) ; +- [ ] le dossier de l'enquête, installé par un script à lancer sur chaque poste. + +**Pour la salle** : un vidéoprojecteur, des étiquettes et des cartes pour les activités +débranchées, un carnet de bord par élève, des diplômes à imprimer. + +--- + +## À décider avant la semaine {#a-decider} + +| 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. | +| **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. | +| **Les horaires exacts** de l'établissement. | Le déroulé type se décale facilement, mais les pauses et le repas sont imposés. | +| **Les scores sur le site.** | Ils ne s'enregistrent qu'avec un compte AlpID. Sans compte, on peut faire un classement par équipe à la main, à partir des écrans de fin de partie. | diff --git a/docs/apprendre/terminal-se-reperer.md b/docs/apprendre/terminal-se-reperer.md new file mode 100644 index 0000000..4b65c00 --- /dev/null +++ b/docs/apprendre/terminal-se-reperer.md @@ -0,0 +1,110 @@ +--- +description: Fiche de référence du terminal Linux — l'invite, la forme d'une commande, l'arborescence, les chemins, et les commandes pwd, ls, cd et cat. +--- + +# Le terminal : se repérer et se déplacer + +Fiche de référence. Pour apprendre pas à pas, avec un terminal d'essai intégré, suivre le +**[cours interactif](https://dynamic.alpinux.org/cours/terminal-premiers-pas/)**, puis le jeu +**[Premier jour sur le serveur](https://dynamic.alpinux.org/jeux/terminal-premiers-pas/)**. + +--- + +## Ouvrir un terminal + +| Système | Comment | +|---|---| +| Linux Mint, Ubuntu | **Ctrl + Alt + T**, ou « Terminal » dans le menu | +| Debian (GNOME) | Touche **Super**, puis taper « Terminal » | + +Dans le terminal, **Ctrl + C n'est pas « copier »** : cette combinaison interrompt la +commande en cours. On copie avec **Ctrl + Maj + C** et on colle avec **Ctrl + Maj + V**. + +## Lire l'invite + +``` +alex@srv-web01:~/projets$ +``` + +| Morceau | Signification | +|---|---| +| `alex` | l'utilisateur connecté | +| `srv-web01` | le nom de la machine | +| `~/projets` | le dossier courant (`~` = dossier personnel) | +| `$` | utilisateur ordinaire — `#` signale l'administrateur (*root*) | + +## La forme d'une commande + +``` +ls -l /etc +``` + +**Commande** (`ls`), puis **options** (`-l`), puis **arguments** (`/etc`), séparés par des +espaces. Les majuscules comptent. Les options courtes se combinent : `ls -l -a` = `ls -la`. + +Une commande qui réussit n'affiche souvent rien. Une commande qui échoue affiche un message : +il faut le lire, il indique presque toujours la cause. + +## L'arborescence + +Tout part de la racine `/`. Les dossiers à connaître : + +| Dossier | Contenu | +|---|---| +| `/home/` | les dossiers personnels | +| `/etc` | la configuration du système et des services | +| `/var/log` | les journaux | +| `/tmp` | les fichiers temporaires | +| `/usr/bin` | les programmes | + +## Les chemins + +| Chemin | Type | Part de… | +|---|---|---| +| `/home/alex/projets` | absolu | la racine : fonctionne de partout | +| `projets/site-web` | relatif | le dossier courant | + +| Raccourci | Signification | +|---|---| +| `~` | dossier personnel | +| `.` | dossier courant | +| `..` | dossier parent | +| `-` | (avec `cd`) dossier précédent | + +## Les commandes + +| Commande | Effet | +|---|---| +| `pwd` | affiche le dossier courant | +| `ls` | liste le contenu du dossier courant | +| `ls dossier` | liste le contenu d'un autre dossier | +| `ls -a` | inclut les fichiers cachés (nom commençant par `.`) | +| `ls -l` | format détaillé : droits, propriétaire, groupe, taille, date | +| `cd dossier` | entre dans un dossier | +| `cd ..` | remonte d'un niveau | +| `cd` ou `cd ~` | revient au dossier personnel | +| `cd -` | revient au dossier précédent | +| `cat fichier` | affiche un fichier en entier | +| `less fichier` | parcourt un fichier page par page (`q` pour quitter) | +| `head fichier` / `tail fichier` | les 10 premières / dernières lignes | +| `man commande` | le manuel d'une commande (`q` pour quitter) | +| `history` | les commandes déjà tapées | + +## Les raccourcis clavier + +| Touche | Effet | +|---|---| +| **Tab** | complète un nom ; deux fois, liste les possibilités | +| **↑** / **↓** | parcourent l'historique | +| **Ctrl + C** | annule la commande ou la ligne en cours | +| **Ctrl + L** | efface l'écran | +| **Ctrl + R** | recherche dans l'historique | + +## Les erreurs fréquentes + +| 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 | +| `commande introuvable` | faute de frappe, majuscule, ou programme non installé | relire ; `which commande` | +| `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"` | diff --git a/mkdocs.yml b/mkdocs.yml index 78f03ac..5dfc7e1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -111,6 +111,10 @@ nav: - guides/sauvegardes.md - guides/tesseract.md - guides/ventoy.md + - Apprendre: + - apprendre/index.md + - Une semaine pour découvrir Linux: apprendre/semaine-college-lycee.md + - "Fiche : le terminal": apprendre/terminal-se-reperer.md - Technique: - technique/deploiement-wiki.md - technique/deploiement-dynamic.md From 36b5bf87b24ff41faf778fad4b795d11e74f3c84 Mon Sep 17 00:00:00 2001 From: Alpinux Date: Thu, 22 Oct 2026 08:12:24 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Apprendre=20:=20expliquer=20le=20pourquoi?= =?UTF-8?q?=20de=20chaque=20journ=C3=A9e,=20relire=20et=20compl=C3=A9ter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 Claude-Session: https://claude.ai/code/session_019V4mhmHoJD3b8YfQy249dC --- docs/apprendre/index.md | 2 +- docs/apprendre/semaine-college-lycee.md | 148 ++++++++++++++++++++---- docs/apprendre/terminal-se-reperer.md | 4 +- 3 files changed, 126 insertions(+), 28 deletions(-) diff --git a/docs/apprendre/index.md b/docs/apprendre/index.md index 772c1a5..44fd3a9 100644 --- a/docs/apprendre/index.md +++ b/docs/apprendre/index.md @@ -29,7 +29,7 @@ Les cours et fiches manquants sont en cours de rédaction. ## 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. ## Voir aussi diff --git a/docs/apprendre/semaine-college-lycee.md b/docs/apprendre/semaine-college-lycee.md index adbd059..c905583 100644 --- a/docs/apprendre/semaine-college-lycee.md +++ b/docs/apprendre/semaine-college-lycee.md @@ -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 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 +**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 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**. -**Un fil rouge : l'enquête.** Lundi matin, le site du club informatique d'un lycée imaginaire -a été modifié pendant la nuit. Chaque après-midi, les élèves avancent dans l'enquête **sur les -vrais postes Linux de la salle**, avec les commandes apprises le matin. Vendredi, une épreuve -finale en équipes désigne le coupable et remet le site en état. +**Un fil rouge : l'enquête.** Lundi matin, on découvre que le site du club informatique d'un +lycée imaginaire a été modifié pendant la nuit. Chaque après-midi, les élèves avancent dans +l'enquête **sur les vrais postes Linux de la salle**, avec les commandes apprises le matin. +Vendredi, une épreuve finale en équipes désigne le coupable et remet le site en état. **Les outils :** @@ -42,7 +47,7 @@ finale en équipes désigne le coupable et remet le site en état. | 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 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 30 | 15 min | Pause | | 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 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 - sans qu'on le voie (téléphones Android, box Internet, serveurs, voitures, la Station - spatiale…). + sans qu'on le voie : téléphones Android, box Internet, téléviseurs, serveurs, et les 500 + supercalculateurs les plus puissants du monde. - **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 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 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/), puis [rwx : le jeu des permissions](https://dynamic.alpinux.org/jeux/permissions/). - **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 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`. -- **Site** : jeux [Sous le capot](https://dynamic.alpinux.org/jeux/noyau-processus/) et, pour - les Terminale, [Incident à 3 h du matin](https://dynamic.alpinux.org/jeux/terminal-incident/). +- **Site** : jeu [Sous le capot](https://dynamic.alpinux.org/jeux/noyau-processus/) (ce qui + 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 « 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. - **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 - décoder le message qu'il a chiffré. + le lire sans le lancer, comprendre ce qu'il fait, puis 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 | |---|---|---| @@ -130,8 +164,19 @@ relancer à volonté. **Objectif du jour :** écrire et lancer un programme Python depuis le terminal, puis s'en 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) : -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 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 | |---|---|---| | 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" - Python est déjà le langage de NSI. L'intérêt de la journée n'est pas d'apprendre la - syntaxe, mais de l'utiliser **hors de l'éditeur de l'école** : depuis le terminal, sur - de vraies données, avec la bibliothèque standard (`pathlib`, `csv`, `collections`). +!!! tip "Pour les élèves de terminale NSI" + Python est déjà leur langage. L'intérêt de la journée n'est pas d'apprendre la syntaxe, + mais de l'utiliser **hors de l'éditeur de l'école** : depuis le terminal, sur de vraies + 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, 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, 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 versionne les scripts et programmes écrits pendant la semaine. - **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. - **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 - identifier le coupable, croiser avec les indices des 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 - (réunions Alpinux, install parties, spécialité NSI). + est versionné avec Git, et c'est ce qui va trahir le coupable : chaque commit dit **qui** a + modifié **quoi** et **quand**. Il faut identifier le coupable, croiser avec les indices des + jours précédents, puis remettre le site en état en revenant à une version saine. +- **Clôture (45 min, à la place de l'approfondissement)** : remise des diplômes, ce qu'on + retient de la semaine, et la suite (réunions Alpinux, install parties, spécialité NSI). | | 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 **Sur les postes**, à vérifier en amont : - [ ] 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` ; - [ ] l'accès à `dynamic.alpinux.org` et à `gitea.alpinux.org` depuis le réseau de 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 | |---|---| | **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. | | **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. | diff --git a/docs/apprendre/terminal-se-reperer.md b/docs/apprendre/terminal-se-reperer.md index 4b65c00..bc68d84 100644 --- a/docs/apprendre/terminal-se-reperer.md +++ b/docs/apprendre/terminal-se-reperer.md @@ -104,7 +104,7 @@ Tout part de la racine `/`. Les dossiers à connaître : | 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 | -| `commande introuvable` | faute de frappe, majuscule, ou programme non installé | relire ; `which commande` | +| `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 ; `type commande` dit si elle existe | | `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"` |