Aller au contenu

Quiz : Linux, premiers pas

100 Comprendre ⏱ 35 min linuxbashubuntu

Ce quiz valide le niveau 100 (Comprendre) des notions du cours Linux : premiers pas. Visez au moins 16 bonnes réponses sur 20 ; chaque réponse renvoie à la leçon à relire. Le niveau 200 se valide avec le lab.

Le système et le shell

1. Un conteneur Alpine tourne sur un hôte Ubuntu 24.04. Quel noyau utilise-t-il ?

  • a) Le noyau d'Alpine, embarqué dans l'image
  • b) Celui de l'hôte : un conteneur n'a pas de noyau
  • c) Un noyau virtualisé par Docker
  • d) Cela dépend de l'image de base
Réponse

b. Un conteneur est un ensemble de processus isolés sur le noyau de l'hôte ; l'image n'apporte que l'espace utilisateur (bibliothèques, programmes). uname -r dans le conteneur affiche le noyau de l'hôte. Leçon 1.

2. Pourquoi une date de fin de support compte-t-elle pour une distribution installée sur un serveur ?

Réponse

Après cette date, la distribution ne publie plus de correctifs de sécurité : chaque faille découverte ensuite reste ouverte. On choisit donc une version LTS et l'on planifie la migration avant la fin du support (Ubuntu 24.04 : mai 2029, prolongeable avec Ubuntu Pro). Leçon 1.

3. type ls répond ls is aliased to `ls --color=auto', alors que which ls répond /usr/bin/ls. Lequel dit ce que le shell exécutera, et pourquoi ?

Réponse

type : le shell cherche d'abord un alias, puis un mot-clé, une fonction, une commande interne, et seulement ensuite un programme dans PATH. which est un programme externe qui ne connaît que PATH. Leçon 2.

4. Comment taper une commande qui contient un mot de passe sans qu'elle reste dans l'historique de Bash, et pourquoi vaut-il mieux éviter de le faire tout court ?

Réponse

Avec HISTCONTROL=ignorespace (ou ignoreboth, la valeur par défaut d'Ubuntu), une ligne qui commence par une espace n'est pas enregistrée. Mais le secret reste visible dans la liste des processus pendant l'exécution, et parfois dans les journaux : on préfère une saisie interactive ou un fichier aux droits restreints. Leçon 2.

Fichiers et texte

5. Où ranger, selon la FHS, la configuration de Signalements, son état persistant et ses journaux écrits sur disque ?

Réponse

Configuration dans /etc (/etc/signalements), état dans /var/lib (/var/lib/signalements), journaux dans /var/log. Le code d'un logiciel qui ne vient pas de la distribution va dans /opt ou /usr/local. Leçon 3.

6. df -h indique un disque plein à 100 %, mais du -sh /var/log est loin du compte, alors qu'on vient de supprimer un gros journal. Que se passe-t-il, et comment le vérifier ?

Réponse

Le fichier a perdu son nom, mais un processus le garde ouvert : son inode et ses blocs existent toujours, comptés par df et invisibles pour du. lsof +L1 liste les fichiers supprimés encore ouverts ; redémarrer le processus (ou tronquer le fichier par /proc/<pid>/fd/) libère l'espace. Leçon 4.

7. Quelle est la différence entre un lien physique et un lien symbolique, et lequel peut être « cassé » ?

Réponse

Un lien physique est un nom de plus pour le même inode : le fichier existe tant qu'il lui reste un nom. Un lien symbolique est un petit fichier qui contient un chemin : si la cible disparaît ou est renommée, le lien est cassé. Leçon 4.

8. Pourquoi suivre un journal avec tail -F plutôt que tail -f ?

Réponse

tail -f suit le fichier ouvert : après une rotation (le journal est renommé et un nouveau fichier est créé), il continue de lire l'ancien et ne montre plus rien. tail -F suit le nom et rouvre le nouveau fichier. Leçon 5.

9. Vous avez ouvert un fichier de configuration dans vim et l'avez abîmé. Comment quitter sans enregistrer ?

Réponse

Échap pour revenir en mode normal, puis :q! et Entrée. Et pour la suite : une copie datée avant de modifier, sudoedit plutôt que sudo vim, diff -u pour relire le changement. Leçon 5.

Redirections et environnement

10. Pourquoi sudo echo "APP_VERSION=1.0.0" > /etc/signalements/env échoue-t-il avec « Permission denied », et que faut-il écrire ?

Réponse

La redirection est faite par votre shell, avec vos droits, avant même que sudo ne s'exécute ; seul echo tourne en root. On écrit echo "APP_VERSION=1.0.0" | sudo tee /etc/signalements/env > /dev/null (ou sudoedit). Leçon 6.

11. Quelle est la différence entre commande > sortie.txt 2>&1 et commande 2>&1 > sortie.txt ?

Réponse

Les redirections s'appliquent de gauche à droite, et 2>&1 copie la destination actuelle de la sortie standard. Dans la première forme, les deux flux vont dans le fichier. Dans la seconde, les erreurs vont là où allait la sortie standard avant la redirection (le terminal), et seule la sortie standard va dans le fichier. Leçon 6.

12. grep ERREUR journal.log | wc -l réussit (code 0) alors que journal.log n'existe pas. Pourquoi, et comment le faire échouer dans un script ?

Réponse

Le code de sortie d'un tube est celui de sa dernière commande, ici wc, qui a bien compté zéro ligne. set -o pipefail fait échouer le tube dès qu'une commande échoue ; PIPESTATUS donne le code de chacune. Leçon 6.

13. Signalements fonctionne quand vous le lancez à la main, mais pas comme service : il ne trouve pas DATABASE_URL, que vous avez exportée dans votre ~/.bashrc. Expliquez.

Réponse

Un service est lancé par systemd, qui ne lit aucun fichier de démarrage du shell et ne connaît pas votre session : l'environnement d'un processus ne vient que de son parent. La variable se déclare dans l'unité (Environment=) ou, pour un secret, dans un fichier protégé lu par EnvironmentFile=. Leçon 7.

Utilisateurs et permissions

14. Vous lancez sudo usermod -G signalements-dev camille. Quel est le problème ?

Réponse

Sans -a, -G remplace la liste des groupes supplémentaires de camille : elle perd tous ses autres groupes, dont sudo. La bonne commande est usermod -aG signalements-dev camille, et le nouveau groupe n'est pris en compte qu'à la connexion suivante. Leçon 8.

15. Pourquoi une règle sudo qui autorise sudo less /var/log/syslog revient-elle à donner un accès root complet ?

Réponse

less sait lancer un shell (!sh), qui hérite des droits de root. Toute commande capable de lancer un shell ou d'écrire un fichier arbitraire (éditeurs, visualiseurs, find -exec, tar) vaut ALL ; la liste GTFOBins les recense. On autorise des commandes précises, avec leurs arguments, et l'on préfère sudoedit ou l'appartenance au groupe systemd-journal pour lire des journaux. Leçon 8.

16. Le fichier /opt/signalements/app.py est en 644, mais le service, qui tourne sous le compte signalements, reçoit « Permission denied ». /opt/signalements est en 700 root:root. Pourquoi ?

Réponse

Pour ouvrir un fichier, il faut pouvoir traverser chaque répertoire du chemin (droit x). 700 interdit la traversée à tout autre que root, quel que soit le mode du fichier. namei -l /opt/signalements/app.py le montre ; la correction est 755 sur le répertoire, jamais chmod 777. Leçon 9.

17. Quel est l'effet du bit setgid sur un répertoire comme /srv/equipe (mode 2770) ?

Réponse

Les fichiers et sous-répertoires créés dedans héritent du groupe du répertoire (et les sous-répertoires reprennent le bit), au lieu du groupe principal de la personne qui les crée : tout le groupe garde l'accès. C'est l'outil des dossiers d'équipe. Leçon 9.

Processus, services et paquets

18. Pour arrêter un processus Gunicorn qui ne répond plus, pourquoi envoyer SIGTERM avant SIGKILL ?

Réponse

SIGTERM demande un arrêt propre : le programme peut finir les requêtes en cours, fermer ses connexions et ses fichiers. SIGKILL ne peut pas être intercepté : le processus disparaît sans rien nettoyer. On envoie TERM, on attend, et KILL seulement si le processus ne s'arrête pas. Un processus en état D ne meurt même pas avec KILL tant que son entrée-sortie n'est pas terminée. Leçon 10.

19. Après un redémarrage de la machine, signalements.service ne tourne plus, alors qu'il fonctionnait. Que s'est-il probablement passé, et quelle commande corrige ?

Réponse

Le service a été démarré (start) mais jamais activé (enable) : rien ne le relance au démarrage. sudo systemctl enable --now signalements l'active et le démarre ; systemctl is-enabled signalements le vérifie. Leçon 11.

20. Sur Ubuntu Server, qu'est-ce qui applique les correctifs de sécurité sans intervention, et qu'est-ce qui ne se fait pas tout seul ?

Réponse

unattended-upgrades, déclenché chaque jour par des minuteurs systemd, installe les mises à jour de la poche -security ; needrestart redémarre les services qui utilisent une bibliothèque remplacée. La machine, elle, n'est pas redémarrée par défaut : un nouveau noyau n'est utilisé qu'au prochain démarrage, que signale /var/run/reboot-required. Leçon 12.

Plan du cours