Linux, Shell, Conteneurs, WSL - quésako ?
En guise d’introduction
Dans ce chapitre, nous allons nous concentrer sur ce qui compose mainstream des environnements de travail des développeurs actuels. Votre contexte professionnel sera sans doute différent, mais les éléments suivants font partie intégrante de la culture commune des développeurs actuels en termes de système d’exploitation.
Vous trouverez une liste d’instructions Linux de base, accompagnée de petits exemples syntaxiques au chapitre Aide-mémoire, à la fin de l’ouvrage.
Nous allons donc nous concentrer sur Linux et « ses amis », d’autant que macOS et Windows (via WSL ou Docker) s’avèrent souvent utilisés comme postes de travail pour développer des applications sur Linux !
L’élégance de Linux réside dans sa versatilité, que ce soit sur des ordinateurs de bureau ou pour alimenter des serveurs ou des systèmes embarqués. Il excelle en termes de stabilité et de sécurité, ce qui en fait le choix préféré pour les environnements critiques.
L’interface en ligne de commande (CLI/shell) de Linux est de plus en plus populaire. Ses systèmes de gestion de paquets/logiciels, tels que apt, snap, yum et pacman, simplifient l’installation et la mise à jour des logiciels dans de bonnes conditions...
Survivre avec Linux - Le minimum à savoir
1. Points de repère
La commande la plus utilisée de Linux, ls, permet de lister les fichiers et les répertoires non cachés.
ls
bin boot dev etc home lib lib32 lib64 libx32 media
mnt opt proc root run sbin srv sys tmp usr var
Ce dont nous retiendrons au quotidien les éléments suivants.
Dossier |
Contenu |
bin |
Binaires (exécutables) des programmes système et commandes utilisateur. |
boot |
Démarrage du système, chargeur d’amorçage (bootloader), configuration du noyau. |
etc |
Configuration du système et des applications. |
home |
Répertoire personnel de l’utilisateur actuel ! |
lib x |
Bibliothèques partagées. |
opt |
Packages logiciels optionnels installés par l’utilisateur ou par des applications tierces. |
root |
Répertoire personnel de l’utilisateur root (super-utilisateur). |
tmp |
Répertoire temporaire où les applications peuvent stocker des fichiers temporaires. Les fichiers dans ce répertoire sont généralement supprimés lors du redémarrage du système. |
usr |
Fichiers et programmes utilisés par les utilisateurs, tels que les applications installées, les bibliothèques… |
var |
Données variables, telles que les fichiers journaux (logs), les fichiers de base de données, les fichiers de cache, etc. |
En utilisant la commande cd (change directory), nous allons nous placer dans notre propre espace home, qui n’est pas celui de nos camarades.
cd home/
Le / n’est ici pas obligatoire, mais permet d’attirer votre attention sur la structure des chemins d’accès en Linux.
Dans notre espace, nous allons maintenant créer un dossier, puis le supprimer.
mkdir provisoire/
ls
Ce qui donne :
provisoire
Détruisons ce répertoire :
rmdir provisoire/
ls
Il n’y a plus rien dans notre home !
Voici d’autres commandes du quotidien :
-
À partir d’un dossier, cd .. vous permet remonter d’un niveau dans sa hiérarchie.
-
L’instruction cd ~ vous permet d’atteindre...
Daemons (divinités ou démons) et cron
Sans doute vous êtes-vous déjà interrogé sur la façon dont votre système « attend » les diverses sollicitations avant de les traiter ou comment faire pour qu’il effectue des tâches sans votre intervention ?
C’est l’objet du daemon !
Un daemon est un processus ou un service en arrière-plan qui s’exécute en continu sur un système informatique, généralement sans aucune interaction directe avec l’utilisateur (« il tourne en arrière-plan »).
Voici quelques caractéristiques de daemons.
-
Processus en arrière-plan : généralement lancés automatiquement lorsque le système informatique démarre et continuent de s’exécuter jusqu’à ce que le système soit éteint (sauf si vous créez votre propre daemon…).
-
Fonctions variées : gestion de périphériques matériels (par exemple, le daemon d’impression), gestion de services réseau (par exemple, le daemon de serveur web), surveillance d’événements système (par exemple, le daemon de journalisation système)…
-
Planification : certains daemons sont responsables de la planification des tâches et de leur exécution à...
Suggestions pour une utilisation plus professionnelle de Linux
Vous trouverez ici quelques pratiques ou outils que les auteurs se plaisent à utiliser. Elles supposent parfois d’avoir installé différents packages, dont certains sont disponibles dans le conteneur Kali que nous évoquons dans ce chapitre.
1. Apprendre le shell bash
Un shell Linux est un programme qui permet à l’utilisateur d’interagir avec le système d’exploitation Linux en utilisant des commandes textuelles. bash est le shell le plus diffusé.
Vous trouverez une liste d’instructions bash accompagnée de petits exemples syntaxiques au chapitre Aide-mémoire, à la fin de l’ouvrage.
Le shell bash est très documenté, pourtant vous trouverez sans doute utile de disposer d’un petit outil de débogage comme : https://www.shellcheck.net/.
Voici le code d’un script bash qui compte les fichiers cachés dans un répertoire.
#!/bin/bash
# Demander le nom d'un dossier
read -p "Entrez le nom d'un dossier : " dossier
# Fonction récursive pour compter les fichiers cachés
# dans un dossier et ses sous-dossiers
compter_fichiers_caches() {
dossier_actuel="$1"
compteur=0
# Parcourir tous les fichiers dans le dossier actuel
for fichier in "$dossier_actuel"/*; do
if [[ "$fichier" == .* ]]; then
# Vérifier si le fichier est caché
if [[ -f "$fichier" ]]; then
compteur=$((compteur + 1))
fi
fi
# Vérifier si le fichier est un dossier
if [[ -d "$fichier" ]]; then
#...
Conteneurs et Docker
1. Docker, VM, services, en bref
a. Démarrer avec Docker
Docker est une technologie de conteneurisation. La conteneurisation vise à virtualiser les processus. Ainsi, un processus conteneurisé s’exécute dans un environnement optimisé à ses fins, mais en utilisant les ressources système de l’ordinateur hôte.
Il existe d’autres technologies de conteneurisation plus difficiles à appréhender comme LXC (LXC fournit des conteneurs de système de niveau inférieur, très performants, tandis que Docker met l’accent sur les conteneurs d’applications avec une interface conviviale et un écosystème d’outils particulièrement riche).
Docker est disponible sous Windows, Linux, macOS, etc. On peut utiliser Docker dans un conteneur Docker ou dans une machine virtuelle sans faire s’écrouler les performances de l’ensemble, ce qui permet de travailler avec Docker sur des configurations positionnées sur le cloud.
Au sein d’un conteneur, vous pouvez loger de « gros » services, comme un serveur http Apache, ou de « petits » services, comme des microservices souvent portés par des API (Application Programming Interface) permettant à différentes applications logicielles de communiquer et d’interagir entre elles. Les API définissent les méthodes et les formats de données que les applications peuvent utiliser pour demander et échanger des informations.
Un conteneur Docker cherche à n’utiliser qu’un minimum de ressources logicielles, à savoir tout ce qui lui permet de fournir le service. Plus les technologies de conteneurisation évoluent, plus elles « se branchent » au plus près du hardware pour ne pas être ralenties par les caractéristiques de l’hôte qui les abrite.
Docker n’est donc pas une technologie de machine virtuelle (VM). En effet, avec une technologie de machine virtuelle comme VirtualBox, VMWare ou WSL, un seul ordinateur, l’hôte, peut exécuter plusieurs instances de VM (Virtual Machine), les invités. Chaque invité utilise un grand fichier sur le disque pour définir son système d’exploitation et de fichiers isolé et s’exécute...