App Flask complète pour https://dynamic.alpinux.org : - 10 quiz Linux, 5 niveaux (Découverte → Expert), 50+ questions - Public : Découverte, Débutant, Intermédiaire (6 quiz) - Membres AlpID : Avancé, Expert (4 quiz — Git, Admin, Sécurité, Bash) - Navigation question par question avec avance automatique après choix - Score calculé côté serveur, enregistré en SQLite si connecté - Page profil : meilleurs scores par quiz + historique des tentatives Authentification : - OIDC via authlib + AlpID (Keycloak), SSO partagé avec Gitea/Nextcloud - Décorateur @login_required, redirection post-login sur l'URL d'origine - /auth/login, /auth/callback, /auth/logout Structure : - dynamic/app.py, db.py, quiz.py, auth_utils.py - dynamic/routes/ (public.py, auth.py, protected.py) - dynamic/templates/ (base, index, quiz/*, profil/) - dynamic/static/ (style.css thème Alpinux, quiz.js vanilla) - dynamic/data/quizzes.json (source de vérité des questions) - dynamic/.env.example Infrastructure : - scripts/dynamic.alpinux.org.vhost.conf (Apache reverse proxy) - scripts/dynamic.alpinux.org.service (systemd Gunicorn) - docs/technique/deploiement-dynamic.md (procédure complète) - mkdocs.yml : page de déploiement ajoutée à la nav Technique - .gitignore : exclut venv/ et .env Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
679 lines
21 KiB
JSON
679 lines
21 KiB
JSON
[
|
|
{
|
|
"id": "bureau-decouverte",
|
|
"title": "Le bureau Linux",
|
|
"description": "Maîtrisez les bases de l'interface graphique de Linux Mint.",
|
|
"level": "Découverte",
|
|
"level_id": 1,
|
|
"members_only": false,
|
|
"duration_min": 3,
|
|
"icon": "🖥️",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Sur Linux Mint, comment ouvre-t-on une application depuis le menu ?",
|
|
"choices": [
|
|
"On double-clique sur l'icône dans la barre des tâches",
|
|
"On clique sur le menu principal puis on cherche l'application",
|
|
"On appuie sur F5",
|
|
"On tape le nom dans la barre d'adresse"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Que se passe-t-il quand on clique sur le bouton ✕ d'une fenêtre ?",
|
|
"choices": [
|
|
"Le programme se met en veille",
|
|
"La fenêtre se réduit dans la barre des tâches",
|
|
"Le programme se ferme",
|
|
"L'ordinateur s'éteint"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Qu'est-ce que la barre des tâches sous Linux Mint (bureau Cinnamon) ?",
|
|
"choices": [
|
|
"Une barre de progression pour les téléchargements",
|
|
"La barre en bas de l'écran qui affiche les fenêtres ouvertes",
|
|
"Un outil de traduction de texte",
|
|
"La barre de menu d'une application"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Comment déplacer une fenêtre sur le bureau ?",
|
|
"choices": [
|
|
"En cliquant droit dessus et en choisissant « Déplacer »",
|
|
"En faisant glisser la barre de titre de la fenêtre",
|
|
"En maintenant Ctrl et en cliquant",
|
|
"Ce n'est pas possible sous Linux"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Où vont les fichiers quand on les supprime dans le gestionnaire de fichiers ?",
|
|
"choices": [
|
|
"Ils sont définitivement effacés immédiatement",
|
|
"Ils vont dans la Corbeille",
|
|
"Ils sont déplacés vers /tmp",
|
|
"Ils sont compressés automatiquement"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Comment prendre une capture d'écran sous Linux Mint ?",
|
|
"choices": [
|
|
"Ctrl+P",
|
|
"Alt+Impr écran (pour la fenêtre active)",
|
|
"La touche Impr écran (Print Screen) pour tout l'écran",
|
|
"Ctrl+C"
|
|
],
|
|
"answer": 2
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "internet-decouverte",
|
|
"title": "Internet et le navigateur web",
|
|
"description": "Naviguez sur le web en toute confiance avec Firefox.",
|
|
"level": "Découverte",
|
|
"level_id": 1,
|
|
"members_only": false,
|
|
"duration_min": 3,
|
|
"icon": "🌐",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Qu'est-ce qu'une URL ?",
|
|
"choices": [
|
|
"Un type de virus informatique",
|
|
"L'adresse d'une page web",
|
|
"Un logiciel de navigation",
|
|
"Un protocole de messagerie"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Que signifie HTTPS par rapport à HTTP ?",
|
|
"choices": [
|
|
"HTTPS est plus rapide que HTTP",
|
|
"HTTPS chiffre la communication entre votre navigateur et le serveur",
|
|
"HTTPS est réservé aux sites professionnels",
|
|
"Il n'y a aucune différence pratique"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Comment ouvrir un nouvel onglet dans Firefox ?",
|
|
"choices": [
|
|
"Ctrl+N",
|
|
"Ctrl+T",
|
|
"Ctrl+O",
|
|
"F5"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Qu'est-ce qu'un moteur de recherche ?",
|
|
"choices": [
|
|
"Un logiciel qui accélère votre ordinateur",
|
|
"Un service qui référence des pages web et permet de les trouver",
|
|
"Un programme qui traduit les pages web automatiquement",
|
|
"Un type de navigateur spécialisé"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Comment recharger une page web dans Firefox ?",
|
|
"choices": [
|
|
"Ctrl+R ou F5",
|
|
"Ctrl+L",
|
|
"Alt+F4",
|
|
"Ctrl+Z"
|
|
],
|
|
"answer": 0
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Qu'est-ce qu'un favori (bookmark) dans un navigateur ?",
|
|
"choices": [
|
|
"Une page web enregistrée pour y accéder rapidement",
|
|
"Le site web le plus visité de la semaine",
|
|
"L'historique complet de navigation",
|
|
"Un mot de passe enregistré"
|
|
],
|
|
"answer": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "fichiers-debutant",
|
|
"title": "Fichiers et dossiers",
|
|
"description": "Comprenez l'organisation des fichiers sous Linux.",
|
|
"level": "Débutant",
|
|
"level_id": 2,
|
|
"members_only": false,
|
|
"duration_min": 4,
|
|
"icon": "📁",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Quel est le dossier personnel de l'utilisateur « alice » sous Linux ?",
|
|
"choices": [
|
|
"/home/alice",
|
|
"C:\\Users\\alice",
|
|
"/usr/alice",
|
|
"/root/alice"
|
|
],
|
|
"answer": 0
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Qu'est-ce qu'une extension de fichier ?",
|
|
"choices": [
|
|
"La taille d'un fichier en octets",
|
|
"Les lettres après le point dans le nom d'un fichier (.pdf, .mp3…)",
|
|
"Le dossier où se trouve un fichier",
|
|
"La date de création d'un fichier"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Que représente le dossier / (barre oblique seule) sous Linux ?",
|
|
"choices": [
|
|
"Le dossier personnel de l'utilisateur",
|
|
"Un dossier temporaire vide",
|
|
"La racine du système de fichiers (le point de départ de tout)",
|
|
"Le dossier des fichiers de configuration"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Comment afficher les fichiers cachés dans Nemo (le gestionnaire de fichiers de Linux Mint) ?",
|
|
"choices": [
|
|
"Clic droit → « Afficher les fichiers cachés »",
|
|
"Menu Affichage → « Afficher les fichiers cachés » ou raccourci Ctrl+H",
|
|
"Il n'est pas possible d'afficher les fichiers cachés",
|
|
"En tapant « hidden » dans la barre d'adresse"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Sous Linux, par quel caractère commence le nom d'un fichier caché ?",
|
|
"choices": [
|
|
"Un underscore _",
|
|
"Un point . (exemple : .bashrc)",
|
|
"Un tiret -",
|
|
"Un dièse #"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Que fait le raccourci Ctrl+Z dans la plupart des applications ?",
|
|
"choices": [
|
|
"Fermer l'application",
|
|
"Annuler la dernière action",
|
|
"Enregistrer le fichier",
|
|
"Couper la sélection"
|
|
],
|
|
"answer": 1
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "logiciels-debutant",
|
|
"title": "Installer des logiciels",
|
|
"description": "Gérez vos logiciels sous Linux Mint sans ligne de commande.",
|
|
"level": "Débutant",
|
|
"level_id": 2,
|
|
"members_only": false,
|
|
"duration_min": 4,
|
|
"icon": "📦",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Quel est l'outil graphique pour installer des logiciels sous Linux Mint ?",
|
|
"choices": [
|
|
"Le Gestionnaire de logiciels",
|
|
"L'App Store",
|
|
"Le Centre de téléchargement Windows",
|
|
"Le Panneau de configuration"
|
|
],
|
|
"answer": 0
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Qu'est-ce qu'un dépôt de logiciels (repository) sous Linux ?",
|
|
"choices": [
|
|
"Un disque dur externe pour stocker des sauvegardes",
|
|
"Un serveur qui héberge des paquets logiciels prêts à installer",
|
|
"Un logiciel de gestion de fichiers",
|
|
"Une partition dédiée aux programmes"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Pourquoi faut-il régulièrement mettre à jour son système Linux ?",
|
|
"choices": [
|
|
"Pour améliorer les performances uniquement",
|
|
"Pour corriger les bugs et les failles de sécurité",
|
|
"Pour changer l'apparence du bureau",
|
|
"Les mises à jour ne sont pas nécessaires sous Linux"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Qu'est-ce que LibreOffice ?",
|
|
"choices": [
|
|
"Un système d'exploitation",
|
|
"Un navigateur web libre",
|
|
"Une suite bureautique libre, alternative à Microsoft Office",
|
|
"Un antivirus"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Comment installe-t-on un logiciel en ligne de commande sous Linux Mint ?",
|
|
"choices": [
|
|
"install <logiciel>",
|
|
"sudo apt install <logiciel>",
|
|
"get-app <logiciel>",
|
|
"download <logiciel>"
|
|
],
|
|
"answer": 1
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "terminal-intermediaire",
|
|
"title": "Le terminal — premiers pas",
|
|
"description": "Découvrez la puissance de la ligne de commande Linux.",
|
|
"level": "Intermédiaire",
|
|
"level_id": 3,
|
|
"members_only": false,
|
|
"duration_min": 5,
|
|
"icon": "⌨️",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Quelle commande affiche le répertoire courant (là où vous êtes) ?",
|
|
"choices": ["ls", "cd", "pwd", "dir"],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Quelle commande liste les fichiers et dossiers du répertoire courant ?",
|
|
"choices": ["list", "ls", "dir", "files"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Que fait la commande `cd ..` ?",
|
|
"choices": [
|
|
"Revient au dossier personnel (~)",
|
|
"Monte d'un niveau dans l'arborescence (dossier parent)",
|
|
"Change le nom du dossier courant",
|
|
"Crée un nouveau dossier"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Quelle commande crée un nouveau dossier nommé « projets » ?",
|
|
"choices": ["newdir projets", "create projets", "mkdir projets", "touch projets"],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Que fait la commande `man ls` ?",
|
|
"choices": [
|
|
"Affiche la version de la commande ls",
|
|
"Exécute ls avec toutes les options disponibles",
|
|
"Affiche le manuel de la commande ls",
|
|
"Liste les fichiers en mode manuel"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Que signifie le ~ (tilde) dans le prompt du terminal ?",
|
|
"choices": [
|
|
"Le dossier racine /",
|
|
"Le dossier /tmp",
|
|
"Le dossier personnel de l'utilisateur (/home/utilisateur)",
|
|
"Le dernier dossier visité"
|
|
],
|
|
"answer": 2
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "permissions-intermediaire",
|
|
"title": "Les permissions Linux",
|
|
"description": "Comprenez qui peut lire, écrire et exécuter quoi.",
|
|
"level": "Intermédiaire",
|
|
"level_id": 3,
|
|
"members_only": false,
|
|
"duration_min": 5,
|
|
"icon": "🔐",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Que signifient les permissions `rwxr-xr--` sur un fichier ?",
|
|
"choices": [
|
|
"Lecture seule pour tout le monde",
|
|
"Propriétaire : lire/écrire/exécuter | Groupe : lire/exécuter | Autres : lire seulement",
|
|
"Propriétaire : tout | Groupe : tout | Autres : rien",
|
|
"Ce format de permissions n'existe pas sous Linux"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Quelle commande modifie les permissions d'un fichier ?",
|
|
"choices": ["perm", "chperm", "chmod", "access"],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Que fait `chmod 755 script.sh` ?",
|
|
"choices": [
|
|
"Supprime tous les droits sur le fichier",
|
|
"Donne tous les droits au propriétaire, lecture+exécution au groupe et aux autres",
|
|
"Rend le fichier lisible uniquement par le propriétaire",
|
|
"Change le propriétaire du fichier"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Quelle commande change le propriétaire d'un fichier ?",
|
|
"choices": ["owner", "chown", "chmod", "usermod"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Que signifie la lettre `x` dans les permissions Linux ?",
|
|
"choices": [
|
|
"Exclure (exclude)",
|
|
"eXtended (étendu)",
|
|
"Exécuter (execute)",
|
|
"eXport"
|
|
],
|
|
"answer": 2
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "git-avance",
|
|
"title": "Git — les bases",
|
|
"description": "Maîtrisez la gestion de versions avec Git.",
|
|
"level": "Avancé",
|
|
"level_id": 4,
|
|
"members_only": true,
|
|
"duration_min": 6,
|
|
"icon": "🌿",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Que fait `git init` dans un dossier ?",
|
|
"choices": [
|
|
"Télécharge un dépôt distant",
|
|
"Initialise un nouveau dépôt Git local dans le dossier",
|
|
"Initialise la connexion avec GitHub/Gitea",
|
|
"Réinitialise toutes les modifications en cours"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Quelle commande affiche l'état actuel du dépôt (fichiers modifiés, staged, etc.) ?",
|
|
"choices": ["git log", "git diff", "git status", "git show"],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Comment ajouter tous les fichiers modifiés à l'index (staging area) ?",
|
|
"choices": ["git commit -a", "git add .", "git stage all", "git push all"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Que fait `git commit -m \"message\"` ?",
|
|
"choices": [
|
|
"Envoie les modifications vers le dépôt distant",
|
|
"Crée un point de sauvegarde (commit) avec le message donné",
|
|
"Ajoute les fichiers à l'index",
|
|
"Crée une nouvelle branche nommée « message »"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Quelle commande envoie les commits locaux vers le dépôt distant ?",
|
|
"choices": ["git send", "git upload", "git push", "git commit --remote"],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Que fait `git pull` ?",
|
|
"choices": [
|
|
"Supprime les modifications locales non committées",
|
|
"Récupère et fusionne les modifications du dépôt distant",
|
|
"Crée une nouvelle branche à partir du distant",
|
|
"Affiche les derniers commits du dépôt distant"
|
|
],
|
|
"answer": 1
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "admin-avance",
|
|
"title": "Administration système",
|
|
"description": "Gérez votre système Linux comme un pro.",
|
|
"level": "Avancé",
|
|
"level_id": 4,
|
|
"members_only": true,
|
|
"duration_min": 6,
|
|
"icon": "⚙️",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Quelle commande met à jour la liste des paquets disponibles sous Debian/Ubuntu/Mint ?",
|
|
"choices": ["sudo apt upgrade", "sudo apt update", "sudo apt refresh", "sudo dpkg update"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Quelle commande affiche les processus en cours d'exécution de façon interactive ?",
|
|
"choices": ["ps aux", "top ou htop", "process", "list-proc"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Comment arrêter le service `nginx` avec systemd ?",
|
|
"choices": [
|
|
"service nginx kill",
|
|
"nginx --stop",
|
|
"sudo systemctl stop nginx",
|
|
"sudo kill nginx"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Que fait la commande `sudo` ?",
|
|
"choices": [
|
|
"Exécute une commande avec les droits d'un autre utilisateur (par défaut root)",
|
|
"Sécurise une commande contre les erreurs",
|
|
"Vérifie si une commande existe sur le système",
|
|
"Exécute une commande en arrière-plan"
|
|
],
|
|
"answer": 0
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Quelle commande affiche l'espace disque disponible sur les partitions montées ?",
|
|
"choices": ["diskspace", "du -h", "df -h", "free -h"],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Comment afficher les dernières lignes d'un fichier de log en temps réel ?",
|
|
"choices": [
|
|
"cat /var/log/syslog",
|
|
"tail -f /var/log/syslog",
|
|
"watch /var/log/syslog",
|
|
"log -f /var/log/syslog"
|
|
],
|
|
"answer": 1
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "securite-expert",
|
|
"title": "Sécurité Linux",
|
|
"description": "Bonnes pratiques et outils de sécurité sous Linux.",
|
|
"level": "Expert",
|
|
"level_id": 5,
|
|
"members_only": true,
|
|
"duration_min": 7,
|
|
"icon": "🛡️",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Pourquoi ne faut-il pas utiliser le compte root au quotidien ?",
|
|
"choices": [
|
|
"Root est plus lent que les autres utilisateurs",
|
|
"Une erreur ou un programme malveillant peut endommager tout le système sans restriction",
|
|
"Root ne peut pas accéder aux fichiers personnels",
|
|
"Il n'y a aucun risque particulier à utiliser root"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Qu'est-ce qu'une clé SSH ?",
|
|
"choices": [
|
|
"Un mot de passe chiffré pour les connexions web HTTPS",
|
|
"Une paire cryptographique (clé publique/privée) pour s'authentifier sans mot de passe",
|
|
"Un certificat SSL pour serveurs web",
|
|
"Un outil de chiffrement de disque comme LUKS"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Quelle commande génère une paire de clés SSH de type Ed25519 ?",
|
|
"choices": [
|
|
"ssh-create -t ed25519",
|
|
"openssl genkey ed25519",
|
|
"ssh-keygen -t ed25519",
|
|
"gpg --gen-key --type ed25519"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Quel est le principe du moindre privilège (least privilege) ?",
|
|
"choices": [
|
|
"Toujours utiliser le compte root pour les tâches système",
|
|
"Accorder à chaque processus et utilisateur uniquement les droits strictement nécessaires",
|
|
"Réduire les performances du système pour plus de sécurité",
|
|
"Interdire l'accès internet aux utilisateurs non-root"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Quelle commande affiche les connexions réseau actives et les ports en écoute ?",
|
|
"choices": ["ifconfig -a", "ss -tulpn (ou netstat -tulpn)", "ping -l", "route -n"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 6,
|
|
"text": "Qu'est-ce qu'un pare-feu (firewall) ?",
|
|
"choices": [
|
|
"Un antivirus spécialisé pour les applications web",
|
|
"Un système qui filtre le trafic réseau entrant et sortant selon des règles",
|
|
"Un logiciel qui chiffre les applications installées",
|
|
"Un outil de sauvegarde automatique"
|
|
],
|
|
"answer": 1
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "bash-expert",
|
|
"title": "Bash scripting",
|
|
"description": "Automatisez vos tâches avec des scripts shell.",
|
|
"level": "Expert",
|
|
"level_id": 5,
|
|
"members_only": true,
|
|
"duration_min": 7,
|
|
"icon": "📜",
|
|
"questions": [
|
|
{
|
|
"id": 1,
|
|
"text": "Quelle doit être la première ligne d'un script bash ?",
|
|
"choices": ["#!/usr/bin/python3", "#!/bin/bash", "#bash", "// bash script"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 2,
|
|
"text": "Comment rendre un script bash exécutable ?",
|
|
"choices": ["bash +x script.sh", "chmod +x script.sh", "exec script.sh", "run script.sh"],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 3,
|
|
"text": "Que représente `$1` dans un script bash ?",
|
|
"choices": [
|
|
"Le nom du script lui-même",
|
|
"La valeur de la variable nommée « 1 »",
|
|
"Le premier argument passé au script lors de son appel",
|
|
"Le code de retour de la dernière commande exécutée"
|
|
],
|
|
"answer": 2
|
|
},
|
|
{
|
|
"id": 4,
|
|
"text": "Quelle est la différence entre `>` et `>>` en redirection ?",
|
|
"choices": [
|
|
">> est plus rapide que >",
|
|
">> ajoute à la fin du fichier existant, > écrase le fichier",
|
|
">> redirige les erreurs, > redirige la sortie standard",
|
|
"Aucune différence pratique entre les deux"
|
|
],
|
|
"answer": 1
|
|
},
|
|
{
|
|
"id": 5,
|
|
"text": "Comment tester si le fichier `/etc/hosts` existe dans un script bash ?",
|
|
"choices": [
|
|
"if exists \"/etc/hosts\"; then",
|
|
"if [ -f \"/etc/hosts\" ]; then",
|
|
"if file \"/etc/hosts\"; then",
|
|
"if check -f \"/etc/hosts\"; then"
|
|
],
|
|
"answer": 1
|
|
}
|
|
]
|
|
}
|
|
]
|