<style> .slides { font-size: 3rem; background: url('https://images.unsplash.com/photo-1629654297299-c8506221ca97?q=80&w=2274&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D') center/cover no-repeat; } .slides > section { position: absolute; inset: 0; background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(255, 255, 255, 0.2); color: white; display: grid; place-content: center; box-sizing: border-box; } .slides > section:first-of-type { font-size: 6rem; } .slides h1, .slides h2, .slides h3, .slides h4, .slides h5, .slides h6, h1, h2, h3, h4, h5, h6 { color: #e74c3c; } .slides strong, .slides em { color: #ff9676; } .slides pre code { width: auto; max-height: initial; } .slides code { color: #ffbd96; font-style: italic; } .slides p { padding: 0 2.4rem; } .slides .alert { width: 90%; margin: auto; } .slides ul, .slides ol { width: calc(100% - 4rem); } html, body, .ui-content { color: #ecf0f1; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ecf0f1; border-bottom-color: #ffffff4d; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown { background-color: #2c3e50; } .ui-toc-label.btn { background-color: #192b38; color: #fff; } .ui-toc-dropdown .nav>.active>a, .ui-toc-dropdown .nav>li>a:hover, .ui-toc-dropdown .nav>li>a:focus { color: #fff; border-left: 2px solid #fff; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: #fff; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #4b5f70; } .markdown-body table tr:nth-child(2n) { background-color: #3e4f5f; } .markdown-body code, .markdown-body tt { color: #f0f0f0; background-color: rgba(230, 230, 230, 0.3); } a, .open-files-container li.selected a { color: #3498db; } </style> # Linux (VM / WSL) --- # Introduction à Linux --- ## Histoire de Linux Linux a été créé en **1991** par **Linus Torvalds**, alors étudiant à l'université d'Helsinki en Finlande. Linus a développé Linux comme un projet personnel pour explorer les fonctionnalités des processeurs **80386**. Initialement, Linux était un noyau (kernel) destiné à fonctionner sur les ordinateurs personnels, mais il a rapidement évolué pour devenir un système d'exploitation complet. - **1991** : Première version publique de Linux (version 0.01). - **1992** : Linux est placé sous licence **GPL** (General Public License), ce qui en fait un logiciel libre et open-source. - **Aujourd'hui** : Linux est utilisé partout, des serveurs aux smartphones (via Android), en passant par les supercalculateurs et les systèmes embarqués. --- ![Linus Torvalds](https://upload.wikimedia.org/wikipedia/commons/thumb/0/01/LinuxCon_Europe_Linus_Torvalds_03_%28cropped%29.jpg/240px-LinuxCon_Europe_Linus_Torvalds_03_%28cropped%29.jpg) *Linus Torvalds, créateur de Linux* --- ## Avantages de Linux Linux est largement utilisé pour plusieurs raisons : ### 1. **Open-source** - Le code source de Linux est librement accessible, ce qui permet à quiconque de le modifier, de l'améliorer et de le redistribuer. - Exemple : Les entreprises comme Red Hat et Canonical (Ubuntu) ont construit des business models autour de Linux. ### 2. **Sécurité** - Linux est réputé pour sa robustesse face aux virus et aux attaques. - Les permissions strictes et la séparation des privilèges rendent difficile l'exécution de code malveillant. --- ### 3. **Stabilité** - Les systèmes Linux sont connus pour leur fiabilité, même après des mois d'utilisation sans redémarrage. - Exemple : De nombreux serveurs web fonctionnent sous Linux sans interruption pendant des années. ### 4. **Flexibilité** - Linux est hautement personnalisable et peut être adapté à presque tous les besoins. - Exemple : Vous pouvez choisir parmi des dizaines de distributions, chacune optimisée pour un usage spécifique (bureau, serveur, développement, etc.). --- Très bien ! Je vais remplacer CentOS par d'autres distributions sans faire de comparaison directe, et j'ajouterai des images pour rendre le contenu plus visuel et engageant. Voici la version révisée : --- # Distributions Linux populaires --- <div> <div class="debian-slide"></div> ## Debian ### Description Debian est une distribution Linux stable et fiable, souvent utilisée comme base pour d'autres distributions. Elle est connue pour son engagement envers les logiciels libres et sa grande communauté de contributeurs. ### Cas d'utilisation - **Serveurs** : Debian est largement utilisé pour les serveurs en raison de sa stabilité. - **Stations de travail** : Idéal pour les développeurs et les utilisateurs avancés. ### Gestionnaire de paquets - **`dpkg`** : Gestionnaire de paquets de bas niveau. - **`apt`** : Outil de gestion de paquets de haut niveau. </div> <style> .debian-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Debian-OpenLogo.svg/240px-Debian-OpenLogo.svg.png') center / contain no-repeat; } </style> --- <div> <div class="ubuntu-slide"></div> ## Ubuntu ### Description Ubuntu est une distribution conviviale, basée sur Debian, et est l'une des distributions Linux les plus populaires. Elle est particulièrement adaptée aux débutants et aux environnements de bureau. ### Cas d'utilisation - **Bureau** : Ubuntu est largement utilisé pour les ordinateurs de bureau et les ordinateurs portables. - **Développement** : Idéal pour les développeurs grâce à son large écosystème de logiciels. ### Gestionnaire de paquets - **`apt`** : Outil de gestion de paquets. </div> <style> .ubuntu-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/UbuntuCoF.svg/240px-UbuntuCoF.svg.png') center / contain no-repeat; } </style> --- <div> <div class="fedora-slide"></div> ## Fedora ### Description Fedora est une distribution innovante, souvent utilisée pour tester de nouvelles technologies. Elle est soutenue par Red Hat et est connue pour son cycle de publication rapide. ### Cas d'utilisation - **Développement** : Fedora est souvent utilisé par les développeurs pour expérimenter de nouvelles fonctionnalités. - **Bureautique** : Convient également pour une utilisation quotidienne. ### Gestionnaire de paquets - **`dnf`** : Outil de gestion de paquets moderne. </div> <style> .fedora-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Fedora_icon_%282021%29.svg/240px-Fedora_icon_%282021%29.svg.png') center / contain no-repeat; } </style> --- <div> <div class="almalinux-slide"></div> ## AlmaLinux ### Description AlmaLinux est une distribution communautaire conçue pour être une alternative stable et fiable, compatible avec les systèmes d'entreprise. Elle est soutenue par CloudLinux et offre un support à long terme. ### Cas d'utilisation - **Serveurs d'entreprise** : AlmaLinux est idéal pour les environnements de production. - **Migration facile** : Compatible avec les systèmes basés sur RPM. ### Gestionnaire de paquets - **`dnf`** : Outil de gestion de paquets. </div> <style> .almalinux-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/AlmaLinux_Icon_Logo.svg/512px-AlmaLinux_Icon_Logo.svg.png') center / contain no-repeat; } </style> --- <div> <div class="rocky-slide"></div> ## Rocky Linux ### Description Rocky Linux est une distribution communautaire créée pour offrir une alternative stable et fiable, compatible avec les systèmes d'entreprise. Il est soutenu par une communauté active et des entreprises. ### Cas d'utilisation - **Serveurs d'entreprise** : Rocky Linux est conçu pour les environnements de production. - **Support à long terme** : Offre un support étendu pour les entreprises. ### Gestionnaire de paquets - **`dnf`** : Outil de gestion de paquets. </div> <style> .rocky-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Rocky_Linux_logo.svg/2048px-Rocky_Linux_logo.svg.png') center / contain no-repeat; } </style> --- <div> <div class="opensuse-slide"></div> ## OpenSUSE ### Description OpenSUSE est une distribution flexible, idéale pour les environnements de serveurs et de développement. Elle est connue pour son outil de configuration YaST et son gestionnaire de paquets ZYpp. ### Cas d'utilisation - **Serveurs** : OpenSUSE est utilisé pour les serveurs en raison de sa flexibilité. - **Développement** : Idéal pour les développeurs grâce à ses outils avancés. ### Gestionnaire de paquets - **`zypper`** : Outil de gestion de paquets. </div> <style> .opensuse-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/OpenSUSE_Logo.svg/400px-OpenSUSE_Logo.svg.png') center / contain no-repeat; } </style> --- <div> <div class="oracle-slide"></div> ## Oracle Linux ### Description Oracle Linux est une distribution basée sur RHEL, conçue pour les environnements d'entreprise. Il est gratuit pour une utilisation de base, mais le support est payant. ### Cas d'utilisation - **Serveurs d'entreprise** : Oracle Linux est largement utilisé dans les environnements d'entreprise. - **Compatibilité avec RHEL** : Offre une compatibilité élevée avec les systèmes basés sur RHEL. ### Gestionnaire de paquets - **`yum`** ou **`dnf`** : Outils de gestion de paquets. </div> <style> .oracle-slide { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.3; background: url('https://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Oracle_linux_logo.svg/1024px-Oracle_linux_logo.svg.png') center / contain no-repeat; } </style> --- ## Conclusion Ces distributions Linux offrent une variété d'options pour différents cas d'utilisation, des serveurs d'entreprise aux environnements de bureau et de développement. Que vous recherchiez la stabilité, la flexibilité ou l'innovation, il existe une distribution Linux adaptée à vos besoins. --- ![Distributions Linux](https://upload.wikimedia.org/wikipedia/commons/3/33/Linux_Distro_Timeline.png) *Timeline des distributions Linux* [Wikepedia Linux Distribution Timeline](https://fr.m.wikipedia.org/wiki/Fichier:Linux_Distribution_Timeline.svg) --- ## Structure des répertoires Linux (complète) | Répertoire | Description | |------------------|-----------------------------------------------------------------------------| | **`/`** | **Racine** : Le point de départ de la hiérarchie du système de fichiers. | | **`/bin`** | **Binaires essentiels** : Contient les commandes de base pour tous les utilisateurs (ex: `ls`, `cp`). | | **`/boot`** | **Fichiers de démarrage** : Contient les fichiers nécessaires au démarrage du système (ex: noyau Linux). | | **`/dev`** | **Périphériques** : Contient les fichiers représentant les périphériques matériels (ex: `/dev/sda` pour un disque dur). | | **`/etc`** | **Configuration système** : Contient les fichiers de configuration du système et des applications. | | **`/home`** | **Répertoires personnels** : Chaque utilisateur a un sous-répertoire ici pour stocker ses fichiers personnels. | | **`/lib`** | **Bibliothèques système** : Contient les bibliothèques partagées nécessaires aux programmes système. | --- | Répertoire | Description | |------------------|-----------------------------------------------------------------------------| | **`/media`** | **Points de montage pour médias amovibles** : Utilisé pour monter automatiquement les clés USB, CD, etc. | | **`/mnt`** | **Points de montage temporaires** : Utilisé pour monter manuellement des systèmes de fichiers temporaires. | | **`/opt`** | **Logiciels optionnels** : Souvent utilisé pour installer des logiciels tiers. | | **`/proc`** | **Informations système** : Un système de fichiers virtuel qui expose les informations du noyau et des processus. | | **`/root`** | **Répertoire personnel de root** : Le répertoire personnel de l'utilisateur root (superutilisateur). | | **`/run`** | **Données d'exécution** : Contient des fichiers temporaires liés aux processus en cours d'exécution. | --- | Répertoire | Description | |------------------|-----------------------------------------------------------------------------| | **`/sbin`** | **Binaires système essentiels** : Contient les commandes réservées à l'administrateur système (ex: `fdisk`, `ifconfig`). | | **`/srv`** | **Données de service** : Contient les données pour les services fournis par le système (ex: fichiers web pour un serveur HTTP). | | **`/tmp`** | **Fichiers temporaires** : Utilisé pour stocker des fichiers temporaires. Les fichiers peuvent être supprimés au redémarrage. | | **`/usr`** | **Logiciels utilisateur** : Contient les programmes, bibliothèques et fichiers partagés par les utilisateurs. | | **`/var`** | **Données variables** : Contient des fichiers qui changent fréquemment, comme les logs (`/var/log`), les bases de données, etc. | --- ### Répertoires supplémentaires (moins courants mais importants) | Répertoire | Description | |------------------|-----------------------------------------------------------------------------| | **`/lost+found`**| **Fichiers récupérés** : Contient les fichiers récupérés après un crash du système de fichiers. | | **`/sys`** | **Informations du noyau** : Un système de fichiers virtuel qui expose les informations du noyau et du matériel. | | **`/selinux`** | **SELinux** : Contient les fichiers liés à SELinux (un module de sécurité avancé). | | **`/snap`** | **Paquets Snap** : Utilisé pour stocker les applications installées via Snap (un système de gestion de paquets). | --- ### Exemple d'arborescence Linux Voici un exemple visuel d'une arborescence Linux typique : ```bash! / ├── bin ├── boot ├── dev ├── etc ├── home │ ├── user1 │ └── user2 ├── lib ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin ├── srv ├── tmp ├── usr │ ├── bin │ ├── lib │ └── local └── var ├── log ├── cache └── lib ``` --- ### Pourquoi cette structure ? La structure des répertoires Linux est standardisée par la **Filesystem Hierarchy Standard (FHS)**. Cela permet une organisation cohérente des fichiers sur tous les systèmes Linux, ce qui facilite la maintenance et la gestion. --- ### Exercice pratique : Explorer les répertoires 1. Ouvrez un terminal. 2. Utilisez `cd` pour naviguer dans les répertoires suivants : ```bash cd /var/log ls ``` Cela vous montrera les fichiers de logs du système. 3. Explorez `/proc` pour voir les informations sur les processus en cours d'exécution : ```bash cd /proc ls ``` 4. Utilisez `tree` (si installé) pour visualiser l'arborescence d'un répertoire : ```bash tree /home ``` --- ### Conclusion La structure des répertoires Linux est conçue pour être logique et organisée. En comprenant cette structure, vous pouvez naviguer plus efficacement dans le système et mieux comprendre où sont stockés les fichiers et les programmes. --- # Commandes de base --- ## Navigation dans le système de fichiers ### `pwd` : Afficher le répertoire courant - **Description** : Affiche le chemin absolu du répertoire courant. - **Exemple** : ```bash pwd ``` Sortie : ``` /home/user ``` --- ### `cd` : Changer de répertoire - **Description** : Permet de naviguer entre les répertoires. - **Exemples** : ```bash cd /home/user/Documents # Aller dans le répertoire Documents cd .. # Remonter d'un niveau cd ~ # Retourner au répertoire personnel ``` --- ### `ls` : Lister les fichiers et répertoires - **Description** : Affiche le contenu d'un répertoire. - **Options courantes** : - `-a` : Affiche tous les fichiers, y compris les fichiers cachés. - `-l` : Affiche les détails des fichiers (permissions, propriétaire, taille, etc.). - `-h` : Affiche les tailles de fichiers de manière lisible (Ko, Mo, Go). - `-R` : Liste récursive (affiche le contenu des sous-répertoires). - `-t` : Trie les fichiers par date de modification (du plus récent au plus ancien). - `-tr` : Trie les fichiers par date de modification (du plus ancien au plus récent). --- - **Exemples** : ```bash ls # Liste les fichiers du répertoire courant ls -la # Affiche tous les fichiers avec des détails ls -lh # Affiche les tailles de fichiers de manière lisible ls -R # Liste récursive ls -t # Trie par date de modification ls --all --format=long # Équivalent à `ls -la` ``` --- ## Manipulation de fichiers ### `cp` : Copier des fichiers ou répertoires - **Description** : Copie un fichier ou un répertoire vers un autre emplacement. - **Options courantes** : - `-r` : Copie récursive (pour les répertoires). - `-v` : Mode verbeux (affiche les fichiers copiés). - **Exemples** : ```bash cp fichier.txt /backup/ # Copie un fichier cp -r dossier/ /backup/ # Copie un répertoire cp -v fichier.txt /backup/ # Copie en mode verbeux ``` --- ### `mv` : Déplacer ou renommer des fichiers - **Description** : Déplace un fichier ou un répertoire, ou le renomme. - **Exemples** : ```bash mv fichier.txt /backup/ # Déplace un fichier mv ancien_nom.txt nouveau_nom.txt # Renomme un fichier ``` --- ### `rm` : Supprimer des fichiers ou répertoires - **Description** : Supprime un fichier ou un répertoire. - **Options courantes** : - `-r` : Supprime récursive (pour les répertoires). - `-f` : Force la suppression (ignore les avertissements). - **Exemples** : ```bash rm fichier.txt # Supprime un fichier rm -r dossier/ # Supprime un répertoire rm -rf dossier/ # Force la suppression d'un répertoire ``` --- ### `touch` : Créer un fichier vide - **Description** : Crée un fichier vide ou met à jour la date de modification d'un fichier existant. - **Exemple** : ```bash touch nouveau_fichier.txt ``` --- ### `mkdir` : Créer un répertoire - **Description** : Crée un nouveau répertoire. - **Options courantes** : - `-p` : Crée les répertoires parents si nécessaire. - **Exemples** : ```bash mkdir nouveau_dossier # Crée un répertoire mkdir -p dossier/sous_dossier # Crée une arborescence de répertoires ``` --- ## Visualisation de fichiers ### `cat` : Afficher le contenu d'un fichier - **Description** : Affiche le contenu d'un fichier. - **Exemple** : ```bash cat fichier.txt ``` --- ### `less` : Afficher un fichier page par page - **Description** : Permet de parcourir un fichier page par page. - **Exemple** : ```bash less fichier.txt ``` - **Commandes dans `less`** : - `espace` : Page suivante. - `b` : Page précédente. - `q` : Quitter. --- ### `head` : Afficher le début d'un fichier - **Description** : Affiche les premières lignes d'un fichier. - **Options courantes** : - `-n` : Nombre de lignes à afficher. - **Exemple** : ```bash head -n 10 fichier.txt # Affiche les 10 premières lignes ``` --- ### `tail` : Afficher la fin d'un fichier - **Description** : Affiche les dernières lignes d'un fichier. - **Options courantes** : - `-n` : Nombre de lignes à afficher. - `-f` : Suit les nouvelles lignes ajoutées en temps réel (utile pour les logs). - **Exemple** : ```bash tail -n 10 fichier.txt # Affiche les 10 dernières lignes tail -f /var/log/syslog # Suit les logs en temps réel ``` --- ## Recherche de fichiers ### `find` : Rechercher des fichiers - **Description** : Recherche des fichiers selon des critères spécifiques. - **Options courantes** : - `-name` : Recherche par nom. - `-size` : Recherche par taille. - `-mtime` : Recherche par date de modification. - **Exemples** : ```bash find /home/user -name "*.txt" # Recherche tous les fichiers .txt find /var/log -mtime -7 # Recherche les fichiers modifiés il y a moins de 7 jours find / -size +100M # Recherche les fichiers de plus de 100 Mo ``` --- ### `locate` : Rechercher des fichiers rapidement - **Description** : Recherche des fichiers en utilisant une base de données pré-indexée. - **Syntaxe** : `locate [options] <motif>` - **Exemples** : ```bash locate fichier.txt # Recherche un fichier locate -i FICHIER.TXT # Ignore la casse locate -c fichier.txt # Compte les résultats locate -r ".*\.log$" # Utilise une expression régulière ``` - **Mise à jour de la base** : `sudo updatedb` (nécessaire pour les fichiers récents). --- ### `grep` : Rechercher du texte dans des fichiers - **Description** : Recherche un motif dans un fichier ou un flux de texte. - **Options courantes** : - `-i` : Ignore la casse. - `-r` : Recherche récursive dans les répertoires. - **Exemples** : ```bash grep "motif" fichier.txt # Recherche un motif dans un fichier grep -i "motif" fichier.txt # Ignore la casse grep -r "motif" /chemin/du/repertoire # Recherche récursive ``` --- ## Conclusion Cette section couvre les bases de Linux, de son histoire à ses commandes essentielles. Avec ces connaissances, vous pouvez commencer à naviguer et à interagir efficacement avec un système Linux. --- # Gestion des utilisateurs et des groupes --- ## Création d'utilisateurs ### `useradd` : Créer un utilisateur La commande `useradd` est utilisée pour créer un nouvel utilisateur. Elle est souvent utilisée dans les scripts ou pour des configurations avancées. ### Options courantes : - `-m` : Crée le répertoire personnel de l'utilisateur. - `-s` : Spécifie le shell de l'utilisateur. - `-g` : Définit le groupe principal de l'utilisateur. - `-G` : Ajoute l'utilisateur à des groupes supplémentaires. --- ### Exemples : 1. **Créer un utilisateur avec un répertoire personnel** : ```bash sudo useradd -m nouvel_utilisateur ``` Cela crée un utilisateur nommé `nouvel_utilisateur` avec un répertoire personnel dans `/home/nouvel_utilisateur`. 2. **Créer un utilisateur avec un shell spécifique** : ```bash sudo useradd -m -s /bin/bash nouvel_utilisateur ``` Cela définit `/bin/bash` comme shell par défaut. 3. **Créer un utilisateur avec un groupe principal et des groupes supplémentaires** : ```bash sudo useradd -m -g utilisateurs -G sudo,developers nouvel_utilisateur ``` Cela crée un utilisateur avec `utilisateurs` comme groupe principal et l'ajoute aux groupes `sudo` et `developers`. --- ### `adduser` : Créer un utilisateur (version interactive) La commande `adduser` est plus conviviale et interactive que `useradd`. Elle est souvent préférée pour les configurations manuelles. #### Exemple : ```bash sudo adduser nouvel_utilisateur ``` Cela vous invite à définir un mot de passe et à fournir des informations supplémentaires (nom complet, numéro de téléphone, etc.). --- ## Modification d'utilisateurs ### `usermod` : Modifier un utilisateur La commande `usermod` permet de modifier les propriétés d'un utilisateur existant. ### Options courantes : - `-l` : Change le nom de l'utilisateur. - `-d` : Change le répertoire personnel de l'utilisateur. - `-s` : Change le shell de l'utilisateur. - `-aG` : Ajoute l'utilisateur à des groupes supplémentaires (sans supprimer les groupes existants). --- ### Exemples : 1. **Changer le nom d'un utilisateur** : ```bash sudo usermod -l nouveau_nom ancien_nom ``` 2. **Changer le répertoire personnel** : ```bash sudo usermod -d /nouveau/home -m nouvel_utilisateur ``` L'option `-m` déplace également le contenu de l'ancien répertoire. 3. **Ajouter un utilisateur à un groupe supplémentaire** : ```bash sudo usermod -aG sudo nouvel_utilisateur ``` Cela ajoute `nouvel_utilisateur` au groupe `sudo`. --- ### `passwd` : Changer le mot de passe d'un utilisateur La commande `passwd` permet de définir ou de modifier le mot de passe d'un utilisateur. ### Exemples : 1. **Changer son propre mot de passe** : ```bash passwd ``` 2. **Changer le mot de passe d'un autre utilisateur** : ```bash sudo passwd nouvel_utilisateur ``` --- ## Suppression d'utilisateurs ### `userdel` : Supprimer un utilisateur La commande `userdel` permet de supprimer un utilisateur du système. #### Options courantes : - `-r` : Supprime également le répertoire personnel de l'utilisateur. #### Exemples : 1. **Supprimer un utilisateur** : ```bash sudo userdel nouvel_utilisateur ``` 2. **Supprimer un utilisateur et son répertoire personnel** : ```bash sudo userdel -r nouvel_utilisateur ``` --- ## Gestion des groupes ### `groupadd` : Créer un groupe La commande `groupadd` permet de créer un nouveau groupe. #### Exemple : ```bash sudo groupadd mon_groupe ``` --- ### `groupmod` : Modifier un groupe La commande `groupmod` permet de modifier les propriétés d'un groupe existant. #### Options courantes : - `-n` : Change le nom du groupe. #### Exemple : ```bash sudo groupmod -n nouveau_nom ancien_nom ``` --- ### `groupdel` : Supprimer un groupe La commande `groupdel` permet de supprimer un groupe du système. #### Exemple : ```bash sudo groupdel mon_groupe ``` --- ## Exercice pratique 1. **Créer un nouvel utilisateur** : ```bash sudo adduser utilisateur_test ``` 2. **Ajouter l'utilisateur à un groupe supplémentaire** : ```bash sudo usermod -aG sudo utilisateur_test ``` 3. **Changer le mot de passe de l'utilisateur** : ```bash sudo passwd utilisateur_test ``` 4. **Supprimer l'utilisateur et son répertoire personnel** : ```bash sudo userdel -r utilisateur_test ``` --- ## Conclusion La gestion des utilisateurs et des groupes est une compétence essentielle pour administrer un système Linux. Avec ces commandes, vous pouvez créer, modifier et supprimer des utilisateurs et des groupes, ainsi que gérer leurs permissions et leurs accès. --- # Scripting Bash --- ## Introduction au scripting ### Pourquoi utiliser des scripts Bash ? Les scripts Bash permettent d'automatiser des tâches répétitives, de gérer des opérations complexes et d'exécuter des commandes en séquence. Ils sont essentiels pour : - **Automatisation** : Exécuter des tâches sans intervention manuelle. - **Productivité** : Gagner du temps en regroupant plusieurs commandes dans un seul fichier. - **Reproductibilité** : Assurer que les mêmes étapes sont suivies à chaque exécution. - **Maintenance** : Faciliter la gestion des systèmes en centralisant les opérations. --- ## Structure d'un script Bash Un script Bash est un fichier texte contenant une série de commandes. Il commence généralement par une **shebang** (`#!/bin/bash`) pour indiquer que le script doit être exécuté avec Bash. ### Exemple de script simple ```bash #!/bin/bash # Ce script affiche "Bonjour, monde !" echo "Bonjour, monde !" ``` --- ## Exemples de scripts ### 1. Script de sauvegarde Ce script sauvegarde un répertoire dans un fichier compressé. ```bash #!/bin/bash # Script de sauvegarde DATE=$(date +%Y-%m-%d) BACKUP_DIR="/backup" SOURCE_DIR="/home/user/Documents" # Crée une archive compressée tar -czf $BACKUP_DIR/backup_$DATE.tar.gz $SOURCE_DIR # Affiche un message de confirmation echo "Sauvegarde terminée : $BACKUP_DIR/backup_$DATE.tar.gz" ``` --- ### 2. Script de surveillance de l'espace disque Ce script surveille l'espace disque et envoie une alerte si l'espace utilisé dépasse un seuil. ```bash #!/bin/bash # Script de surveillance de l'espace disque THRESHOLD=90 # Seuil en pourcentage # Récupère l'espace utilisé USAGE=$(df / | grep / | awk '{print $5}' | sed 's/%//g') # Vérifie si le seuil est dépassé if [ $USAGE -gt $THRESHOLD ]; then echo "Alerte : L'espace disque est presque plein ($USAGE%) !" else echo "Espace disque OK : $USAGE% utilisé." fi ``` --- ### 3. Script de nettoyage des fichiers temporaires Ce script supprime les fichiers temporaires plus anciens que 7 jours. ```bash #!/bin/bash # Script de nettoyage des fichiers temporaires TEMP_DIR="/tmp" DAYS=7 # Supprime les fichiers anciens find $TEMP_DIR -type f -mtime +$DAYS -exec rm -f {} \; # Affiche un message de confirmation echo "Nettoyage terminé : fichiers de plus de $DAYS jours supprimés." ``` --- ## Bonnes pratiques pour écrire des scripts Bash 1. **Commentaires** : Ajoutez des commentaires pour expliquer le fonctionnement du script. ```bash # Ce script sauvegarde le répertoire Documents ``` 2. **Variables** : Utilisez des variables pour stocker des valeurs réutilisables. ```bash BACKUP_DIR="/backup" ``` 3. **Gestion des erreurs** : Vérifiez les erreurs avec `if` ou `||`. ```bash if [ $? -ne 0 ]; then echo "Erreur : La commande a échoué." fi ``` 4. **Permissions** : Rendez le script exécutable avec `chmod`. ```bash chmod +x mon_script.sh ``` 5. **Tests** : Testez votre script dans un environnement isolé avant de l'utiliser en production. --- ## Exercice pratique 1. **Créer un script de sauvegarde** : - Sauvegardez un répertoire de votre choix dans un fichier compressé. - Ajoutez un message de confirmation à la fin. 2. **Créer un script de surveillance** : - Surveillez l'espace disque et affichez une alerte si l'espace utilisé dépasse 80 %. 3. **Créer un script de nettoyage** : - Supprimez les fichiers temporaires de plus de 7 jours. --- ## Conclusion Le scripting Bash est un outil puissant pour automatiser des tâches sous Linux. Avec des scripts bien structurés et des bonnes pratiques, vous pouvez améliorer votre productivité et la gestion de vos systèmes. --- # Gestionnaires de paquets sous Linux --- ## Qu'est-ce qu'un gestionnaire de paquets ? Un **gestionnaire de paquets** est un outil qui permet d'installer, de mettre à jour, de configurer et de supprimer des logiciels sur un système Linux. Il gère les dépendances entre les paquets et assure que les logiciels sont correctement installés. --- ## Principaux gestionnaires de paquets ### 1. **APT** (Advanced Package Tool) - **Distributions** : Debian, Ubuntu, Linux Mint. - **Commandes principales** : - `apt update` : Met à jour la liste des paquets disponibles. - `apt upgrade` : Met à jour les paquets installés. - `apt install <paquet>` : Installe un paquet. - `apt remove <paquet>` : Supprime un paquet. - `apt search <mot-clé>` : Recherche un paquet. - `apt show <paquet>` : Affiche les détails d'un paquet. #### Exemples : ```bash sudo apt update sudo apt install vim sudo apt remove vim sudo apt search nginx ``` --- ### 2. **YUM** (Yellowdog Updater Modified) - **Distributions** : CentOS, RHEL (avant la version 8). - **Commandes principales** : - `yum install <paquet>` : Installe un paquet. - `yum update` : Met à jour les paquets installés. - `yum remove <paquet>` : Supprime un paquet. - `yum search <mot-clé>` : Recherche un paquet. - `yum info <paquet>` : Affiche les détails d'un paquet. #### Exemples : ```bash sudo yum install httpd sudo yum update sudo yum remove httpd sudo yum search nginx ``` --- ### 3. **DNF** (Dandified YUM) - **Distributions** : Fedora, CentOS 8+, RHEL 8+. - **Commandes principales** : - `dnf install <paquet>` : Installe un paquet. - `dnf update` : Met à jour les paquets installés. - `dnf remove <paquet>` : Supprime un paquet. - `dnf search <mot-clé>` : Recherche un paquet. - `dnf info <paquet>` : Affiche les détails d'un paquet. #### Exemples : ```bash sudo dnf install vim sudo dnf update sudo dnf remove vim sudo dnf search nginx ``` --- ### 4. **Zypper** - **Distributions** : openSUSE. - **Commandes principales** : - `zypper install <paquet>` : Installe un paquet. - `zypper update` : Met à jour les paquets installés. - `zypper remove <paquet>` : Supprime un paquet. - `zypper search <mot-clé>` : Recherche un paquet. - `zypper info <paquet>` : Affiche les détails d'un paquet. #### Exemples : ```bash sudo zypper install vim sudo zypper update sudo zypper remove vim sudo zypper search nginx ``` --- ### 5. **Pacman** - **Distributions** : Arch Linux, Manjaro. - **Commandes principales** : - `pacman -S <paquet>` : Installe un paquet. - `pacman -Syu` : Met à jour tous les paquets. - `pacman -R <paquet>` : Supprime un paquet. - `pacman -Ss <mot-clé>` : Recherche un paquet. - `pacman -Si <paquet>` : Affiche les détails d'un paquet. #### Exemples : ```bash sudo pacman -S vim sudo pacman -Syu sudo pacman -R vim sudo pacman -Ss nginx ``` --- ## Bonnes pratiques pour utiliser les gestionnaires de paquets 1. **Mettre à jour régulièrement** : - Avant d'installer ou de mettre à jour des paquets, mettez toujours à jour la liste des paquets disponibles. ```bash sudo apt update # Debian/Ubuntu sudo yum check-update # CentOS/RHEL sudo dnf check-update # Fedora ``` 2. **Vérifier les dépendances** : - Les gestionnaires de paquets gèrent automatiquement les dépendances, mais il est bon de vérifier les conflits potentiels. --- 3. **Nettoyer le cache** : - Supprimez les paquets téléchargés inutiles pour libérer de l'espace. ```bash sudo apt clean # Debian/Ubuntu sudo yum clean all # CentOS/RHEL sudo dnf clean all # Fedora ``` 4. **Utiliser des dépôts officiels** : - Évitez les dépôts non officiels pour réduire les risques de sécurité. --- ## Exercice pratique 1. **Installer un paquet** : - Utilisez le gestionnaire de paquets de votre distribution pour installer `vim`. ```bash sudo apt install vim # Debian/Ubuntu sudo yum install vim # CentOS/RHEL sudo dnf install vim # Fedora ``` 2. **Mettre à jour les paquets** : - Mettez à jour tous les paquets installés sur votre système. ```bash sudo apt update && sudo apt upgrade # Debian/Ubuntu sudo yum update # CentOS/RHEL sudo dnf update # Fedora ``` 3. **Rechercher un paquet** : - Recherchez un paquet comme `nginx` pour voir s'il est disponible. ```bash sudo apt search nginx # Debian/Ubuntu sudo yum search nginx # CentOS/RHEL sudo dnf search nginx # Fedora ``` --- ## Conclusion Les gestionnaires de paquets sont des outils essentiels pour gérer les logiciels sous Linux. Que vous utilisiez `apt`, `yum`, `dnf`, `zypper` ou `pacman`, ces outils vous permettent d'installer, de mettre à jour et de supprimer des paquets de manière efficace et sécurisée. --- # Sécurité de base --- ## Configuration de pare-feu avec `ufw` `ufw` (Uncomplicated Firewall) est un outil simple pour configurer un pare-feu sous Linux. Il est basé sur `iptables` mais est beaucoup plus facile à utiliser. --- ### Installation de `ufw` Sur la plupart des distributions, `ufw` est installé par défaut. Sinon, vous pouvez l'installer avec : - **Debian/Ubuntu** : ```bash sudo apt update sudo apt install ufw ``` - **CentOS/RHEL** : ```bash sudo yum install ufw ``` - **Fedora** : ```bash sudo dnf install ufw ``` --- ### Activer et désactiver `ufw` 1. **Activer `ufw`** : ```bash sudo ufw enable ``` 2. **Désactiver `ufw`** : ```bash sudo ufw disable ``` --- ### Configurer des règles de pare-feu #### Autoriser un port ```bash sudo ufw allow 22 # Autorise le port SSH sudo ufw allow 80 # Autorise le port HTTP ``` #### Refuser un port ```bash sudo ufw deny 23 # Bloque le port Telnet ``` #### Autoriser une plage de ports ```bash sudo ufw allow 6000:6007/tcp # Autorise les ports 6000 à 6007 ``` #### Supprimer une règle ```bash sudo ufw delete allow 80 # Supprime la règle autorisant le port 80 ``` --- ### Vérifier l'état de `ufw` 1. **Afficher les règles actives** : ```bash sudo ufw status ``` 2. **Afficher les règles avec plus de détails** : ```bash sudo ufw status verbose ``` --- ## Gestion des clés SSH Les clés SSH permettent une connexion sécurisée sans mot de passe. Elles sont plus sûres que les mots de passe car elles reposent sur une cryptographie asymétrique. --- # Gestion des clés SSH et Connexion à distance --- ## Introduction à SSH **SSH** (Secure Shell) est un protocole de communication sécurisé permettant de se connecter à distance à un serveur ou une machine. Il remplace les anciens protocoles non sécurisés comme Telnet en chiffrant toutes les communications. ### Pourquoi utiliser SSH ? - **Sécurité** : Les données sont chiffrées, ce qui empêche les interceptions. - **Authentification** : Possibilité d'utiliser des clés SSH pour une connexion sans mot de passe. - **Polyvalence** : SSH permet également de transférer des fichiers (via SCP ou SFTP) et de rediriger des ports. ---- ## Génération des clés SSH Les **clés SSH** sont une méthode d'authentification plus sécurisée que les mots de passe. Elles reposent sur une paire de clés cryptographiques : - **Clé privée** : Gardée secrète sur votre machine locale. - **Clé publique** : Placée sur le serveur distant. ---- ### Étapes pour générer une paire de clés SSH 1. **Générer la paire de clés** : ```bash ssh-keygen -t rsa -b 4096 ``` - `-t rsa` : Type de clé (RSA). - `-b 4096` : Taille de la clé (4096 bits pour une sécurité renforcée). 2. **Choisir un emplacement** : - Par défaut, les clés sont stockées dans `~/.ssh/id_rsa` (clé privée) et `~/.ssh/id_rsa.pub` (clé publique). 3. **Ajouter une phrase secrète (optionnelle)** : - Une phrase secrète ajoute une couche de sécurité supplémentaire. Elle sera demandée à chaque utilisation de la clé. ---- ## Copier la clé publique sur un serveur distant Pour permettre une connexion sans mot de passe, vous devez copier votre clé publique sur le serveur distant. 1. **Utiliser `ssh-copy-id`** : ```bash ssh-copy-id utilisateur@serveur ``` - Cela ajoute automatiquement la clé publique au fichier `~/.ssh/authorized_keys` sur le serveur. 2. **Se connecter sans mot de passe** : ```bash ssh utilisateur@serveur ``` - Si une phrase secrète a été définie, elle vous sera demandée. ---- ## Connexion SSH ### Commandes de base 1. **Se connecter à un serveur** : ```bash ssh utilisateur@serveur ``` - Par défaut, SSH utilise le port **22**. 2. **Spécifier un port personnalisé** : ```bash ssh -p 1234 utilisateur@serveur ``` 3. **Rediriger un port local vers un port distant** : ```bash ssh -L 9000:localhost:8080 utilisateur@serveur ``` - Cela redirige le port local `9000` vers le port `8080` du serveur distant. 4. **Exécuter une commande à distance** : ```bash ssh utilisateur@serveur "commande" ``` - Exemple : `ssh utilisateur@serveur "ls -l"`. ---- ## Transfert de fichiers avec SCP **SCP** (Secure Copy) est un outil permettant de transférer des fichiers entre machines via SSH. ### Commandes de base 1. **Copier un fichier local vers un serveur distant** : ```bash scp fichier.txt utilisateur@serveur:/chemin/destination ``` 2. **Copier un fichier distant vers la machine locale** : ```bash scp utilisateur@serveur:/chemin/fichier.txt /chemin/local ``` 3. **Copier un répertoire entier** : ```bash scp -r dossier/ utilisateur@serveur:/chemin/destination ``` 4. **Spécifier un port personnalisé** : ```bash scp -P 1234 fichier.txt utilisateur@serveur:/chemin/destination ``` --- ## Options courantes de SCP | Option | Description | |--------|-----------------------------------------------------------------------------| | `-P` | Spécifie un port personnalisé (par défaut : 22). | | `-r` | Copie récursive des répertoires. | | `-p` | Préserve les permissions et les dates de modification des fichiers. | | `-q` | Mode silencieux (n'affiche que les erreurs critiques). | | `-c` | Compresse les données pendant le transfert. | | `-v` | Mode verbeux (affiche des informations détaillées sur le transfert). | --- ## Bonnes pratiques pour SSH et SCP 1. **Utiliser des clés SSH** : Évitez les mots de passe pour une sécurité renforcée. 2. **Désactiver l'authentification par mot de passe** : - Éditez le fichier `/etc/ssh/sshd_config` sur le serveur : ```bash PasswordAuthentication no PermitRootLogin no ``` - Redémarrez le service SSH : ```bash sudo systemctl restart sshd ``` 3. **Changer le port SSH par défaut** : Cela réduit les attaques automatisées. - Modifiez le fichier `/etc/ssh/sshd_config` : ```bash Port 2222 ``` 4. **Utiliser `fail2ban`** : Cet outil bloque les adresses IP après plusieurs tentatives de connexion infructueuses. --- ## Exercices pratiques ### Exercice 1 : Génération et utilisation des clés SSH 1. Générez une paire de clés SSH. 2. Copiez la clé publique sur un serveur distant. 3. Connectez-vous au serveur sans mot de passe. ### Exercice 2 : Transfert de fichiers avec SCP 1. Créez un fichier `test.txt` sur votre machine locale. 2. Transférez-le vers un serveur distant. 3. Téléchargez un fichier du serveur vers votre machine locale. ### Exercice 3 : Redirection de port 1. Redirigez un port local vers un port distant. 2. Accédez à un service distant via le port redirigé. --- ## Conclusion SSH et SCP sont des outils essentiels pour administrer des serveurs distants de manière sécurisée. Avec les clés SSH, vous pouvez éviter les risques liés aux mots de passe, et SCP facilite le transfert de fichiers entre machines. En suivant les bonnes pratiques, vous pouvez renforcer la sécurité de vos connexions et protéger vos systèmes contre les attaques. --- ## Bonnes pratiques de sécurité ### 1. Mises à jour régulières - **Mettre à jour le système** : ```bash sudo apt update && sudo apt upgrade # Debian/Ubuntu sudo yum update # CentOS/RHEL sudo dnf update # Fedora ``` - **Automatiser les mises à jour** : - Sur Debian/Ubuntu, utilisez `unattended-upgrades`. - Sur CentOS/RHEL, utilisez `yum-cron`. --- ### 2. Gestion des permissions - **Restreindre l'accès aux fichiers sensibles** : ```bash chmod 600 ~/.ssh/id_rsa # Fichier de clé privée chmod 700 ~/.ssh # Répertoire .ssh ``` - **Utiliser `sudo` au lieu de root** : - Évitez d'utiliser le compte root directement. - Ajoutez des utilisateurs au groupe `sudo` : ```bash sudo usermod -aG sudo utilisateur ``` ---- ## Un fichier et/ou un dossier a : - un propriétaire - un groupe - des droits Les droits permettent de définir l'accès à ce fichier. On peut les caractériser de 2 manières : - un nombre (755) - 9 caractères : (rwx rw- r-x) ---- ### 3 groupes: - les droits d'accès du *propriétaire* - les droits d'accès du *groupe* - les droits des *autres comptes du système* | *r* | *w* | *x* | |:----------------:|:-----------------:|:----------:| | accès en lecture | accès en écriture | exécutable | ---- ### Tout est binaire | Symbolique | Binaire | Octale | |:----------:|:-------:|:------:| | - - - | 0 0 0 | 0 | | - - x | 0 0 1 | 1 | | - w - | 0 1 0 | 2 | | - w x | 0 1 1 | 3 | | r - - | 1 0 0 | 4 | | r - x | 1 0 1 | 5 | | r w - | 1 1 0 | 6 | | r w x | 1 1 1 | 7 | ---- ### Changer les droits ```bash= # équivalent en chiffre # User | Group | Other # 7 | 5 | 5 drwxr-xr-x 1 nobody users 0 Nov 5 00:06 influxdb ``` Si je souhaite changer les droits pour que : - #### seul le propriétaire y ait accès ```bash= sudo chmod 700 influxdb ``` - #### tous aient le droit de lire et exécuter ```bash= sudo chmod 555 influxdb ``` ---- - #### Autres informations ```bash= # ajout des droits d'éxécution pour tous chmod +x "nouveau fichier" # ajout des droits de lecture pour tous chmod +r "nouveau fichier" # retrait des droits d'écriture et d'exécution pour tous chmod -wx "nouveau fichier" # changement des droits d'une autre manière chmod ugo=rx "nouveau fichier" # même résulat : a => all chmod a=rx "nouveau fichier" # mais aussi chmod u=- "nouveau fichier" & chmod g=r "nouveau fichier" & chmod o=w "nouveau fichier" # R => récursif chmod -R 544 /home/sam/learning ``` ---- ### Changer de propriétaire / de groupe ```bash= chown [-option] [utilisateur][:groupe] cible1 [cible2 ..] # retrouver tous les utilisateurs cat /etc/passwd # nom:mdp:UID:GID:infos(num, nom complet, etc.):home:shell $ root:x:0:0:Console and webGui login account:/root:/bin/bash ``` #### Changement de propétaire ```bash= chown toto "nouveau fichier" ``` #### Changement de propétaire et de groupe ```bash= chown toto:m2i "nouveau fichier" # -R => récursif chown -R toto:m2i /home/sam/learning ``` ---- #### Changement de groupe ```bash= chgrp [-option] [groupe] cible1 [cible2 ..] # retrouver tous les groupes cat /etc/group # nom : mdp : ID groupe : nom(s) utilisateur du groupe $ avahi:x:214:sam ``` ```bash= chgrp m2i "nouveau fichier" # -R => récursif chown -R m2i /home/sam/learning ``` --- ### 3. Surveillance des logs - **Consulter les logs système** : ```bash sudo journalctl -xe # Affiche les logs récents ``` - **Surveiller les connexions SSH** : ```bash sudo grep "Failed password" /var/log/auth.log # Debian/Ubuntu sudo grep "Failed password" /var/log/secure # CentOS/RHEL ``` --- ### 4. Utilisation de SELinux/AppArmor - **SELinux** (CentOS/RHEL) : - Activez SELinux pour renforcer la sécurité : ```bash sudo setenforce 1 ``` - **AppArmor** (Debian/Ubuntu) : - Activez AppArmor pour restreindre les applications : ```bash sudo systemctl enable apparmor sudo systemctl start apparmor ``` --- ## Exercice pratique 1. **Configurer `ufw`** : - Autorisez les ports SSH (22) et HTTP (80). - Bloquez le port Telnet (23). 2. **Générer et utiliser des clés SSH** : - Générez une paire de clés SSH. - Copiez la clé publique sur un serveur distant. - Désactivez l'authentification par mot de passe. 3. **Appliquer les bonnes pratiques** : - Mettez à jour votre système. - Restreignez les permissions des fichiers sensibles. - Surveillez les logs système. --- ## Conclusion La sécurité est un aspect essentiel de l'administration système. Avec des outils comme `ufw`, des clés SSH et des bonnes pratiques, vous pouvez protéger efficacement votre système contre les menaces. --- # Les différents shells sous Linux --- ## Introduction Un **shell** est une interface entre l'utilisateur et le système d'exploitation. Il interprète les commandes et les exécute. Voici les principaux shells sous Linux : --- ## 1. **Bash (Bourne-Again Shell)** - **Description** : Le shell le plus populaire, successeur du Bourne Shell (sh). - **Caractéristiques** : Autocomplétion, historique des commandes, scripting puissant. - **Cas d'usage** : Utilisation quotidienne, scripts système. - **Exemple** : ```bash echo "Bonjour, monde !" ``` --- ## 2. **sh (Bourne Shell)** - **Description** : Un des premiers shells Unix, simple et portable. - **Caractéristiques** : Compatible avec de nombreux scripts système. - **Cas d'usage** : Scripts système, compatibilité. - **Exemple** : ```bash #!/bin/sh echo "Ce script utilise sh." ``` --- ## 3. **Zsh (Z Shell)** - **Description** : Une version améliorée de Bash, hautement personnalisable. - **Caractéristiques** : Correction automatique, thèmes, plugins (Oh My Zsh). - **Cas d'usage** : Développeurs, utilisateurs avancés. - **Exemple** : ```bash alias ll="ls -la" ``` --- ## 4. **Ksh (Korn Shell)** - **Description** : Combine les fonctionnalités de `sh` et `csh`. - **Caractéristiques** : Scripting avancé, tableaux, expressions régulières. - **Cas d'usage** : Environnements professionnels, scripts complexes. - **Exemple** : ```bash #!/bin/ksh print "Ce script utilise ksh." ``` --- ## 5. **csh (C Shell) et tcsh** - **Description** : Syntaxe proche du langage C. - **Caractéristiques** : Interactivité, moins populaire aujourd'hui. - **Cas d'usage** : Environnements académiques. - **Exemple** : ```bash #!/bin/csh echo "Ce script utilise csh." ``` --- ## 6. **Fish (Friendly Interactive Shell)** - **Description** : Shell moderne et convivial. - **Caractéristiques** : Suggestions intelligentes, configuration simple. - **Cas d'usage** : Débutants, utilisateurs interactifs. - **Exemple** : ```bash echo "Fish est intuitif et coloré." ``` --- ## Comparaison rapide | Shell | Points forts | Cas d'usage | |-------|--------------|-------------| | **Bash** | Polyvalent, scripting | Utilisation générale | | **sh** | Simple, portable | Scripts système | | **Zsh** | Personnalisable, plugins | Développeurs | | **Ksh** | Scripting avancé | Environnements pro | | **csh/tcsh** | Syntaxe proche du C | Académique | | **Fish** | Convivial, suggestions | Débutants | --- ## Changer de shell 1. **Vérifier le shell actuel** : ```bash echo $SHELL ``` 2. **Lister les shells disponibles** : ```bash cat /etc/shells ``` 3. **Changer de shell temporairement** : ```bash zsh # Essayer Zsh ``` 4. **Changer de shell par défaut** : ```bash chsh -s /bin/zsh # Remplacer par le shell souhaité ``` --- ## Conclusion Choisissez **Bash** pour une utilisation générale, **Zsh** pour la personnalisation, ou **Fish** pour une expérience conviviale. Explorez et trouvez celui qui vous convient ! --- ## Commandes Internes et Externes **Internes** Partie intégrante du Shell(builtin) Exemple : cd, set, export, etc. **Externes** Situées à l'intérieur de fichiers individuels Binaires ou script ---- ### Externes ```bash= $ which nano /usr/bin/echo ``` ### Internes ```bash= $ echo $PATH /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin ``` ### Comment faire la différence ? ```bash= $ type echo echo is a shell builtin # Interne ``` ```bash= $ type man man is /usr/bin/man # Externe ``` --- # Symboles ' et " En tant qu’utilisateur de Linux, vous allez avoir à créer et manipuler des fichiers ou des variables de bien des manières. Il est plutôt facile de travailler avec des noms de fichier courts, et des valeurs simples, mais cela devient beaucoup plus compliqué lorsqu'il y a des caractères du type : espace, !, ?, et autres caractères spéciaux. Les Shell fournissent une fonctionnalité appelée les « quotes » qui encapsule les données à l'intérieur de symboles comme : " " et ' '. ---- ## Essayons afin de voir l'importance des symboles ' et " Entre ces quotes, tous les caractères spéciaux perdent leur signification sauf : - $ (dollar) - \ (backslash) - ` (backquotes/backticks) ```bash= echo je suis $USER ``` ```bash= echo "je suis $USER" ``` Il n'y a aucune différences car *echo* attend une liste de arguments. Et si l'on souhaite créer un fichier de nom : `nouveau fichier` ```bash= # touch permet de créer de nouveaux fichiers touch nouveau fichier # puis ls -l # afin de vérifier si c'est bon ``` Alors ? ---- Recommençons! Commençons par supprimer les fichiers. ```bash= # rm remove rm nouveau fichier ``` Pour jouer avec le shell, nous allons créer un dossier et nous déplacer dedans. ```bash= # Création d'un dossier pour nous entrainer mkdir learning # MaKe directory # Déplacement dans un dossier cd learning # Change Directory ``` ```bash= touch "nouveau fichier" ``` Alors ? ---- ## Simple ou Double quotes ? ```bash= echo je suis $USER ``` Puis ```bash= echo 'je suis $USER' ``` Ici, nous voyons que *$USER* n'est pas remplacé par le *nom de l'utilisateur*. ```bash= # caractère d'échappement echo \$USER ``` Lorsque l'on utilise : - les *simples quotes*, il n'y a pas d'interprétation des variables. - le *backslash*, on échappe *le caractère* suivant. Dans ce cas, le *$* est considéré comme une chaîne de caractères. --- # Variables Locales et Environnementales ---- ## Locales - Disponibles uniquement dans le Shell courant. - Pas d'héritage ```bash= utilisateur=Sam # Attention pas d'espaces avant et après le = !!!! echo $utilisateur $ Sam unset utilisateur # Suppression de la variable echo $utilisateur ``` ---- ## Environnementales / Externes - Disponibles dans tous les Shell et dans tous les subprocesses - Passer des données de configuration aux commandes - S'écrivent en lettres capitales (PATH, DATE, USER, etc.) ```bash= utilisateur=Sam export utilisateur echo $utilisateur # sur la même ligne export utilisateur=Sam ``` --- # Les commandes de Base Ouvrir un terminal : sur le bureau -> cliquez droit -> ouvrir terminale #### Passer en Super Utilisateur (root) ```bash= sudo su ``` #### Sortir du Super Utilisateur (root) ```bash= exit ``` #### Changer d'utilisateur ```bash= su username # actuellement nous n'avons pas d'autres utilisateurs. # Nous verrons pour en créer un par la suite. ``` --- # Obtenir de l'aide ```bash= cat --help ``` ```bash= man cat ``` ```bash= info cat ``` Pour quitter, *info* et *man*, il faut appyer sur la touche *q* du clavier. ---- ## Man (manual) ```bash= man cat ``` Clavier : - *G* : aller à la fin - *g* : revenir au début - *espace* : de page en page - *q* : quitter Rechercher les occurences du mot "word" dans toutes les pages du manuel ```bash= man -k word ``` --- # Aller plus loin --- ## Introduction à la compression Réduire la quantité d'espace qu'un ensemble de données consomme sur l'ordinateur. 2 catégories : - *Lossless* : possibilité de revenir en arrière et de récupérer les données compressées - *Lossy* : Impossible de revenir en arrière et de récupérer les données compressées - Images, vidéos, audios (diminution de la qualité non perceptible) Il existe pleins d'outils de compression sur linux : - *Lossless* : bzip2, xz, gzip ---- ### Archivage des fichiers <div style="display: flex; justify-align: center; align-items: center; width: 100%;"> <div> ![](https://i.imgur.com/prThtKg.png =550x) </div> <div> ![](https://i.imgur.com/kM2QBzB.png =300x) </div> </div> #### Zip fonctionne aussi avec les commandes *zip* et *unzip* (pas dispo par défaut) ---- ### Exercice - Compression ```bash= # Créons 4 fichiers dans un dossier $HOME/learning/archivage/exercice cd # je reviens à la racine mkdir -p learning/archivage/exercice cd /learning/archivage/exercice pwd $ /home/sam/learning/archivage/exercice touch monfichier1 nano monfichier1 # On va copier du lorem à l'intérieur cp monfichier1 monfichier2 cp monfichier1 monfichier3 cp monfichier1 monfichier4 bzip2 monfichier2 ls gzip monfichier3 ls xz monfichier4 ls -lh ``` ---- ### Exercice - Décompression ```bash= bunzip2 monfichier2.bz2 ls gunzip monfichier3.gz ls unxz monfichier4.xz ls gzip -1 monfichier2 gzip -9 monfichier3 ls # quel est le fichier le plus compressé ? zcat monfichier2 # lire du contenu d'un fichier compressé ``` ---- ### Exercice - Archivage Les fichiers créés à partir de la commande *tar* sont appelés des **tarballs**. ```bash= pwd $ /home/sam/learning/archivage/exercice cd $HOME/learning/archivage tar -cf montarball.tar exercice # j'utilise les chemins relatifs tar -tf montarball.tar # affichage des fichiers à l'intérieur de mon tarball # On peut omettre le - de tf ou cf car toujours obligé de mettre des options tar -xf montarball.tar # extraction de tous les fichiers tar -xf montarball.tar monfichier.gz ``` ---- ### Exercice - Archivage / Compression / Décompression ```bash= tar -czf gzip.tar.gz monfichier # archivage puis compression avec gzip tar -cjf gzip.tar.bz2 monfichier # archivage puis compression avec bzip2 tar -cJf gzip.tar.xz monfichier # archivage puis compression avec xz tar -tf montarball.tar # affichage des fichiers tar -uf montarball.tar monfichier # ajout du fichier "monfichier" dans montarball.tar tar -xzf gzip.tar.gz # décompression du gzip tar -xjf gzip.tar.bz2 # décompression du bzip2 tar -xJf gzip.tar.xz # décompression du xz ``` ---- ### Exercice - Zip / Unzip ```bash= # Installation sudo apt update && sudo apt install zip # Reprenons nos fichiers monfichier$ zip zipfile.zip monfichier1 monfichier2 monfichier3 monfichier4 ls mkdir decompress mv zipfile.zip decompress cd decompress unzip zipfile.zip ls ``` ---- ### Résumé Les systèmes Linux possèdent plusieurs outils de compression et d'archivage : *tar* : l’outil d’archivage le plus utilisé *zip* : outil de création d’archive compressée *unzip* : outil de décompression d’archive zip ---- La commande tar possède de très nombreuses options dont seulement quelques-unes sont à retenir : - *x* : extraction - *c* : création - *t* : visualisation - *u* : ajouter et remplacement de fichier - *v* : afficher les différentes étapes lors de la création d’archive ---- Les outils de compression et de décompression parmi les plus utilisés sont les suivants : *gzip* et *gunzip* pour les archives de type *.tar.gz* ou *.tgz* *bzip2* et *bunzip2* pour les archives de type *bz2* *xz* et *unxz* pour les archives de type *xz* --- # Résumé de commandes | Commande | Description | | --------:|:-------------------------------------------------------------------------------------- | | apropos | Permet de rechercher des pages de manuel par mot-clé. Exemple : % apropos permissions, | | whatis | Affiche la description des pages de manuels. Exemple : % whatis chown | | man | Permet de conslter une page de manuel | | vimtutor | Manuel complet de vim | | ls | Lister un répertoire. | | pwd | Où suis-je ? (print working directory) | | cd | Aller dans un répertoire. (change directory) | | cat | Afficher le contenu d’un fichier. | ---- | Commande | Description | | ------------------:|:---------------------------------------------------------------------------------------- | | grep | Afficher uniquement les lignes d’un fichier qui contiennent une expression particulière. | | less, more et most | Afficher un fichier avec pagination. | | cp | Copier un fichier/répertoire. | | mv | Déplacer un fichier/répertoire. | | vi, vim, nano | Éditer un fichier. | | mkdir | Créer un répertoire. | | rm | Supprimer un fichier. | | rmdir | Supprimer un dossier | | ln | Créer un lien vers un fichier. | | chmod | Changer les droits d’un fichier. | ---- | Commande | Description | | ------------:|:-------------------------------------------------------------------- | | chown | Changer le propriétaire d’un fichier. | | chgrp | Changer le groupe d’un fichier. | | su | Changer d’utilisateur (switch user). | | w | Afficher ce que font les utilisateurs du système. | | tar | Compresse/décompresse les archives aux formats tar, tar.gz, tar.bz2. | | zip, unzip | Compresse/décompresse les archives aux format zip. | | find, locate | Trouver un fichier. | | head | Afficher le début d’un fichier. | | tail | Afficher la fin d’un fichier. | ---- | Commande | Description | | ----------:|:------------------------------------------------- | | mount | Monter (rendre accessible) un système de fichier. | | ssh | Obtenir un terminal distant (secure shell). | | scp | Copier des fichiers à distance(secure copy). | | tail | Imprimer les derniers éléments d'une entrée | | wget, curl | Télécharger un fichier. | --- ## **Pipelines (`|`)** Les **pipelines** permettent de rediriger la sortie d'une commande vers l'entrée d'une autre. C'est un outil puissant pour enchaîner des commandes. ### Exemples : 1. **Compter le nombre de fichiers dans un répertoire** : ```bash ls | wc -l ``` 2. **Filtrer les processus en cours** : ```bash ps aux | grep "nginx" ``` 3. **Trier et afficher les lignes uniques** : ```bash cat fichier.txt | sort | uniq ``` --- # Encore beaucoup de choses existent 🤯 --- ## **Commandes avancées de manipulation de texte** 1. **`tr`** : Translittérer ou supprimer des caractères. - Exemples : ```bash echo "hello" | tr 'a-z' 'A-Z' # Convertit en majuscules echo "hello123" | tr -d '0-9' # Supprime les chiffres ``` 2. **`cut`** : Extraire des colonnes ou des champs d'un fichier. - Exemples : ```bash echo "un:deux:trois" | cut -d ':' -f 2 # Extrait "deux" ``` ---- 3. **`awk`** : Traiter des fichiers texte ligne par ligne. - Exemples : ```bash awk '{print $1}' fichier.txt # Affiche la première colonne awk '/motif/ {print $0}' fichier.txt # Affiche les lignes contenant "motif" ``` 4. **`sed`** : Éditer des flux de texte (remplacement, suppression, etc.). - Exemples : ```bash sed 's/foo/bar/' fichier.txt # Remplace "foo" par "bar" sed '/pattern/d' fichier.txt # Supprime les lignes contenant "pattern" ``` --- ## **Substitutions de commandes** Les **substitutions de commandes** permettent d'exécuter une commande et d'utiliser sa sortie comme argument pour une autre commande. ### Syntaxe : - **`$(commande)`** ou **`` `commande` ``** (obsolète). ### Exemples : 1. **Utiliser la sortie d'une commande dans une autre** : ```bash echo "Aujourd'hui, nous sommes le $(date)" ``` 2. **Compter le nombre de fichiers dans un répertoire** : ```bash echo "Il y a $(ls | wc -l) fichiers dans ce répertoire." ``` --- ## **Expansions** ### 1. **Arithmetic Expansion (`$((...))`)** : Permet d'effectuer des calculs arithmétiques. - Exemple : ```bash echo $((5 + 3 * 2)) # Affiche 11 ``` ### 2. **Filename Expansion (Globbing)** : Permet d'utiliser des motifs pour sélectionner des fichiers. - Exemples : ```bash ls *.txt # Liste tous les fichiers .txt ls fichier{1..5}.txt # Liste fichier1.txt à fichier5.txt ``` --- ### 3. **Brace Expansion (`{...}`)** : Génère des combinaisons de chaînes. - Exemples : ```bash echo {A,B,C}.txt # Affiche A.txt B.txt C.txt mkdir -p dossier/{sous1,sous2} # Crée dossier/sous1 et dossier/sous2 ``` --- ## **Liens symboliques et physiques (`ln`)** 1. **Liens symboliques (symlinks)** : - Crée un pointeur vers un fichier ou un répertoire. - Exemple : ```bash ln -s /chemin/vers/fichier lien_symbolique ``` 2. **Liens physiques (hard links)** : - Crée une copie directe d'un fichier (même inode). - Exemple : ```bash ln fichier.txt lien_physique ``` --- ## **Redirections avancées** 1. **Rediriger la sortie standard et les erreurs** : - Exemple : ```bash commande > fichier.txt 2>&1 # Redirige tout vers fichier.txt ``` 2. **Rediriger vers `/dev/null`** : - Exemple : ```bash commande > /dev/null 2>&1 # Ignore toute sortie ``` 3. **Rediriger vers un processus** : - Exemple : ```bash commande1 | commande2 # Redirige la sortie de commande1 vers commande2 ``` --- ## **Gestion des processus en arrière-plan** 1. **Lancer un processus en arrière-plan** : - Exemple : ```bash sleep 60 & ``` 2. **Ramener un processus au premier plan** : - Exemple : ```bash fg %1 # Ramène le processus avec l'ID 1 ``` 3. **Suspendre un processus** : - Exemple : ```bash Ctrl + Z # Suspend le processus en cours ``` --- ## **Commandes utiles pour les développeurs** 1. **`curl`** : Tester des API ou télécharger des fichiers. - Exemples : ```bash curl https://api.github.com # Tester une API curl -O https://example.com/fichier.txt # Télécharger un fichier ``` 2. **`jq`** : Manipuler des fichiers JSON. - Exemple : ```bash echo '{"name": "John", "age": 30}' | jq '.name' # Affiche "John" ``` ---- 3. **`tmux`** : Gestion de sessions terminal. - Exemples : ```bash tmux new -s session1 # Créer une nouvelle session tmux attach -t session1 # Rejoindre une session existante ``` 4. **`rsync`** : Synchronisation de fichiers. - Exemple : ```bash rsync -avz /source/ /destination/ # Synchroniser des fichiers ``` --- ## **Astuces pour les développeurs** 1. **Utiliser `&&` pour enchaîner des commandes** : - Exemple : ```bash make && make install # Exécute `make install` seulement si `make` réussit ``` 2. **Utiliser `||` pour gérer les erreurs** : - Exemple : ```bash commande1 || commande2 # Exécute `commande2` si `commande1` échoue ``` 3. **Utiliser `xargs` pour traiter des listes** : - Exemple : ```bash ls *.txt | xargs rm # Supprime tous les fichiers .txt ``` ---- 4. **Utiliser `tee` pour rediriger et afficher** : - Exemple : ```bash echo "test" | tee fichier.txt # Écrit dans fichier.txt et affiche à l'écran ``` 5. **Utiliser `watch` pour surveiller des commandes** : - Exemple : ```bash watch -n 1 "ls -l" # Affiche `ls -l` toutes les secondes ``` --- ## **Conclusion** Ces commandes et astuces avancées sont essentielles pour les développeurs travaillant sur Linux. Elles permettent d'automatiser des tâches, de manipuler des données efficacement, et de gérer des processus complexes. En maîtrisant ces outils, vous gagnerez en productivité et en efficacité dans votre travail quotidien. --- # Gestion des processus sous Linux --- ## Introduction aux processus Un **processus** est une instance d'un programme en cours d'exécution. Chaque processus a un identifiant unique appelé **PID** (Process ID). Sous Linux, il existe plusieurs commandes pour surveiller, gérer et interagir avec les processus. --- ## **Commandes de base pour gérer les processus** ### 1. **`ps`** : Afficher les processus en cours La commande `ps` (Process Status) permet de lister les processus en cours d'exécution. #### Options courantes : - **`ps aux`** : Affiche tous les processus avec des détails complets. ```bash ps aux ``` - **`USER`** : Propriétaire du processus. - **`PID`** : Identifiant du processus. - **`%CPU`** : Utilisation du CPU. - **`%MEM`** : Utilisation de la mémoire. - **`COMMAND`** : Commande lancée. - **`ps -ef`** : Affiche les processus avec des informations supplémentaires. ```bash ps -ef ``` --- - **`ps -e`** : Affiche tous les processus. ```bash ps -e ``` - **`ps -u utilisateur`** : Affiche les processus d'un utilisateur spécifique. ```bash ps -u root ``` --- ### 2. **`top`** : Surveiller les processus en temps réel La commande `top` affiche les processus en temps réel, avec des informations sur l'utilisation du CPU, de la mémoire, et plus encore. #### Utilisation : ```bash top ``` #### Commandes dans `top` : - **`k`** : Tuer un processus (saisir le PID). - **`q`** : Quitter `top`. - **`P`** : Trier par utilisation du CPU. - **`M`** : Trier par utilisation de la mémoire. - **`h`** : Afficher l'aide. #### Exemple de sortie : ``` PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 root 20 0 12345 6789 1234 R 50.0 2.0 0:10.00 process_name ``` --- ### 3. **`htop`** : Version améliorée de `top` `htop` est une version interactive et plus conviviale de `top`. Il permet de naviguer et de gérer les processus avec des raccourcis clavier. #### Installation : ```bash sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL ``` #### Utilisation : ```bash htop ``` #### Commandes dans `htop` : - **`F9`** : Tuer un processus. - **`F6`** : Trier les processus. - **`F3`** : Rechercher un processus. - **`F10`** : Quitter `htop`. --- ### 4. **`kill`** : Terminer un processus La commande `kill` permet d'envoyer un signal à un processus pour le terminer ou le suspendre. #### Syntaxe : ```bash kill [options] PID ``` #### Signaux courants : - **`SIGTERM` (15)** : Termine proprement le processus (par défaut). ```bash kill 1234 ``` - **`SIGKILL` (9)** : Force la terminaison du processus. ```bash kill -9 1234 ``` #### Exemple : ```bash kill 1234 # Termine le processus avec le PID 1234 kill -9 1234 # Force la terminaison du processus ``` --- ### 5. **`pkill`** : Terminer un processus par son nom `pkill` permet de terminer un processus en utilisant son nom plutôt que son PID. #### Exemples : ```bash pkill firefox # Termine tous les processus Firefox pkill -u utilisateur # Termine tous les processus d'un utilisateur ``` --- ### 6. **`killall`** : Terminer tous les processus d'un nom donné `killall` est similaire à `pkill`, mais il termine tous les processus correspondant au nom donné. #### Exemple : ```bash killall firefox # Termine tous les processus Firefox ``` --- ### 7. **`nice` et `renice`** : Gérer la priorité des processus - **`nice`** : Lance un processus avec une priorité spécifique. - La priorité va de **-20** (la plus haute) à **19** (la plus basse). - Exemple : ```bash nice -n 10 commande # Lance la commande avec une priorité de 10 ``` - **`renice`** : Modifie la priorité d'un processus en cours d'exécution. - Exemple : ```bash renice 5 -p 1234 # Change la priorité du processus 1234 à 5 ``` --- ### 8. **`bg` et `fg`** : Gérer les processus en arrière-plan et premier plan - **`bg`** : Met un processus en arrière-plan. - Exemple : ```bash bg # Met le dernier processus suspendu en arrière-plan ``` - **`fg`** : Ramène un processus au premier plan. - Exemple : ```bash fg # Ramène le dernier processus en arrière-plan au premier plan ``` --- ### 9. **`jobs`** : Lister les processus en arrière-plan La commande `jobs` affiche les processus en arrière-plan associés à la session courante. #### Exemple : ```bash jobs # Sortie : [1] + running sleep 100 ``` --- ### 10. **`nohup`** : Exécuter un processus qui continue après la déconnexion `nohup` permet de lancer un processus qui continue à s'exécuter même après la déconnexion de l'utilisateur. #### Exemple : ```bash nohup long_running_command & ``` --- ## **Surveillance avancée des processus** ### 1. **`lsof`** : Lister les fichiers ouverts par les processus `lsof` (List Open Files) affiche les fichiers ouverts par les processus. #### Exemples : ```bash lsof # Liste tous les fichiers ouverts lsof -u utilisateur # Liste les fichiers ouverts par un utilisateur lsof -p 1234 # Liste les fichiers ouverts par un processus spécifique ``` --- ### 2. **`strace`** : Surveiller les appels système d'un processus `strace` permet de suivre les appels système et les signaux d'un processus. #### Exemple : ```bash strace -p 1234 # Surveille les appels système du processus 1234 ``` --- ### 3. **`vmstat`** : Afficher les statistiques système `vmstat` affiche des informations sur la mémoire, les processus, les E/S, et plus encore. #### Exemple : ```bash vmstat 1 # Affiche les statistiques toutes les secondes ``` --- ### 4. **`iotop`** : Surveiller les E/S des processus `iotop` affiche les processus utilisant le plus d'E/S (entrées/sorties). #### Installation : ```bash sudo apt install iotop # Debian/Ubuntu sudo yum install iotop # CentOS/RHEL ``` #### Utilisation : ```bash iotop ``` --- ## **Conclusion** La gestion des processus est une compétence essentielle pour tout utilisateur ou développeur Linux. Avec des commandes comme `ps`, `top`, `htop`, `kill`, et d'autres, vous pouvez surveiller, contrôler et optimiser les ressources de votre système. Ces outils vous permettent de diagnostiquer des problèmes de performance, de terminer des processus bloqués, et de gérer efficacement les tâches en arrière-plan. --- # **`awk`**, **`jq`**, **`sed`** --- ## **1. `awk` : Traitement de texte avancé** `awk` est un langage de script puissant pour traiter et analyser des fichiers texte, en particulier des fichiers structurés (comme les fichiers CSV ou les logs). ### Syntaxe de base : ```bash awk 'pattern { action }' fichier.txt ``` ### Exemples : 1. **Afficher la première colonne d'un fichier** : ```bash awk '{print $1}' fichier.txt ``` 2. **Afficher les lignes contenant un motif** : ```bash awk '/motif/ {print $0}' fichier.txt ``` ---- 3. **Afficher la somme d'une colonne** : ```bash awk '{sum += $1} END {print sum}' fichier.txt ``` 4. **Utiliser un délimiteur personnalisé** : ```bash awk -F':' '{print $1}' /etc/passwd # Utilise ':' comme délimiteur ``` 5. **Filtrer et formater** : ```bash awk '$3 > 100 {print "Utilisateur:", $1, "UID:", $3}' /etc/passwd ``` --- ## **2. `jq` : Manipulation de JSON** `jq` est un outil en ligne de commande pour traiter et manipuler des données JSON. Il est très utile pour interagir avec des API ou analyser des fichiers JSON. ### Installation : ```bash sudo apt install jq # Debian/Ubuntu sudo yum install jq # CentOS/RHEL ``` ### Exemples : 1. **Afficher un champ JSON** : ```bash echo '{"name": "John", "age": 30}' | jq '.name' # Sortie : "John" ``` 2. **Afficher un tableau JSON** : ```bash echo '[{"name": "John"}, {"name": "Jane"}]' | jq '.[].name' # Sortie : "John" "Jane" ``` ---- 3. **Filtrer un tableau JSON** : ```bash echo '[{"name": "John", "age": 30}, {"name": "Jane", "age": 25}]' | jq '.[] | select(.age > 28)' # Sortie : {"name": "John", "age": 30} ``` 4. **Formater la sortie JSON** : ```bash echo '{"name": "John", "age": 30}' | jq '.name, .age' # Sortie : "John" 30 ``` 5. **Manipuler des fichiers JSON** : ```bash jq '.users[] | select(.active == true)' fichier.json ``` --- ## **3. `sed` : Édition de flux de texte** `sed` (Stream Editor) est un outil puissant pour éditer des flux de texte en utilisant des commandes simples ou des expressions régulières (regex). ### Syntaxe de base : ```bash sed 's/motif/remplacement/' fichier.txt ``` ### Exemples : 1. **Remplacer un motif** : ```bash echo "hello world" | sed 's/world/Linux/' # Sortie : hello Linux ``` 2. **Supprimer des lignes** : ```bash sed '/motif/d' fichier.txt # Supprime les lignes contenant "motif" ``` ---- 3. **Ajouter du texte avant ou après une ligne** : ```bash sed '3i\Nouvelle ligne' fichier.txt # Insère une ligne avant la ligne 3 sed '3a\Nouvelle ligne' fichier.txt # Ajoute une ligne après la ligne 3 ``` 4. **Modifier uniquement les lignes correspondant à un motif** : ```bash sed '/motif/s/foo/bar/' fichier.txt # Remplace "foo" par "bar" sur les lignes contenant "motif" ``` 5. **Utiliser des délimiteurs personnalisés** : ```bash echo "hello/world" | sed 's|/| |' # Sortie : hello world ``` --- ## **4. Expressions régulières (regex) avec `sed`** Les **expressions régulières** sont des motifs utilisés pour rechercher et manipuler du texte. Voici quelques exemples de regex avec `sed` : ### Caractères spéciaux courants : - **`.`** : Correspond à n'importe quel caractère. - **`*`** : Correspond à 0 ou plusieurs occurrences du caractère précédent. - **`^`** : Correspond au début d'une ligne. - **`$`** : Correspond à la fin d'une ligne. - **`[abc]`** : Correspond à l'un des caractères `a`, `b`, ou `c`. - **`[^abc]`** : Correspond à tout caractère sauf `a`, `b`, ou `c`. - **`\d`** : Correspond à un chiffre (nécessite `-E` pour activer les regex étendues). :::success Super outils en ligne [regex101](https://regex101.com/) ::: ---- ### Exemples avec `sed` : 1. **Remplacer un motif avec regex** : ```bash echo "123-456-7890" | sed -E 's/[0-9]{3}/XXX/' # Sortie : XXX-456-7890 ``` 2. **Supprimer les lignes vides** : ```bash sed '/^$/d' fichier.txt ``` 3. **Remplacer toutes les occurrences d'un motif** : ```bash echo "foo foo foo" | sed 's/foo/bar/g' # Sortie : bar bar bar ``` ---- 4. **Extraire des lignes correspondant à un motif** : ```bash sed -n '/motif/p' fichier.txt ``` 5. **Utiliser des groupes de capture** : ```bash echo "John Doe" | sed -E 's/(.*) (.*)/\2, \1/' # Sortie : Doe, John ``` 6. **Remplacer uniquement à une position spécifique** : ```bash echo "hello world" | sed 's/o/O/2' # Sortie : hello wOrld (remplace la deuxième occurrence de "o") ``` --- ## **5. Combinaison d'outils** Ces outils peuvent être combinés pour des tâches complexes. Voici quelques exemples : 1. **Extraire et formater des données** : ```bash cat fichier.log | awk '/ERROR/ {print $1, $2}' | sed 's/:/ /' ``` 2. **Manipuler des données JSON et les filtrer** : ```bash curl https://api.example.com/data | jq '.items[] | select(.status == "active")' | awk '{print $1}' ``` 3. **Remplacer des motifs dans un fichier JSON** : ```bash cat fichier.json | jq '.' | sed 's/foo/bar/g' ``` --- ## **Conclusion** - **`awk`** est idéal pour traiter des fichiers structurés et effectuer des calculs. - **`jq`** est indispensable pour manipuler des données JSON. - **`sed`** est un outil puissant pour éditer du texte en utilisant des expressions régulières. En maîtrisant ces outils, vous pouvez automatiser des tâches complexes, analyser des logs, manipuler des données, et bien plus encore. Les expressions régulières ajoutent une couche de flexibilité pour des recherches et remplacements avancés. --- # WSL (Windows Subsystem for Linux) --- ## **Activation de WSL (Windows Subsystem for Linux)** ### **Étape 1 : Vérifier les prérequis** - **Système d'exploitation** : Windows 10 (version 2004 ou ultérieure) ou Windows 11. - **Architecture** : Processeur 64 bits avec support de la virtualisation activé dans le BIOS. --- ### **Étape 2 : Activer WSL** #### **Méthode 1 : Via l'interface graphique** 1. Ouvrez le **Panneau de configuration**. 2. Allez dans **Programmes > Activer ou désactiver des fonctionnalités Windows**. 3. Cochez les cases suivantes : - **Sous-système Windows pour Linux** - **Plateforme de machine virtuelle** (nécessaire pour WSL 2) 4. Cliquez sur **OK** et redémarrez votre ordinateur. #### **Méthode 2 : Via PowerShell (recommandé)** 1. Ouvrez **PowerShell en mode administrateur**. 2. Exécutez la commande suivante pour activer WSL et installer la dernière version (WSL 2) : ```bash wsl --install ``` - Cette commande active automatiquement les fonctionnalités nécessaires et installe la distribution Linux par défaut (Ubuntu). 3. **Redémarrez votre ordinateur** pour appliquer les modifications. --- ### **Étape 3 : Installer une distribution Linux** 1. **Via le Microsoft Store** : - Ouvrez le **Microsoft Store**. - Recherchez la distribution Linux de votre choix (par exemple, **Ubuntu**, **Debian**, **Kali Linux**). - Cliquez sur **Installer**. 2. **Via la ligne de commande** : - Vous pouvez installer une distribution directement depuis PowerShell avec la commande suivante : ```bash wsl --list wsl --install -d <NomDeLaDistribution> ``` - Exemple pour installer Ubuntu : ```bash wsl --install -d Ubuntu ``` --- ### **Étape 4 : Configurer WSL 2 (optionnel mais recommandé)** WSL 2 est la version la plus récente et offre de meilleures performances et une compatibilité accrue avec les applications Linux. 1. Vérifiez la version de WSL installée : ```bash wsl --list --verbose ``` - Si la version est **1**, vous pouvez la mettre à jour vers WSL 2. 2. Mettre à jour une distribution vers WSL 2 : ```bash wsl --set-version <NomDeLaDistribution> 2 ``` - Exemple pour Ubuntu : ```bash wsl --set-version Ubuntu 2 ``` 3. Définir WSL 2 comme version par défaut pour les nouvelles installations : ```bash wsl --set-default-version 2 ``` --- ## **Différences entre WSL 1 et WSL 2** | **Aspect** | **WSL 1** | **WSL 2** | |----------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------| | **Architecture** | Utilise une couche de compatibilité pour exécuter des binaires Linux. | Utilise un noyau Linux complet virtualisé via Hyper-V. | | **Performance** | Moins performant pour les opérations système (comme les appels système). | Beaucoup plus rapide, surtout pour les opérations système et les E/S. | | **Compatibilité** | Compatible avec la plupart des applications Linux. | Compatibilité presque totale avec les applications Linux. | | **Intégration** | Meilleure intégration avec les fichiers Windows. | Intégration légèrement moins fluide avec les fichiers Windows. | --- Voici un tableau comparatif détaillé entre **WSL (Windows Subsystem for Linux)** et les **Machines Virtuelles (VM)**, suivi d'une explication et d'une image illustrative. --- ## **Tableau comparatif : WSL vs Machines Virtuelles** | **Aspect** | **WSL** | **Machines Virtuelles (VM)** | |--------------------------|-------------------------------------------------------------------------|--------------------------------------------------------------------------| | **Performance** | Léger et rapide, utilise moins de ressources système. | Plus lent en raison de la virtualisation complète. | | **Intégration avec Windows** | Intégration native, accès direct aux fichiers Windows via `/mnt/c/`. | Nécessite des dossiers partagés ou des transferts manuels. | | **Installation** | Simple, en quelques commandes. | Complexe, nécessite un logiciel de virtualisation (VMware, VirtualBox). | | **Ressources** | Utilisation optimisée des ressources (mémoire, CPU). | Consommation élevée de ressources (mémoire, CPU, espace disque). | | **Isolation** | Moins isolé, partage le noyau Windows. | Isolation complète, environnement sécurisé et indépendant. | ---- | **Aspect** | **WSL** | **Machines Virtuelles (VM)** | |--------------------------|-------------------------------------------------------------------------|--------------------------------------------------------------------------| | **Support des OS** | Seulement Linux (WSL 1 : noyau Windows, WSL 2 : noyau Linux). | Supporte tous les systèmes d'exploitation (Linux, Windows, macOS, etc.). | | **Interface graphique** | Support limité (WSLg permet des applications graphiques simples). | Support complet des interfaces graphiques (GNOME, KDE, etc.). | | **Cas d'usage** | Développement, scripts, outils en ligne de commande. | Environnements complets, tests, déploiement multi-OS. | | **Sécurité** | Moins sécurisé, intégré à Windows. | Très sécurisé, isolation totale entre l'hôte et le système invité. | | **Démarrage** | Démarrer WSL est presque instantané. | Le démarrage d'une VM peut prendre plusieurs secondes ou minutes. | --- ## **Explication des différences** ### **1. Performance** - **WSL** : WSL 2 utilise un noyau Linux léger virtualisé via Hyper-V, ce qui permet une meilleure utilisation des ressources système. Il est idéal pour les tâches de développement et les scripts. - **VM** : Les machines virtuelles nécessitent une virtualisation complète, ce qui entraîne une surcharge de performance, surtout si plusieurs VM sont exécutées simultanément . ### **2. Intégration avec Windows** - **WSL** : Les fichiers Windows sont accessibles directement depuis Linux via `/mnt/c/`, ce qui facilite le partage de données entre les deux systèmes. - **VM** : Les fichiers doivent être partagés via des dossiers partagés ou des transferts manuels, ce qui est moins pratique . ---- ### **3. Installation et gestion** - **WSL** : L'installation est simple et rapide, avec des commandes comme `wsl --install`. Aucune configuration complexe n'est nécessaire. - **VM** : Nécessite l'installation d'un logiciel de virtualisation (comme VMware ou VirtualBox), ainsi que la création et la configuration d'une machine virtuelle . ### **4. Cas d'usage** - **WSL** : Idéal pour les développeurs qui ont besoin d'exécuter des outils Linux (comme Bash, Python, Docker) directement sur Windows. - **VM** : Convient mieux pour les scénarios nécessitant une isolation complète ou l'exécution de plusieurs systèmes d'exploitation simultanément . ### **5. Interface graphique** - **WSL** : WSLg permet d'exécuter des applications graphiques Linux, mais le support est limité. - **VM** : Offre un support complet des interfaces graphiques, ce qui est idéal pour tester des environnements de bureau Linux . --- ## **Conclusion** - **WSL** est une solution légère et intégrée pour exécuter des outils Linux sur Windows, idéale pour les développeurs et les utilisateurs occasionnels. - **Les machines virtuelles** offrent une isolation complète et sont mieux adaptées pour des scénarios nécessitant plusieurs systèmes d'exploitation ou des environnements graphiques complets. Choisissez **WSL** si vous avez besoin d'une solution rapide et intégrée pour le développement. Optez pour une **machine virtuelle** si vous avez besoin d'un environnement complet et isolé.
{"metaMigratedAt":"2023-06-16T14:00:48.074Z","metaMigratedFrom":"YAML","title":"Linux VM / Docker / WSL","breaks":false,"description":"Formation Linux VM / Docker / WSL","lang":"fr-fr","robots":"noindex, nofollow","contributors":"[{\"id\":\"35198f6d-8c66-4636-8d98-b19eb0b4c48c\",\"add\":175856,\"del\":87583}]","slideOptions":"{\"fragments\":false,\"transition\":\"fade\",\"backgroundTransition\":\"fade\",\"slideNumber\":true,\"previewLinks\":true,\"progress\":true,\"width\":1366,\"height\":768,\"overview\":true}"}
    1077 views