QCM — Systèmes Linux & Programmation Shell
Niveau Intermédiaire | 70 Questions | Corrigé complet avec explications
Q1. Commandes permettant d'obtenir le type/contenu d'un fichier
✔ B. sort | C. file | D. cat
■ file identifie le type, cat affiche le contenu
Q2. Lire un fichier texte dans un pipeline
✔ C. Redirige uniquement vers [Link] sans afficher à l'écran
■ La redirection > envoie la sortie vers un fichier
Q3. Que fait diff fichier1 fichier2 ?
✔ B. Affiche les différences ligne par ligne entre les deux fichiers
■ diff compare deux fichiers et montre les lignes différentes
Q4. Affirmations correctes sur les tableaux (arrays) Bash
✔ A. ${arr[@]} développe tous les éléments C. arr=(a b c) déclare un tableau
■ En Bash, arr=(...) déclare un tableau, ${arr[@]} accède à tous les éléments
Q5. Compte le nombre de lignes contenant 'error'
✔ D. grep -c 'error' [Link]
■ -c compte le nombre de lignes correspondantes
Q6. Cherche le PID d'un processus nommé nginx
✔ A. pidof nginx ou D. ps aux | grep nginx
■ pidof renvoie directement le PID, ps aux liste tous les processus
Q7. Exporter la variable PATH visible dans les sous-shells
✔ A. export PATH=$PATH:/nouveau/chemin
■ export rend la variable disponible pour les sous-processus
Q8. Éléments d'un shebang valide pour un script Bash
✔ C. #!/usr/bin/env bash (préférable pour la portabilité) D. Il doit être la première ligne du script
■ Le shebang indique l'interpréteur à utiliser
Q9. Que fait set -e en début de script ?
✔ C. Le script s'arrête si une commande retourne un code d'erreur non nul
■ set -e active l'arrêt automatique sur erreur
Q10. Que fait uniq -c appliqué à une sortie triée ?
✔ B. Affiche les lignes avec leur nombre d'occurrences
■ -c préfixe chaque ligne par le nombre d'occurrences
Q11. Exécuter une commande avec & en fin de ligne
✔ C. La commande s'exécute en arrière-plan
■ & lance la commande en background
Q12. grep recherche 'erreur' insensible à la casse dans [Link]
✔ B. grep -i 'erreur' [Link]
■ -i ignore la distinction majuscules/minuscules
Q13. Que fait cat << EOF ... EOF dans un script ?
✔ C. Crée un here-document / lit un bloc de texte en entrée
■ Le here-document passe du texte multiligne en entrée d'une commande
Q14. Comment définir une fonction dans un script Bash ?
✔ A. function ma_fonction() { ... } D. ma_fonction() { ... }
■ Les deux syntaxes sont valides en Bash
Q15. Options de set utiles pour déboguer un script Bash
✔ A. set -v (affiche les lignes du script à la lecture) B. set -x (affiche chaque commande avant
exécution)
■ set -x est le plus utilisé pour le débogage
Q16. Que fait la commande wc -l [Link] ?
✔ A. Compte le nombre de lignes dans [Link]
■ -l compte les lignes
Q17. Affirmations correctes sur la commande find
✔ D. -exec permet d'exécuter une commande sur chaque fichier trouvé
■ -exec {} \; exécute une commande pour chaque résultat
Q18. Commandes pour gérer les jobs en arrière-plan
✔ A. fg %1 (ramène job 1 en avant-plan) B. jobs (liste les jobs) D. bg %2 (reprend job 2 en
arrière-plan)
■ fg/bg/jobs sont les commandes de gestion des jobs
Q19. Modifier la priorité (nice value) d'un processus PID 5678 à +10
✔ D. renice 10 5678
■ renice modifie la priorité d'un processus déjà en cours
Q20. Remplace la première occurrence de foo par bar
✔ D. sed 's/foo/bar/' [Link]
■ sed 's/motif/remplacement/' remplace la 1ère occurrence par ligne
Q21. Effets du bit SUID sur un exécutable
✔ B. L'exécutable s'exécute avec les droits du propriétaire du fichier
■ SUID = Set User ID, élève les privilèges temporairement
Q22. Envoyer le signal SIGKILL au processus PID 1234
✔ C. kill -9 1234
■ -9 correspond au signal SIGKILL (arrêt forcé)
Q23. Quelle commande affiche l'arborescence des processus ?
✔ B. pstree
■ pstree affiche les processus sous forme d'arbre
Q24. Lire un fichier ligne par ligne en script Bash
✔ A. while IFS= read -r ligne; do ...; done < fichier C. while read ligne; do ...; done < fichier
■ IFS= évite la suppression des espaces en début/fin
Q25. Afficher les 20 dernières lignes de syslog
✔ A. tail -n 20 /var/log/syslog
■ tail -n N affiche les N dernières lignes
Q26. Que représente $1 dans un script Bash ?
✔ B. Le premier argument passé au script
■ $1, $2... représentent les arguments positionnels
Q27. Syntaxe correcte de case en Bash
✔ A. case $var in motif) commande;; esac
■ La structure case...in...esac est propre à Bash/sh
Q28. Que fait find /tmp --empty --delete ?
✔ A. Supprime tous les fichiers et répertoires vides dans /tmp
■ --empty filtre les fichiers vides, --delete les supprime
Q29. Que représente $$ dans un script Bash ?
✔ C. Le PID du script en cours
■ $$ contient le PID du processus shell courant
Q30. awk affiche le 3e champ d'un fichier CSV (séparateur virgule)
✔ A. awk -F',' '{print $3}' [Link]
■ -F définit le séparateur de champ, $3 = 3e champ
Q31. Différence entre pipe | et substitution de processus <(commande)
✔ B. La substitution permet de passer la sortie d'une commande comme un fichier
■ <(cmd) crée un descripteur de fichier virtuel
Q32. Que fait la commande cp -r /src /dest ?
✔ A. Copie récursivement le répertoire /src vers /dest
■ -r (ou -R) copie récursivement les répertoires
Q33. Que signifie 2>&1 ?
✔ B. Redirige la sortie d'erreur (fd 2) vers la sortie standard (fd 1)
■ 2>&1 fusionne stderr dans stdout
Q34. Que fait trap 'rm -f /tmp/lock' EXIT dans un script ?
✔ B. Exécute la commande de nettoyage à la fin du script
■ EXIT déclenche la commande quand le script se termine
Q35. Que fait nohup commande & ?
✔ C. Lance la commande en arrière-plan, immunisée contre SIGHUP
■ nohup empêche la terminaison lors de la déconnexion
Q36. Quelle commande sed supprime les lignes vides ?
✔ B. sed '/^$/d' fichier
■ ^$ correspond à une ligne vide, d la supprime
Q37. Créer l'arborescence /tmp/a/b/c en une seule fois
✔ B. mkdir -p /tmp/a/b/c
■ -p crée tous les répertoires parents manquants
Q40. Commandes ajoutant la sortie à la fin de [Link]
✔ B. commande >> [Link]
■ >> ajoute (append) sans écraser le fichier
Q41. Différence entre > et >>
✔ B. > écrase le fichier, >> ajoute à la suite
■ > tronque et écrase, >> ajoute en fin de fichier
Q42. Afficher en temps réel les nouvelles lignes de /var/log/messages
✔ D. tail -f /var/log/messages
■ -f (follow) suit les nouvelles lignes en temps réel
Q43. Qu'implique umask 022 pour un nouveau fichier ?
✔ C. Les droits du fichier seront 644
■ 666 (droits max fichier) - 022 (umask) = 644
Q44. Option grep affichant le numéro de ligne des correspondances
✔ D. grep -n 'motif' fichier
■ -n préfixe chaque résultat par son numéro de ligne
Q45. Commandes awk calculant la somme du 2e champ d'un fichier
✔ A. awk '{sum+=$2} END{print sum}' fichier
■ END{} s'exécute après le traitement de toutes les lignes
Q46. Afficher tous les processus avec PID et commande complète
✔ C. ps aux
■ a=tous les utilisateurs, u=format détaillé, x=sans terminal
Q47. Extraire les caractères 5 à 10 de chaque ligne de [Link]
✔ B. awk '{print substr($0,5,10)}' [Link]
■ substr($0, début, longueur) extrait une sous-chaîne
Q48. Afficher les ACL d'un fichier [Link]
✔ C. getfacl [Link]
■ getfacl affiche les ACL, setfacl les modifie
Q49. Que retourne du -sh /home ?
✔ B. La taille totale du répertoire /home dans un format lisible
■ -s = résumé total, -h = format humain (Ko, Mo, Go)
Q50. Syntaxe pour affecter la sortie de date à la variable TODAY
✔ C. TODAY=$(date)
■ $(...) est la substitution de commande moderne
Q51. grep avec ERE pour lignes commençant par un chiffre
✔ A. grep -E '^[0-9]' fichier
■ -E active les expressions régulières étendues, ^ = début de ligne
Q52. Syntaxes correctes de boucle for en Bash
✔ A. for i in $(seq 1 5); do echo $i; done B. for i in {1..5}; do echo $i; done
■ Les deux formes sont équivalentes
Q53. Somme des valeurs du 3e champ supérieur à 100
✔ A. awk '$3 > 100 {sum+=$3} END{print sum}' [Link]
■ Condition avant l'action en awk
Q54. Afficher les variables d'environnement actuelles
✔ B. printenv ou C. env
■ Les deux affichent les variables d'environnement
Q55. Que fait sed -i 's/foo/bar/g' [Link] ?
✔ D. Modifie [Link] en remplaçant TOUTES les occurrences de foo par bar
■ -i modifie le fichier en place, /g remplace toutes les occurrences
Q56. Affirmations correctes sur le sticky bit
✔ D. Sur un répertoire, il empêche les utilisateurs de supprimer les fichiers des autres
■ Utilisé sur /tmp : seul le propriétaire peut supprimer ses fichiers
Q60. Signification des droits rwxr-x--- sur un fichier
✔ B. Propriétaire : rwx ; Groupe : r-x ; Autres : --- (aucun droit)
■ rwx=7, r-x=5, ---=0 soit 750
Q61. Syntaxes for correctes en Bash
✔ A. for i in $(seq 1 5); do echo $i; done B. for i in {1..5}; do echo $i; done
■ Deux syntaxes valides pour itérer de 1 à 5
Q62. Que fait grep -v 'DEBUG' [Link] ?
✔ B. Affiche toutes les lignes ne contenant PAS DEBUG
■ -v inverse la sélection (exclut le motif)
Q63. Différence entre [ ] et [[ ]] en Bash
✔ C. [[ ]] est un mot-clé Bash étendu supportant &&, || et les regex
■ [[ ]] est plus puissant et sûr que [ ]
Q64. Donner le droit d'exécution à tous les scripts dans /opt/scripts
✔ B. chmod -R u+x /opt/scripts
■ -R applique récursivement, u+x ajoute l'exécution pour le propriétaire
Q65. Valeur octale correspondant aux droits rwxr-xr-x
✔ A. 755
■ rwx=7, r-x=5, r-x=5 → 755
Q66. Que fait kill -l ?
✔ A. Affiche la liste de tous les signaux disponibles
■ -l liste tous les signaux (SIGTERM, SIGKILL, etc.)
Q67. Permettre à l'utilisateur bob de lire [Link] via les ACL
✔ B. setfacl -m u:bob:r [Link]
■ setfacl -m modifie les ACL, u:bob:r = lecture pour bob
Q68. Donner les droits 755 au fichier [Link]
✔ B. chmod 755 [Link]
■ 755 = rwxr-xr-x
Q69. Syntaxe Bash pour une opération arithmétique
✔ A. result=$((3 + 4))
■ $((...)) est la syntaxe d'évaluation arithmétique
Q70. Créer un lien symbolique lien pointant vers /etc/hosts
✔ C. ln -s /etc/hosts lien
■ -s crée un lien symbolique (soft link)
Tableau Récapitulatif des Réponses
N° Réponse N° Réponse
Q1 B/C/D (file, cat) Q2 C (redirection >)
Q3 B (diff) Q4 A/C (tableaux)
Q5 D (grep -c) Q6 A (pidof)
Q7 A (export) Q8 C/D (shebang)
Q9 C (set -e) Q10 B (uniq -c)
Q11 C (arrière-plan) Q12 B (grep -i)
Q13 C (here-doc) Q14 A/D (fonction)
Q15 A/B (set -v/-x) Q16 A (wc -l)
Q17 D (-exec) Q18 A/B/D (fg/jobs/bg)
Q19 D (renice) Q20 D (sed s///)
Q21 B (SUID) Q22 C (kill -9)
Q23 B (pstree) Q24 A/C (while read)
Q25 A (tail -n 20) Q26 B ($1)
Q27 A (case) Q28 A (--delete)
Q29 C ($$=PID) Q30 A (awk -F)
Q31 B (substitution) Q32 A (cp -r)
Q33 B (2>&1) Q34 B (trap EXIT)
Q35 C (nohup) Q36 B (sed /^$/d)
Q37 B (mkdir -p) Q40 B (>>)
Q41 B (> vs >>) Q42 D (tail -f)
Q43 C (umask→644) Q44 D (grep -n)
Q45 A (awk sum) Q46 C (ps aux)
Q47 B (awk substr) Q48 C (getfacl)
Q49 B (du -sh) Q50 C ($(...))
Q51 A (grep -E) Q52 A/B (for)
Q53 A (awk $3>100) Q54 B/C (env)
Q55 D (sed -i /g) Q56 D (sticky bit)
Q60 B (rwxr-x---) Q61 A/B (for)
Q62 B (grep -v) Q63 C ([[ ]])
Q64 B (chmod -R) Q65 A (755)
Q66 A (kill -l) Q67 B (setfacl)
Q68 B (chmod 755) Q69 A ($(()))