← formation/shell
💻 Shell

Atelier - Gestion des services en shell Bash

🛠️ Atelier🌶️ Facile⏱ 30mins

Sur les OS GNU/Linux, les services sont des programmes qui tournent en arrière-plan et assurent des fonctions essentielles du système : réseau, horloge, serveur web, etc. Savoir les gérer en ligne de commande est une compétence de base pour tout administrateur système.

1. Prérequis

  • Un ordinateur ou une machine virtuelle tournant sous GNU/Linux (Debian, Ubuntu ou équivalent)
  • Un terminal Bash
  • Les droits sudo pour certaines opérations avancées

DISCLAIMER
Les expérimentations pratiques ont été réalisées sur une machine virtuelle Ubuntu 24.04 LTS, sur un système en français, avec un clavier Français AZERTY.
Cette VM est hébergée sur VirtualBox, tournant sur un système hôte Ubuntu 2404 LTS.
Elles peuvent être reproduites avec une autre configuration (autre version de Linux, autre hyperviseur, autre OS hôte), mais des différences peuvent alors apparaître et tu devras peut-être adapter les actions à effectuer.

2. Qu’est-ce qu’un service ?

Un service (aussi appelé daemon sous Linux) est un programme qui :

  • Démarre automatiquement au lancement du système,
  • Tourne en arrière-plan en permanence,
  • Ne nécessite pas d’intervention de l’utilisateur pour fonctionner.

Exemples de services courants :

  • ssh : permet les connexions à distance sécurisées
  • cron : planifie l’exécution automatique de tâches
  • networking : gère les interfaces réseau

Sous les distributions Linux modernes (Ubuntu, Debian), les services sont gérés par systemd, via la commande systemctl.

3. Affichage des services

Pour la suite, ouvre un terminal Bash.

a. Lister tous les services

La commande ci-dessous affiche l’ensemble des services du système :

systemctl list-units --type=service

Tu obtiens un tableau avec plusieurs colonnes :

  • UNIT : le nom du service
  • LOAD : indique si le service est bien chargé par systemd
  • ACTIVE : état général (active ou inactive)
  • SUB : état détaillé (running, exited, dead)
  • DESCRIPTION : description courte du service

Pour naviguer dans la liste, utilise les flèches du clavier.
Pour quitter, appuie sur q.

b. Afficher uniquement les services actifs

Pour filtrer uniquement les services en cours d’exécution :

systemctl list-units --type=service --state=running

c. Connaître l’état d’un service précis

Pour voir le statut détaillé d’un service en particulier, par exemple ssh.
Si ssh n’est pas installé, fais-le avec sudo apt install openssh-server.

systemctl status ssh

Tu obtiens des informations importantes :

  • Si le service est actif ou arrêté
  • Son PID (identifiant de processus)
  • Les dernières lignes de son journal (logs)

Note : Sur certaines distributions, le service SSH s’appelle sshd au lieu de ssh. Si la commande renvoie une erreur, essaie systemctl status sshd.

4. Démarrage et arrêt d’un service

Pour les manipulations qui suivent, nous allons utiliser le service ssh comme exemple. C’est un service sûr à manipuler en atelier.

a. Arrêter un service

Pour arrêter le service ssh :

sudo systemctl stop ssh

Vérifie ensuite que le service est bien arrêté :

systemctl status ssh

La ligne Active doit maintenant afficher inactive (dead).

b. Démarrer un service

Pour redémarrer le service ssh :

sudo systemctl start ssh

Vérifie de nouveau l’état du service. La ligne Active doit afficher active (running).

Comprends-tu la différence entre stop et start ?

  • stop interrompt immédiatement le service. Les connexions en cours sont coupées.
  • start lance le service. Il sera prêt à accepter de nouvelles connexions.

c. Redémarrer un service

Lorsqu’on modifie la configuration d’un service, il faut le redémarrer pour que les changements soient pris en compte :

sudo systemctl restart ssh

Il existe aussi reload, qui recharge la configuration sans couper le service (quand le service le supporte) :

sudo systemctl reload ssh

5. Activation au démarrage

Un service peut être démarré manuellement, mais il peut aussi être configuré pour se lancer automatiquement à chaque démarrage de la machine.

a. Activer un service au démarrage

sudo systemctl enable ssh

b. Désactiver un service au démarrage

sudo systemctl disable ssh

c. Vérifier si un service est activé

systemctl is-enabled ssh

La commande retourne enabled ou disabled.

Comprends-tu la différence entre un service actif et un service activé ?

  • Un service actif (active) est en cours d’exécution maintenant.
  • Un service activé (enabled) se lancera automatiquement au prochain démarrage.
  • Ces deux états sont indépendants : un service peut être actif sans être activé (et inversement).

Une fois arrivé au bout de cet atelier, tu sais gérer le cycle de vie des services sous Linux avec systemctl.