1 line
33 KiB
JSON
1 line
33 KiB
JSON
[{"uuid":"5ec4184c-4999-4f46-aa9e-62ed77dc1cf0","slug":"www-data-droits","title":"Configurer les droits des fichiers","category":"Informatique","author":"cedric@abonnel.fr","cover":"","published":true,"published_at":"2025-01-19 07:39:56","created_at":"2025-01-19 07:39:56","updated_at":"2025-01-19 07:39:56","tags":[],"plain":"Cette suite de commandes permet de configurer les droits sur le dossier afin de garantir un accès sécurisé tout en permettant à votre utilisateur actif, symbolisé par , d'administrer ce répertoire. Ce dossier est, par défaut sous Debian, utilisé par le service Apache pour héberger les fichiers web. Le groupe est le groupe utilisé par Apache pour exécuter ses services et accéder aux fichiers nécessaires. Étapes de configuration\n-- 1. Ajouter l'utilisateur courant au groupe \nAjoutez votre utilisateur actuel (représenté par ) au groupe , qui est responsable des accès aux ressources du serveur web. Vérifiez l'affectation du groupe avec la commande suivante :\n-- 2. Définir l'utilisateur comme propriétaire du dossier \nAssignez à votre utilisateur actif les droits de propriété sur le dossier et tous ses sous-dossiers/fichiers.\n-- 3. Configurer les permissions d'accès pour l'utilisateur et le groupe \nAutorisez uniquement l'accès à l'utilisateur et au groupe, en désactivant les permissions pour les \"autres\" utilisateurs. Retirez les droits d'exécution inutiles sur les fichiers (uniquement pour l'utilisateur et le groupe) avec cette commande :\n-- 4. Forcer la reprise du groupe pour les nouveaux fichiers et dossiers\nAssurez-vous que tous les nouveaux fichiers et dossiers créés dans héritent automatiquement du groupe .\n-- 5. Bloquer les autorisations pour \"other\" et forcer l'accès en lecture/écriture pour le groupe \nCette étape garantit une sécurité renforcée. Les permissions pour les \"autres\" utilisateurs sont bloquées, et les membres du groupe obtiennent automatiquement des droits en lecture et écriture. Cette commande nécessite le programme ACL (Access Control List). Si ce dernier n’est pas installé, utilisez : Puis appliquez les réglages ACL suivants :\n-- Vérification des configurations\n1. Vérifiez les permissions sur le dossier : 2. Vérifiez les permissions ACL (si configuré) :\n-- Notes supplémentaires\nSécurité des fichiers sensibles : Si des fichiers spécifiques nécessitent des permissions plus restrictives (par exemple, des fichiers de configuration contenant des mots de passe), ajustez leurs permissions individuellement.\nCollaboration multi-utilisateurs : Si plusieurs utilisateurs doivent collaborer, ajoutez-les au groupe et appliquez des permissions cohérentes pour éviter les conflits.\n-- Ce guide couvre les étapes essentielles pour sécuriser et administrer le répertoire tout en permettant une gestion efficace pour les utilisateurs autorisés."},{"uuid":"76ede607-4a6b-434d-b01e-82aa509f3448","slug":"105-installation-du-logiciel-arduino-ide","title":"Installer le logiciel Arduino IDE sous Linux","category":"Électronique","author":"cedric@abonnel.fr","cover":"","published":true,"published_at":"2023-02-19 06:54:59","created_at":"2023-02-19 06:54:59","updated_at":"2023-02-19 06:54:59","tags":[],"plain":"Cet article a été testé avec les distributions suivantes\nLinux Mint 19 64 bits\nLinux Debian 9.6 (stretch) 64 bits\nMX Linux 18.3 basé sur Linux Debian 9\nZorin OS 16.1 basé sur Linux Debian Je privilégie une installation \"manuelle\" de l'application Arduino IDE afin d'utiliser une des dernières versions. Certaines options et paramètres n'apparaissent pas dans les versions packagées des distributions. J'ai eu le cas avec Debian 9.6 où je ne pouvais pas utiliser des cartes ESP 8266. Date de relecture : 15 août 2022 Il faut télécharger la version 1.8.19. Vous pouvez vérifier la dernière version disponible depuis le site <https:www.arduino.cc/en/Main/Software>. Adaptez les informations ci-dessous suivant les informations trouvées sur le site arduino.cc.\nTélécharger Arduino IDE Software\nDepuis mon dossier home ou un autre dossier personnel, je télécharge le programme Arduino IDE. Je préfère l'effectuer depuis une ligne de commande.\nDéployer Arduino IDE Software\nligne 1 : déployer Arduino IDE dans un dossier accessible à tous : . L'archive tar va extraire les fichiers dans un dossier comportant le numéro de version. ligne 3 : si un lien existait, détruit le lien sur avec unlink ligne 4 : réaliser un alias vers le dossier . De cette manière, on s'affranchit du numéro de version. Nous pouvons également déployer de nouvelles versions sans perturber la précédente. ligne 5 : exécuter le script qui permet de créer un raccourci sur le bureau graphique. <code BASH [enablelinenumbers=\"true\", startlinenumbersat=\"1\"]>\nsudo tar -xvf arduino.tar.xz -C /opt\nsudo chown -R root:root /opt/arduino-1.8.19\nsudo unlink /opt/arduino\nsudo ln -s /opt/arduino-1.8.19/ /opt/arduino\nsudo /opt/arduino/install.sh\n</code>\nProblèmes rencontrés après le déploiement\nDroits sur tty et dialout\nIl faut ajouter l'utilisateur de l'application Arduino IDE aux groupes et . L'exemple suivant permet d'ajouter l'utilisateur aux groupes et . Si vous venez de saisir les lignes de commandes , vous devez redémarrer.\nVersion de Java incorrecte\nLe message suivant peut apparaître dans l'application Arduino IDE : Il se peut que la version de Java ne soit pas bonne. Vous pouvez le vérifier avec . Toutefois, un java est intégré avec l'application Arduino IDE. ( me renvoie la version ). Il faudra peut être toutefois changer les paramètres java de l'OS.\nJ'ai testé avec OpenJDK Java 8 avec succès. Par contre Java 10 et 11 ne sont pas compatibles. Pour procéder à l'installation de Java 8 et choisir par défaut cette version :\nSerial port not selected\nDans certains cas, sous Mint, il faut désinstaller \nAucune carte n'est détectée Le câble USB peut être également non cablé pour les données (data) Pour rappel, voici le cablage d'un port USB\nExécuter votre premier programme\nVoici donc notre premier programme (celui qui est décrit dans la vidéo). Cette suite d'instructions va faire clignoter une LED branchée sur la broche 13 de l'Arduino toutes les secondes.\\\\\nIl n'est pas nécessaire de brancher une LED, car rappelez-vous, la LED sur la carte, mentionnée dans la , servira dans notre exemple sans forcément réalisée un montage électronique. Lorsque vous utilisez le logiciel Arduino, il peut être trouvé en cliquant sur . Vous pouvez également copier le code suivant dans votre éditeur : <code C basics-blink.c [enablelinenumbers=\"true\", startlinenumbersat=\"1\"]>\n/\n Clignotement\n Allume la LED pendant 1 seconde,\n puis l'éteint pendant 0,5 seconde.\n/\n \n Numéro de la broche à laquelle est\n connectée la LED\nint led = 13;\n \n le code dans cette fonction est exécuté une fois au début\nvoid setup() {\nindique que la broche de la LED une sortie :\non va modifier sa tension\n pinMode(led, OUTPUT);\n}\n \n le code dans cette fonction est exécuté en boucle\nvoid loop() {\n digitalWrite(led, HIGH); allumer la LED (tension 5V sur la broche)\n delay(1000); attendre 1000ms = 1s\n digitalWrite(led, LOW); éteindre la LED (tension 0V sur la broche)\n delay(1000); * attendre à nouveau 1seconde\n}\n</code> Deux déclaration de fonctions sont obligatoires :\nsetup\nloop Dans ce bout de code, nous appelons trois fonctions :\ndigitalWrite\npinMode\ndelay Pour exécuter ce bout de code, il faudra brancher l'Arduino sur port USB et sélectionner dans le menu , sélectionner ."},{"uuid":"bc697237-ff59-40d7-b252-c0e13499dffc","slug":"100-presentation-et-principe-de-l-arduino","title":"Présentation et principe de l'Arduino","category":"Électronique","author":"cedric@abonnel.fr","cover":"","published":true,"published_at":"2022-01-28 09:51:27","created_at":"2022-01-28 09:51:27","updated_at":"2022-01-28 09:51:27","tags":[],"plain":"Généralités\nUn Arduino représente des cartes électroniques regroupant plusieurs composants électroniques afin de réaliser des objets électroniques interactifs. Il peut être vu comme un ordinateur. On retrouve de la mémoire sous deux types :\nla mémoire morte, qui contiendra les instructions que l'Arduino devra exécuter\nla mémoire vive, contenant les informations qui changent : les variables On aura également un calculateur qui traitera et exécutera les instructions. Tous ces éléments sont contenu dans un micro contrôleur. Il est d'architecture soit AVR soit d'architecture ARM comme le Cortex m3. Les cartes Arduino sont construits autour d'un microcontrôleur Atmel AVR pour les modèles : \nATmega328, \nATmega32u4, \nATmega2560, \nATmega168, \nATmega1280 \nATmega8 D'autres cartes Arduino sont construits autour des microcontroleur Cortex d'architecture ARM. C'est la société STMicroelectronics qui se lance dans l'aventure en mai 2016 avec les modèles STM32 [^note: https:www.st.com/content/stcom/ja/about/media-center/press-item.html/t3829.html] Les schémas des cartes électroniques Arduino sont publiés en licence libre. Le microcontrôleur peut analyser et produire des signaux électriques de format analogique ou de format numérique. On utilisera les entrées sortie de la carte électronique. Pour le programmer, il faut utiliser la prise USB qui permettra de le relier à l'ordinateur. Elle permet également d'alimenter l'Arduino. Plus tard, l'alimentation s’effectuera sur la broche +Vin (7-12 V) et 0V. Une fois programmé, l'Arduino sera relié par un prise secteur ou une batterie via le port d'alimentation. Les broches sont des entrées/sorties qui permettent de relier des capteurs, des LED, des moteurs ou des cartes d'extension. Cela permet le contrôle des appareils domestiques - éclairage, chauffage…, le pilotage d'un robot, de l'informatique embarquée, etc. Les cartes Arduino et les schémas de ces cartes sont publiés en licence libre.\nPrincipe général\nLes différentes versions des Arduino fonctionnent sous le même principe général : Les broches de 1 à 13, ce sont les broches dites numériques (0 ou 1) ou « tout ou rien » ; elles offrent en sortie du 5 V et acceptent en entrée du 5 V sur le même principe.\nDans le code, on utilise les fonctions et . Les broches de 14 à 19, ce sont les broches dites analogiques, valeur entre 0 V et 5 V.\nDans le code, on utilise les fonctions et Enfin, on y trouve également les différentes broches d'alimentation :\nRouge : sortie 5 V (+5V)\nOrange : sortie 3,3 V (+3V3)\nBleue : les masses (0V)\nSaumon : entrée reliée à l'alimentation de +Vin (7-12V) Il y a des variations entre les différentes cartes (par exemple : UNO, la patte 13 est équipée d'une résistance). Les tensions admises des entrées/sorties sont strictement comprise entre 0 V et 5 V. Pas de tension négative ! Il existe plein de variantes de cartes Arduino :\nArduino Nano\nArduino NanoPro\nArduino NanoPro mini\nArduino NanoMega\nArduino NanoDiecimila\nArduino NanoDuemilanove\nArduino NanoLeonardo\nArduino NanoDue\nArduino NanoFio\nPrésentation de l'Arduino Uno\nL'Arduino Uno est basé sur un microcontrôleur ATMEL 1502 de 32 registres, cadencé à 166 MHz (un cycle de 6ns). Crédit image : Mines Telecom - Programmer un objet avec Arduino, cours 04017 L'Arduino Uno propose :\n14 entrées numériques\n6 entrées analogiques\n1 sortie 5 V à 500 mA\n1 sortie 3,3 V à 50 mA\n1 ports série Rx/Tx avec Led indépendantes\n1 port USB, qui sert également d'alimentation et de connexion série\n1 alimentation complémentaire (Vin 7 à 12 V) On notera la présence d'une LED connectée sur la broche 13. Les broches Rx et Tx de l'Arduino permettent d'effectuer une communication série. On veillera à ne pas utiliser ces broches pour brancher des LED ou d'autres composants.\nUtiliser une plaque de prototypage\nPour tester ses branchements directement sur l'Arduino sans soudure, il faut utiliser une platine d'essai (ou breadboard, plaque d’essai, plaque de montage rapide). La platine d'essai est composée d'une multitude de trous. La plupart d'entre eux sont reliés. Voici une représentation : En position portrait (comme sur la photo), la plaque est divisée à la verticale en 2 parties égales. Les 5 trous d'une ligne, d'une partie sont interconnectés. C'est-à-dire qu'il y a une liaison électrique pour les trous a, b, c, d, et e de la ligne 1, indépendante des lignes voisines et de l'autre partie de la plaque. Sur notre plaque d'essai, nous avons 30 x 2 lignes de connexion. L'espace entre les deux parties et standardisé afin de positionner la plupart des circuits intégrés et de pouvoir leurs câbler toutes les broches. Enfin, tous les trous de la colonne d'une partie de la plaque sont interconnectés entre eux. Ceci représente une ligne d'alimentation et il faudra l'utiliser tel quel. Il en va de même pour la colonne et l'autre partie de la plaque. Sur la partie gauche de la photo:\n(trait rouge) à gauche, tous les trous de la colonne + sont reliés entre eux\n(trait bleu) tous les trous de la colonne -, sont reliés entre eux\n(trait jaune) tous les trous de la ligne 1 sont reliés entre eux, sur 5 colonnes (a, b, c, d et e). On peut reproduire ce schéma sur les 29 autres lignes.\nla partie de droite, reproduit le même schéma par effet mirroir, avec un axe de symétrie vertical coupant la plaque en deux moitié égale. Par convention, je branche l'alimentation 5 V sur la colonne + et la masse (0 V) sur la colonne -.\nLogiciel de programmation d'un Arduino\nPour programmer un Arduino ou une carte programmable, il faut un éditeur qui fonctionne sur un ordinateur et un programme qui permettra de téléverser le code vers la carte. Le programme libre de droit Arduino Software (IDE) permet d'écrire du code et de le téléverser dans la carte. C'est l'outil privilégié si vous avez acheté du matériel. Il fonctionne sous Windows, Mac OS X, et Linux. Le guide d'installation du logiciel IDE Arduino sous Linux permet de mieux appréhender une installation de la dernière version en date. Il existe également un simulateur appelé Tinkercad circuits qui permet de tester votre code et les montages électroniques virtuellement.\nPrincipe de programmation Arduino\nLe langage Arduino est basé sur les langages C et C++. Les programmes Arduino sont intégrés dans un schéma (scketch) setup / loop. Il s'agit de deux blocs de fonctions obligatoirement présents dans tous programmes Arduino. Un bloc commence par le symbole et se termine par le symbole . Le nom d'une fonction est toujours suivie par les symboles . La fonction setup() est appelée systématiquement au démarrage de l'Arduino, une seule fois, après un reset ou une mise sous tension. Il est utilisé pour initialiser des variables, démarrer des librairies, modifier le paramétrage des broches, etc... Après avoir utilisé la fonction setup(), la fonction loop() exécute de manière infinie le code à l’intérieur de ce bloc afin de répondre aux interactions demandées. Afin de rendre plus intelligible le code écrit, il est possible d'écrire du texte qui ne sera pas interpréter comme du code. Une ligne de commentaire commencera par les symboles alors qu'un bloc de commentaires sera encadré par les symboles et . Par exemple : On peut utiliser d'autres fonctions qui permettent d’exécuter une ou plusieurs actions. Les fonctions sont définies avec :\nun nom représentant l'utilité du bloc.\nune ou plusieurs entrées. Il s'agit de paramètres ou arguments placés entre parenthèses.\nune sortie qui est le résultat de la fonction. Par exemple, prenons le code suivant . Dans ce cas, la fonction est pinMode qui contient deux variables : buttonPin et INPUT.\nRéférentiel des fonctions, variables et structures du Langage Arduino\nhttps://www.arduino.cc/reference/en/"},{"uuid":"0bba1ad7-e4cb-49a6-9467-fcfac2e09a93","slug":"deuxiemes-pas-devops-durcir-et-fiabiliser-un-serveur-debian","title":"Deuxièmes pas DevOps : durcir et fiabiliser un serveur Debian","category":"informatique","author":"cedric@abonnel.fr","cover":"cover.jpg","published":true,"published_at":"2026-06-08 07:00","created_at":"2026-05-12 23:01:34","updated_at":"2026-05-13 22:53:46","tags":{"logiciels":["Fail2ban","Debian"]},"plain":"Une fois le système de base configuré (dépôts, mises à jour, , identification — sujets traités dans l'article précédent), la machine est fonctionnelle mais encore vulnérable et un peu fragile pour un usage sérieux. Ce deuxième article s'attaque aux gestes qui transforment un serveur « qui marche » en un serveur sur lequel on peut raisonnablement faire tourner quelque chose : sécuriser l'accès SSH, mettre en place un pare-feu, automatiser les correctifs de sécurité et soigner quelques détails opérationnels.\r\n\r\nSécuriser l'accès SSH\r\n\r\nSSH est la porte d'entrée principale d'un serveur Linux. C'est aussi, statistiquement, la cible la plus attaquée : n'importe quelle IP publique reçoit en permanence des tentatives de connexion automatisées. Deux gestes simples changent radicalement la donne.\r\n\r\nPasser à l'authentification par clé\r\n\r\nLes mots de passe, même longs, restent vulnérables aux attaques par force brute et au phishing. Une paire de clés cryptographiques est à la fois plus sûre et plus pratique au quotidien.\r\n\r\nCôté poste de travail, on génère une paire de clés modernes :\r\n\r\n\r\n\r\nL'algorithme est aujourd'hui le choix par défaut recommandé : clés courtes, signatures rapides, sécurité solide. Le commentaire () facilite l'identification de la clé quand on en gère plusieurs.\r\n\r\nOn copie ensuite la clé publique sur le serveur :\r\n\r\n\r\n\r\nCette commande dépose la clé publique dans côté serveur avec les bonnes permissions. À partir de là, la connexion se fait sans saisir de mot de passe — il faut tester depuis une nouvelle session avant de passer à l'étape suivante, sous peine de risquer de se retrouver enfermé dehors.\r\n\r\nDésactiver la connexion root et les mots de passe\r\n\r\nUne fois la connexion par clé validée, on durcit la configuration SSH. Le fichier à modifier est :\r\n\r\n\r\n\r\nLes directives importantes à positionner (ou décommenter) sont :\r\n\r\n\r\n\r\nLa première interdit toute connexion directe en via SSH : on devra obligatoirement se connecter avec un utilisateur normal puis élever ses droits via . La deuxième supprime complètement l'authentification par mot de passe, ne laissant plus que les clés. La troisième confirme explicitement que l'authentification par clé est active.\r\n\r\nOn recharge ensuite le service pour appliquer les changements :\r\n\r\n\r\n\r\nImportant : garder la session SSH actuelle ouverte et tester la nouvelle configuration depuis un autre terminal avant de fermer la première. En cas de problème, on peut encore corriger le tir.\r\n\r\nPour aller un cran plus loin, changer le port SSH par défaut (22) vers un port moins évident réduit considérablement le bruit dans les logs. Ce n'est pas de la sécurité au sens strict (un scan le retrouvera), mais c'est un filtre efficace contre les attaques automatisées.\r\n\r\nMettre en place un pare-feu\r\n\r\nPar défaut, Debian n'a aucun pare-feu actif. Tout port ouvert par un service installé sera donc directement exposé. Deux outils standards existent : (le successeur officiel d', bas niveau et puissant) et (une surcouche pensée pour la simplicité). Pour démarrer, est le bon compromis.\r\n\r\n\r\n\r\nLa logique consiste à tout bloquer en entrée par défaut, puis à n'ouvrir explicitement que ce qui doit l'être :\r\n\r\n\r\n\r\nSi SSH écoute sur un port non standard, remplacer par (ou le port choisi). Oublier cette étape avant un est un grand classique du verrouillage involontaire.\r\n\r\nPour les services web, on ouvrira typiquement les ports 80 et 443 :\r\n\r\n\r\n\r\nL'état du pare-feu se vérifie avec :\r\n\r\n\r\n\r\nSur une architecture où la machine est derrière un reverse proxy (cas fréquent quand on expose plusieurs services sur un même domaine), seuls les ports utiles côté proxy doivent être ouverts au monde extérieur. Les services applicatifs eux-mêmes restent accessibles uniquement depuis le réseau interne.\r\n\r\nAutomatiser les correctifs de sécurité\r\n\r\nLes failles de sécurité ne préviennent pas, et personne n'a envie de lancer manuellement chaque matin sur dix machines. Le paquet applique automatiquement les mises à jour du dépôt .\r\n\r\n\r\n\r\nLa configuration se trouve ensuite dans . Par défaut, seuls les correctifs de sécurité sont appliqués automatiquement, ce qui est généralement le bon compromis : on profite des patches critiques sans risquer qu'une mise à jour fonctionnelle introduise une régression sur un service en production.\r\n\r\nQuelques options qui méritent l'attention dans ce fichier :\r\n: à régler sur si l'on accepte les redémarrages automatiques après une mise à jour de noyau, ou si l'on préfère les piloter à la main. La directive permet alors de choisir l'horaire.\r\n: pour recevoir un rapport par mail des mises à jour appliquées, à condition d'avoir un MTA configuré sur la machine.\r\n\r\nLe bon réflexe consiste à vérifier de temps en temps les logs dans pour s'assurer que tout se déroule sans heurts.\r\n\r\nSoigner les détails opérationnels\r\n\r\nQuelques outils complémentaires améliorent significativement le confort et la résilience d'un serveur.\r\n\r\nFail2ban surveille les logs d'authentification et bannit temporairement les IP qui tentent trop de connexions échouées. Même avec SSH par clé uniquement, le service réduit considérablement le bruit dans les journaux :\r\n\r\n\r\n\r\nLa configuration par défaut surveille déjà SSH ; elle peut être étendue à d'autres services (nginx, Postfix, etc.) via des fichiers dans .\r\n\r\nLogwatch ou journalctl méritent qu'on s'y attarde. Sur une Debian récente, est l'outil central pour consulter les logs systemd :\r\n\r\n\r\n\r\nPrendre l'habitude de jeter un œil aux logs régulièrement — ou de mettre en place une remontée centralisée si l'on gère plusieurs machines — change beaucoup de choses en exploitation.\r\n\r\nUn swap raisonnable, sur une VM ou un serveur dédié, évite que la machine ne devienne complètement injoignable en cas de pic de consommation mémoire. Sur un conteneur LXC en revanche, c'est généralement géré au niveau de l'hyperviseur.\r\n\r\nEt après ?\r\n\r\nAvec ces réglages, le serveur est dans un état correct pour accueillir des services réels : la surface d'attaque est réduite, les correctifs s'appliquent tout seuls, et les logs racontent ce qui se passe. La suite logique est l'installation de la pile applicative proprement dite (serveur web, base de données, runtime) et la mise en place d'un reverse proxy pour exposer plusieurs services derrière un même point d'entrée.\r\n\r\nComme évoqué dans le premier article, le moment où l'on commence à enchaîner ces étapes sur plusieurs machines est exactement celui où il faut basculer vers de l'automatisation : un script shell bien rangé pour commencer, puis Ansible ou un équivalent quand le parc grossit. Une bonne pratique consiste à versionner ces scripts dans un dépôt Git dédié à l'infrastructure, au même titre que le code applicatif."},{"uuid":"11186836-bbac-4054-82db-a3bfed14a274","slug":"imagemagick-traiter-des-images-en-ligne-de-commande","title":"ImageMagick : traiter des images en ligne de commande","category":"linux","author":"cedric@abonnel.fr","cover":"cover.png","published":true,"published_at":"2025-12-28 14:56","created_at":"2025-12-28 14:56:14","updated_at":"2026-05-12 00:36:01","tags":[],"plain":"1. À quoi ça sert\r\n\r\nImageMagick, c'est l'outil qu'on sort quand on veut manipuler des images sans ouvrir un logiciel graphique. Pas de Photoshop, pas de GIMP, pas de clic-droit \"Redimensionner\" sur cent fichiers à la suite : juste une commande dans un terminal, et le travail est fait.\r\n\r\nC'est une suite d'outils qui sait lire, écrire et transformer plus de 200 formats — du JPEG classique au PDF en passant par le HEIC des iPhones, le WebP de Google ou le bon vieux TIFF des scanners. L'absence d'interface graphique est ici une fonctionnalité, pas un défaut : elle permet de l'utiliser partout où il n'y a pas d'écran, et surtout dans tout ce qui doit tourner tout seul.\r\n\r\nOn le retrouve donc naturellement :\r\nsur des serveurs web qui génèrent des miniatures à la volée,\r\ndans des scripts qui traitent des dossiers entiers d'un coup,\r\ndans des pipelines CI/CD pour préparer des assets,\r\ndans des conteneurs Docker, accessibles uniquement en SSH.\r\n\r\nDepuis la version 7, tout passe par une commande unique : . Les anciennes commandes (, , ...) existent toujours pour la compatibilité, mais elles ne sont plus la norme.\r\n\r\n2. Installation\r\n\r\nSur Debian ou Ubuntu :\r\n\r\n\r\n\r\nOn vérifie ensuite que tout est en place :\r\n\r\n\r\n\r\nLa sortie indique aussi les délégués compilés (libwebp, libheif, libraw, etc.). Si un format précis vous intéresse, c'est ici qu'il faut regarder : ImageMagick ne sait lire un format que si la bibliothèque correspondante est présente au moment de la compilation.\r\n\r\n3. Comment ImageMagick raisonne\r\n\r\nToutes les commandes suivent la même logique :\r\n\r\n\r\n\r\nL'image est chargée en mémoire, puis chaque option s'applique dans l'ordre où elle est écrite, comme une chaîne de traitement. Ce point est important : déplacer une option dans la ligne peut changer le résultat final.\r\n\r\nExemple :\r\n\r\n\r\n\r\nIci, l'image est lue, redimensionnée à 800×600, puis compressée à 85% de qualité, puis écrite sur le disque. Si on inversait et , le résultat serait identique dans ce cas précis, mais avec des opérations qui modifient les pixels (flou, conversion d'espace colorimétrique, recadrage), l'ordre devient critique.\r\n\r\n4. Convertir d'un format à un autre\r\n\r\nLe cas le plus simple : changer l'extension du fichier de sortie suffit.\r\n\r\n\r\n\r\nImageMagick détecte le format cible à partir de l'extension et fait la conversion. C'est aussi simple que ça pour 90% des cas.\r\n\r\nQuand on veut être plus précis — par exemple forcer une profondeur de couleur particulière — on l'indique explicitement :\r\n\r\n\r\n\r\nUtile quand on récupère des images en 16 bits par canal qu'on veut ramener à du 8 bits standard, soit pour gagner de la place, soit pour garantir la compatibilité avec un logiciel récalcitrant.\r\n\r\n5. Redimensionner\r\n\r\nLa méthode brutale\r\n\r\n\r\n\r\nCette commande redimensionne à 800×600 en respectant les proportions par défaut, contrairement à ce qu'on pourrait croire. Si l'image source est en 4:3, elle rentrera pile dedans ; si elle est en 16:9, ImageMagick choisira la dimension la plus contraignante et l'autre sera plus petite que demandé.\r\n\r\nPour forcer exactement ces dimensions quitte à déformer l'image, il faut ajouter un point d'exclamation :\r\n\r\n\r\n\r\nNe rétrécir que les grandes images\r\n\r\nC'est probablement le cas le plus utile au quotidien : on a un dossier d'images, on veut s'assurer qu'aucune ne dépasse 1600 pixels, mais on ne veut pas agrandir les petites (ce qui dégraderait leur qualité).\r\n\r\n\r\n\r\nLe signifie « uniquement si l'image est plus grande ». Les guillemets sont nécessaires car est interprété par le shell comme une redirection. On peut aussi échapper le caractère avec .\r\n\r\nEn pourcentage\r\n\r\n\r\n\r\nPratique quand on veut diviser la taille par deux sans calculer les dimensions exactes.\r\n\r\n6. Qualité et poids du fichier\r\n\r\nPour les JPEG, le paramètre règle le compromis entre fidélité visuelle et poids du fichier :\r\n\r\n\r\n\r\nQuelques repères en pratique :\r\n100 : qualité maximale, fichier énorme, différence imperceptible avec 95.\r\n85 : la valeur par défaut de la plupart des appareils photo, et un excellent compromis pour le web.\r\n75 : encore très acceptable, gain de place notable.\r\nEn dessous de 70 : les artefacts deviennent visibles, surtout sur les aplats de couleur.\r\n\r\nSupprimer les métadonnées\r\n\r\nLes fichiers issus d'appareils photo ou de smartphones embarquent beaucoup d'informations : modèle de l'appareil, date, parfois coordonnées GPS, miniature intégrée, profil colorimétrique... Tout ça peut peser plusieurs dizaines de kilo-octets, et surtout poser des problèmes de confidentialité.\r\n\r\n\r\n\r\nL'option fait le ménage. À utiliser systématiquement avant de publier des photos sur le web, et indispensable dès qu'on parle de RGPD ou d'anonymisation. Attention en revanche pour la photographie professionnelle où certaines métadonnées (droits d'auteur, profil ICC) peuvent être nécessaires.\r\n\r\n7. Recadrer et adapter à un cadre\r\n\r\nRecadrage classique\r\n\r\n\r\n\r\nLa syntaxe se lit comme une fenêtre qu'on découpe dans l'image : largeur × hauteur, décalée de 100 pixels depuis la gauche et 50 pixels depuis le haut.\r\n\r\nRemplir un cadre exact, sans déformation\r\n\r\nC'est le besoin typique des miniatures de site : on veut toutes les vignettes en 800×600 pile, peu importe le format des photos d'origine.\r\n\r\n\r\n\r\nTrois étapes enchaînées :\r\n\r\n1. redimensionne pour que l'image remplisse le cadre (le inverse la logique habituelle : on prend la plus grande dimension comme contrainte, pas la plus petite).\r\n2. indique qu'on veut centrer le découpage.\r\n3. coupe ce qui dépasse pour obtenir exactement la taille voulue.\r\n\r\nLe résultat : aucune déformation, aucune bande noire, juste un éventuel rognage sur les bords les plus longs.\r\n\r\n8. Traiter un dossier entier\r\n\r\nUne boucle Bash suffit pour convertir tous les PNG d'un dossier en JPEG :\r\n\r\n\r\n\r\nLa syntaxe retire l'extension du nom, on y ajoute . Simple et fiable.\r\n\r\nPour modifier les fichiers sur place, ImageMagick fournit :\r\n\r\n\r\n\r\nCette commande écrase chaque fichier par sa version redimensionnée. C'est rapide et pratique, mais ça veut aussi dire qu'il n'y a pas de retour en arrière : si la commande est mal écrite, le dossier original est perdu. Règle absolue : travailler sur une copie, ou s'assurer d'avoir une sauvegarde.\r\n\r\n9. Texte et filigranes\r\n\r\nApposer une mention textuelle\r\n\r\n\r\n\r\n ancre le texte dans un coin de l'image (les neuf positions classiques : , , , , ...), et ajoute un décalage par rapport à ce point d'ancrage. Ici, éloigne le texte de 10 pixels du coin inférieur droit.\r\n\r\nSuperposer un logo ou un watermark image\r\n\r\n\r\n\r\nL'image principale est lue en premier, le filigrane en second, puis les fusionne. Si le watermark a un canal alpha (transparence), il est respecté.\r\n\r\n10. Couleurs et tons\r\n\r\nPassage en noir et blanc :\r\n\r\n\r\n\r\nRéglage de la luminosité et du contraste (valeurs en pourcentage, positives ou négatives) :\r\n\r\n\r\n\r\nIci, +10% de luminosité et +5% de contraste. Pour assombrir, on utilise des valeurs négatives : .\r\n\r\n11. Inspecter une image\r\n\r\nPour obtenir les informations essentielles — format, dimensions, profondeur :\r\n\r\n\r\n\r\nPour tout savoir, y compris les métadonnées EXIF, le profil colorimétrique, l'histogramme :\r\n\r\n\r\n\r\nLa sortie verbeuse peut faire plusieurs pages, mais c'est inestimable pour diagnostiquer un problème ou comprendre d'où vient un fichier.\r\n\r\n12. Formats modernes\r\n\r\nLe WebP de Google offre une compression nettement meilleure que le JPEG à qualité équivalente, et il est aujourd'hui supporté par tous les navigateurs courants :\r\n\r\n\r\n\r\nL'AVIF va encore plus loin en termes de compression, au prix d'un encodage plus lent :\r\n\r\n\r\n\r\nSi la commande échoue avec une erreur de délégué, c'est que votre installation d'ImageMagick a été compilée sans le support AVIF — il faudra installer ou recompiler.\r\n\r\n13. Quelques règles à se fixer\r\nToujours travailler sur une copie quand on découvre une nouvelle commande. en particulier ne pardonne pas.\r\nStripper les métadonnées avant toute publication web.\r\nPour de très gros volumes (plusieurs milliers d'images, ou des images très lourdes), regarder du côté de : c'est plus rapide et beaucoup moins gourmand en mémoire qu'ImageMagick. Pour tout le reste, ImageMagick est largement suffisant.\r\nAutomatiser dès qu'on répète : si la même commande revient deux fois, elle mérite un script.\r\nLire les messages d'erreur : ImageMagick est verbeux, et la plupart des problèmes (délégué manquant, permissions, format non reconnu) sont explicitement nommés dans la sortie.\r\n\r\n14. Là où on le croise vraiment\r\n\r\nEn pratique, ImageMagick finit presque toujours dans les mêmes situations :\r\npréparation d'images pour un site web (redimensionnement + compression + strip),\r\ngénération de miniatures à la volée côté serveur,\r\nnormalisation d'un catalogue photo hétérogène (formats, tailles, profils),\r\nconversion massive d'archives anciennes vers des formats modernes,\r\nnettoyage des métadonnées avant diffusion publique.\r\n--\r\n\r\nImageMagick fait partie de ces outils qu'on apprivoise lentement mais qu'on garde longtemps. Au début, on copie des commandes trouvées en ligne sans tout comprendre. Puis on commence à reconnaître les options, à les combiner, à écrire ses propres scripts. Et un jour, on se rend compte qu'on a remplacé un logiciel entier par trois lignes de Bash — et qu'on n'a jamais été aussi efficace pour traiter des images."}] |