Mirror the French docs onto the English structure

This commit is contained in:
Djeex
2026-09-05 16:55:39 +02:00
parent 86f04ed794
commit 1894ac7ead
74 changed files with 6322 additions and 1588 deletions
@@ -0,0 +1,2 @@
title: Linux pour les nuls
icon: i-lucide-terminal
@@ -0,0 +1,255 @@
---
title: Bases de la ligne de commande
description: Comprendre comment une commande Linux est construite, apprendre les commandes essentielles du terminal, ce que veulent dire leurs noms, et repartir avec un aide-mémoire.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
Un serveur n'a pas de bureau, pas d'icônes et pas de souris. Tout se passe dans un terminal, et cette fenêtre noire avec un curseur clignotant est la seule chose qui décourage les gens de s'auto-héberger. À tort : le terminal n'est qu'une conversation. Vous tapez une ligne, la machine fait exactement ça et répond. Rien de plus magique qu'une barre de recherche, sauf qu'il en fait bien plus et ne cache jamais une option derrière trois menus.
La bonne nouvelle, c'est que vous n'avez pas besoin de connaître cent commandes. Dix d'entre elles couvrent presque tout ce que vous ferez sur un serveur maison, et elles suivent toutes le même schéma. Apprenez le schéma d'abord, et chaque commande croisée ensuite devient lisible, même celles que vous n'avez jamais vues.
## Comment une commande est construite
Chaque ligne de commande, sans exception, est la même phrase : **quoi lancer**, **comment le lancer**, **sur quoi le lancer**.
```text [Anatomie d'une commande]
sudo apt install -y nano
│ │ │ │ └─ argument : ce sur quoi la commande travaille
│ │ │ └──── option : change son comportement
│ │ └──────────── sous-commande : ce que le programme doit faire
│ └──────────────── le programme que vous lancez
└───────────────────── le lancer avec les droits administrateur
```
Lue à voix haute, cette ligne dit « en tant qu'administrateur, demande au gestionnaire de paquets d'installer le paquet nano, et ne me demande pas de confirmer ». Ce sont les espaces qui séparent les morceaux, et c'est pour ça qu'un dossier nommé `Mes Sauvegardes` doit être mis entre guillemets (`cd "Mes Sauvegardes"`), sinon le shell y lit deux choses différentes.
### Les options, courtes et longues
Les options changent le comportement d'une commande. Elles existent en deux saveurs, et la plupart des commandes acceptent les deux :
- **Courtes**, un tiret et une seule lettre : `ls -a`. Elles peuvent s'empiler, donc `ls -l -a -h` s'écrit généralement `ls -lah`.
- **Longues**, deux tirets et un mot entier : `ls --all`. Plus longues à taper, mais vous saurez encore ce qu'elles font six mois plus tard, ce qui en fait le meilleur choix dans un script.
Certaines options attendent une valeur juste après elles : `ssh-keygen -t ed25519` (`-t` pour type), `rsync --exclude @eaDir`. Et la casse compte, toujours. Dans `ls`, `-r` inverse l'ordre de tri alors que `-R` descend dans les sous-dossiers. Deux choses différentes, à une lettre près.
### Les arguments et les chemins
L'argument est la cible : un fichier, un dossier, un nom de paquet, une adresse. Beaucoup de commandes en acceptent plusieurs à la fois, séparés par des espaces, et c'est ce qui rend le terminal rapide : `rm fichier1.txt fichier2.txt fichier3.txt` supprime trois fichiers d'un coup.
Quand la cible est un endroit sur le disque, vous l'écrivez sous forme de chemin, et quelques raccourcis valent la peine d'être connus :
| Chemin | Signification |
| --- | --- |
| `/` | la racine de tout le système, tout vit en dessous |
| `~` | votre propre dossier personnel, `/home/utilisateur` |
| `.` | le dossier dans lequel vous vous trouvez |
| `..` | le dossier juste au-dessus |
| `/var/log` | un chemin **absolu**, même résultat depuis n'importe où |
| `logs/aujourdhui` | un chemin **relatif**, compris depuis là où vous êtes |
Quel dossier contient quoi est un sujet à part entière, traité dans [dossiers et partitions](/general/linux/filesystem).
L'invite de commande vous dit elle-même où vous êtes : dans `utilisateur@serveex:~/docker$`, vous êtes connecté en tant qu'`utilisateur` sur la machine nommée `serveex`, dans le dossier `docker` de votre home. Ce `$` final signifie un utilisateur normal. S'il affiche un jour `#`, vous êtes root et chaque faute de frappe compte double.
### Trouver de l'aide
Deux habitudes vous rendent indépendant des tutoriels. `commande --help` affiche un résumé rapide de chaque option, et `man commande` ouvre le manuel complet (`man` pour *manual*), que vous quittez en appuyant sur :kbd{value="Q"}.
::tip{icon=""}
✨ __Astuce :__ trois réflexes clavier qui changent tout : :kbd{value="Tab"} complète le nom de fichier ou de dossier que vous avez commencé à taper, si bien que vous ne tapez presque jamais un chemin complet ; la flèche :kbd{value="Up"} rappelle vos commandes précédentes, ce qui évite de retaper une longue ligne pour un caractère ; et :kbd{value="Ctrl"} + :kbd{value="C"} arrête ce qui est en train de tourner.
::
### Enchaîner les commandes
Une fois le schéma compris, les commandes se branchent les unes aux autres :
- `&&` lance la suivante seulement si la précédente a réussi : `sudo apt update && sudo apt full-upgrade`
- `|`, le pipe, envoie la sortie d'une commande dans une autre : `ls -l | grep sauvegarde` liste le dossier, puis ne garde que les lignes contenant « sauvegarde »
- `>` écrit la sortie dans un fichier au lieu de l'écran, et `>>` l'ajoute à la fin de ce fichier : `df -h > rapport-disques.txt`
## Les commandes que vous utiliserez vraiment
La plupart des noms de commandes sont des abréviations d'une expression anglaise. Une fois que vous savez ce qu'elles signifient, elles cessent de ressembler à du bruit de clavier.
### `pwd`, print working directory
Vous dit où vous êtes. Elle ne change rien, elle répond juste à la question.
```bash [Terminal]
pwd
```
```console [Sortie]
/home/utilisateur/docker
```
### `ls`, list
Liste ce qu'il y a dans le dossier courant. Seule, elle n'affiche que les noms, elle est donc presque toujours utilisée avec des options : `-l` pour le format long avec tailles, dates et permissions, `-a` pour afficher aussi les fichiers cachés (ceux qui commencent par un point), `-h` pour des tailles en K/M/G plutôt qu'en octets bruts.
```bash [Terminal]
ls -lah
```
```console [Sortie]
total 20K
drwxr-xr-x 4 utilisateur utilisateur 4.0K Sep 5 10:12 .
drwxr-xr-x 18 utilisateur utilisateur 4.0K Sep 4 21:03 ..
-rw-r--r-- 1 utilisateur utilisateur 512 Sep 5 10:12 .env
-rw-r--r-- 1 utilisateur utilisateur 1.2K Sep 5 09:58 compose.yaml
drwxr-xr-x 3 utilisateur utilisateur 4.0K Sep 2 18:44 immich
```
La première colonne, ce sont les permissions, le `d` tout au début signifiant qu'il s'agit d'un dossier. Puis le propriétaire, la taille, la date de dernière modification, et le nom.
### `cd`, change directory
Vous déplace. Avec un chemin elle y va, avec `..` elle remonte d'un niveau, et sans rien du tout elle vous ramène chez vous.
```console [Terminal]
utilisateur@serveex:~/docker$ cd /var/log
utilisateur@serveex:/var/log$ cd ..
utilisateur@serveex:/$ cd
utilisateur@serveex:~$
```
Remarquez l'invite qui vous suit : elle montre toujours où vous vous trouvez, si bien qu'en pratique vous avez rarement besoin de `pwd`.
### `mkdir`, make directory
Crée un dossier. Plusieurs à la fois si vous les listez, et `-p` crée toute la chaîne de parents d'un coup, c'est la version que vous utiliserez vraiment.
```bash [Terminal]
mkdir sauvegardes
mkdir -p docker/immich/config
```
```console [Sortie]
```
Rien. Ce n'est pas un bug, c'est la règle : la plupart des commandes ne disent rien quand elles réussissent et ne se manifestent que si quelque chose se passe mal. Le silence est une bonne nouvelle, et `ls` confirme que le dossier est bien là.
### `cp` et `mv`, copy et move
`cp` copie, `mv` déplace. Même forme dans les deux cas : d'abord la source, puis la destination. Copier un dossier demande `-r`, pour *recursive*, puisqu'un dossier veut dire tout ce qu'il contient aussi. `mv` sert également de commande pour renommer, parce que renommer un fichier revient simplement à le déplacer vers un nouveau nom.
```bash [Terminal]
cp compose.yaml compose.yaml.bak
cp -r config/ config-backup/
mv ancien-nom.txt nouveau-nom.txt
ls
```
```console [Sortie]
compose.yaml compose.yaml.bak config config-backup nouveau-nom.txt
```
Trois commandes silencieuses, et `ls` qui montre le résultat : la copie est à côté de l'original, le dossier a été dupliqué, et `ancien-nom.txt` a disparu parce que le déplacer vers un autre nom, c'est exactement ce que veut dire renommer.
### `rm`, remove
Supprime. Il n'y a pas de corbeille, pas d'annulation, pas de fenêtre de confirmation. `-r` supprime un dossier et son contenu, `-f` force sans demander.
::warning{to="/nonsense/bash/rm-confirmation"}
`rm -rf` est la commande qui efface les homelabs. Elle ne vérifie pas, ne prévient pas, et ne s'arrête pas. Relisez le chemin deux fois avant d'appuyer sur :kbd{value="Enter"}, surtout quand la ligne commence par `sudo` et contient un `/` ou un `*`. Vous pouvez aussi vous en prémunir en enveloppant `sudo` dans une petite fonction Bash qui demande **« êtes-vous sûr ? »** avant de laisser passer un `rm`, c'est le sujet de **rm confirmation guard**.
::
### `cat` et `nano`, lire et modifier
`cat` (abréviation de *concatenate*) déverse un fichier entier à l'écran, parfait pour une config courte. Pour tout ce qui est plus long, `less` le fait défiler (nommé en clin d'œil à `more`, le pager plus ancien qu'il a remplacé), et vous en sortez avec :kbd{value="Q"}.
Pour modifier réellement un fichier, `nano` ouvre un éditeur simple : les flèches pour se déplacer, :kbd{value="Ctrl"} + :kbd{value="O"} pour enregistrer, :kbd{value="Ctrl"} + :kbd{value="X"} pour quitter.
```bash [Terminal]
cat .env
```
```properties [Sortie]
PUID=1000
PGID=1000
TZ=Europe/Paris
```
### `grep`, chercher dans les fichiers
`grep` veut dire *global regular expression print*, une façon compliquée de dire « trouve-moi ce texte ». Vous lui donnez quoi chercher et où, et il affiche chaque ligne correspondante. `-r` cherche dans tout un dossier, `-i` ignore les majuscules et minuscules, `-n` affiche les numéros de ligne.
```bash [Terminal]
grep -rin "password" /home/utilisateur/docker
```
```console [Sortie]
/home/utilisateur/docker/immich/.env:6:DB_PASSWORD=changeme
/home/utilisateur/docker/vaultwarden/compose.yaml:14: ADMIN_PASSWORD=hunter2
```
Chaque ligne indique le fichier, puis le numéro de ligne à l'intérieur, puis la ligne correspondante elle-même. Très pratique le jour où vous ne vous souvenez plus dans quelle stack se trouve un réglage.
### `sudo`, lancer en administrateur
*Substitute user do*. Un utilisateur normal ne peut pas toucher aux fichiers du système, et c'est précisément ce qui vous protège de casser la machine par accident. Préfixer une commande par `sudo` lance cette seule commande avec les droits administrateur, et demande votre mot de passe la première fois.
```bash [Terminal]
nano /etc/ssh/sshd_config
```
```console [Sortie]
Error writing /etc/ssh/sshd_config: Permission denied
```
```bash [Terminal]
sudo nano /etc/ssh/sshd_config
```
```console [Sortie]
[sudo] password for utilisateur:
```
::note
Si une commande répond `Permission denied`, c'est en général tout le problème : il lui fallait `sudo`. Résistez quand même au réflexe de mettre `sudo` partout, un fichier créé en root continuera de vous embêter ensuite parce que votre utilisateur normal n'en est plus propriétaire.
::
## Aide-mémoire
Celles qui valent la peine d'être gardées sous la main, et d'où viennent leurs noms.
| Commande | Abréviation de | Ce qu'elle fait |
| --- | --- | --- |
| `pwd` | print working directory | Affiche où vous êtes |
| `ls` | list | Liste les fichiers et les dossiers |
| `cd` | change directory | Vous déplace ailleurs |
| `mkdir` | make directory | Crée un dossier |
| `touch` | mot anglais courant | Crée un fichier vide, ou rafraîchit sa date |
| `cp` | copy | Copie un fichier ou un dossier |
| `mv` | move | Déplace ou renomme |
| `rm` | remove | Supprime, définitivement |
| `cat` | concatenate | Affiche un fichier à l'écran |
| `less` | jeu de mots sur `more` | Fait défiler un fichier long |
| `nano` | l'éditeur qui remplace Pico | Modifie un fichier |
| `grep` | global regular expression print | Cherche du texte |
| `find` | mot anglais courant | Cherche des fichiers par nom, taille ou date |
| `man` | manual | Ouvre la documentation complète d'une commande |
| `df` | disk free | Affiche l'espace libre par partition |
| `lsblk` | list block devices | Dessine l'arbre des disques et des partitions |
| `du` | disk usage | Affiche ce que pèse un dossier |
| `ps` | process status | Liste les processus en cours |
| `htop` | le `top` de Hisham | Vue en direct du CPU, de la RAM et des processus |
| `kill` | mot anglais courant | Arrête un processus par son numéro |
| `chmod` | change mode | Change les permissions d'un fichier |
| `chown` | change owner | Change le propriétaire d'un fichier |
| `sudo` | substitute user do | Lance une commande en administrateur |
| `apt` | advanced package tool | Installe, met à jour et supprime des paquets |
| `systemctl` | control systemd | Démarre, arrête et active des services |
| `ssh` | secure shell | Ouvre une session sur une machine distante |
| `scp` | secure copy | Copie des fichiers via SSH |
| `tar` | tape archive | Empaquette et dépaquette des archives |
| `wget` | web get | Télécharge un fichier depuis une URL |
| `curl` | client URL | Envoie une requête à une URL |
| `history` | mot anglais courant | Liste les commandes tapées précédemment |
::tip{icon=""}
✨ __Astuce :__ personne ne retient tout ça. Vous rechercherez les trois mêmes options pendant des semaines, puis un jour vous réaliserez que vous les tapez sans réfléchir. En attendant, `--help` et ce tableau sont parfaitement légitimes.
::
@@ -0,0 +1,59 @@
---
title: Dossiers et partitions
description: Comment le système de fichiers de Debian est organisé, ce que contient chaque dossier racine, la différence entre partitions et dossiers, et les habitudes qui gardent un serveur propre.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
Windows donne à chaque disque sa propre lettre. Linux non : il y a exactement un arbre, il commence à `/`, et tout le reste s'y accroche, y compris vos autres disques. Un deuxième disque n'est pas `D:`, il est *monté* sur un dossier de l'arbre, `/mnt/data` par exemple, et à partir de là il ressemble à n'importe quel autre dossier. Déroutant au début, très pratique ensuite, puisqu'un programme n'a jamais à savoir sur quel disque physique il écrit.
## L'arbre
Cet arbre n'a rien d'arbitraire non plus. Toutes les installations de Debian ont les mêmes dossiers aux mêmes endroits, et c'est pour ça qu'un tutoriel écrit pour le serveur de quelqu'un d'autre s'applique au vôtre.
| Dossier | Ce qu'il contient |
| --- | --- |
| `/home` | Les fichiers des utilisateurs. Le vôtre est `/home/utilisateur`, aussi écrit `~` |
| `/root` | Le dossier personnel du compte root, à ne pas confondre avec `/` |
| `/etc` | La configuration du système, uniquement des fichiers texte |
| `/var` | Les données qui grossissent : les logs dans `/var/log`, Docker dans `/var/lib/docker` |
| `/tmp` | Les fichiers temporaires, vidés à chaque redémarrage |
| `/usr` | Les programmes installés eux-mêmes, gérés par `apt` |
| `/opt` | Les logiciels installés en dehors du gestionnaire de paquets |
| `/mnt` et `/media` | Là où sont montés les disques supplémentaires, `/media` pour les amovibles |
| `/boot` | Le noyau et le chargeur de démarrage, sur une petite partition à part |
| `/dev` | Votre matériel, exposé sous forme de fichiers (`/dev/sda` est un disque) |
| `/proc` et `/sys` | L'état vivant du noyau, inventé à la volée, pas de vrais fichiers |
## Un dossier n'est pas une partition
Les partitions sont une question distincte des dossiers. Une installation minimale de Debian en crée typiquement deux, une pour `/` et une pour le swap, si bien que tous les dossiers ci-dessus sauf `/boot` vivent sur la même partition et se partagent le même espace libre. Deux commandes pour en voir la réalité : `lsblk` dessine l'arbre des disques et des partitions, `df -h` montre le taux de remplissage de chacune.
```bash [Terminal]
lsblk
```
```console [Output]
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 461.3G 0 part /
└─sda3 8:3 0 4G 0 part [SWAP]
sdb 8:16 0 3.6T 0 disk
└─sdb1 8:17 0 3.6T 0 part /mnt/data
```
## Quelques habitudes à prendre
- **Donnez un seul foyer à vos stacks Docker, et gardez-les là.** `/srv` est le dossier que la norme réserve aux données servies par la machine, ce qui en fait l'endroit le plus propre pour les fichiers compose et leurs bind mounts. [Serveex](/serveex/introduction) met tout dans `/srv/docker`, un dossier par stack. Ce qui compte, c'est de choisir un endroit et de s'y tenir, plutôt que d'en éparpiller la moitié dans votre dossier personnel.
- **Vos fichiers à vous vont dans votre home.** Les scripts dans `~/bin`, les notes, les téléchargements, tout ce qui est personnel. `/root` est le dossier du compte root, pas un endroit commode où déposer des choses.
- **Ne modifiez jamais quoi que ce soit sous `/usr` ou `/bin` à la main.** `apt` en est propriétaire, et vos changements disparaîtront à la prochaine mise à jour. Ce que vous avez le droit de configurer vit dans `/etc`.
- **Dans `/etc`, préférez un fichier additionnel plutôt que de modifier le principal.** Beaucoup de services lisent tous les `.conf` d'un dossier `quelquechose.d/` posé à côté de leur config principale, `/etc/ssh/sshd_config.d/` par exemple. Votre fichier survit alors à une mise à jour de paquet qui réécrirait l'original.
- **Montez les disques de données par UUID, pas par `/dev/sdb`.** Les lettres de périphérique sont attribuées dans l'ordre où le noyau trouve les disques, elles peuvent donc s'échanger après un redémarrage ou l'ajout d'un disque. `lsblk -f` vous donne l'UUID à mettre dans `/etc/fstab`.
- **Gardez un œil sur `/var`.** Les images Docker, les logs des conteneurs et ceux du système s'y accumulent tous, sur la même partition que le reste. `du -sh /var/lib/docker` vous dit ce que pèsent les conteneurs, `df -h` s'il faut s'inquiéter.
- **Ne créez pas vos fichiers avec `sudo` quand ce n'est pas nécessaire.** Un fichier créé en root dans votre home reste la propriété de root, et vous vous battrez avec des erreurs de permissions dessus pendant des semaines.
::note{to="/general/linux/cli-basics"}
Tout ce qui précède suppose que vous savez déjà vous déplacer dans un terminal. Si `cd`, `ls` et `sudo` ne vous parlent pas encore, commencez par les **bases de la ligne de commande**.
::
@@ -0,0 +1,261 @@
---
title: Outils CLI pratiques
description: Une poignée d'outils en ligne de commande à installer sur un serveur maison, ce que chacun remplace, et les étapes pour les installer et s'en servir.
---
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
Une installation minimale de Debian embarque le strict minimum, ce qui veut dire que les outils fournis sont ceux de 1995. Ils fonctionnent, mais lire la sortie de `df` ou chercher ce qui a rempli un disque avec `du` est inutilement pénible quand de meilleures versions existent et ne coûtent rien à installer.
Tout ce qui suit sauf le dernier vient directement des dépôts Debian, il n'y a donc aucune source tierce à qui faire confiance et `apt` les maintient à jour en même temps que le reste du système.
::note{to="/general/linux/cli-basics"}
Toutes les commandes ici se tapent dans un terminal via SSH. Si `sudo`, `apt` et `cd` ne vous parlent pas encore, commencez par les **bases de la ligne de commande**.
::
## La version courte
| Outil | Remplace | À quoi ça sert |
| --- | --- | --- |
| `btop` | `top`, `htop` | Surveiller le CPU, la RAM et les processus |
| `duf` | `df -h` | L'espace libre, en lisible |
| `ncdu` | `du -sh` | Trouver ce qui a rempli le disque |
| `tldr` | `man` | Les cinq commandes dont vous avez vraiment besoin |
| `lazydocker` | `docker ps` et compagnie | Gérer les conteneurs en SSH |
| `ufw` | `iptables` brut | Un pare-feu réellement lisible |
## La version pressée
Une seule ligne installe tous ceux qui sont empaquetés, et chaque section ci-dessous explique ce que vous venez d'obtenir.
```bash [Terminal]
sudo apt update
sudo apt install btop duf ncdu tealdeer ufw
```
## `btop`, surveiller ce que fait la machine
Le remplaçant moderne de `top` et `htop` : CPU, RAM, disques, réseau et processus sur un seul écran, avec des graphiques, des couleurs et une souris qui marche. C'est ce que vous ouvrez quand quelque chose semble lent.
::steps{level="4"}
#### L'installer
```bash [Terminal]
sudo apt install btop
```
#### Le lancer
```bash [Terminal]
sudo btop
```
![btop affichant le CPU, la mémoire, les disques, le réseau et les processus](/img/global/linux/btop.png)
Cliquez sur un processus pour le sélectionner, :kbd{value="Esc"} ouvre le menu, :kbd{value="Q"} quitte. Les touches `+` et `-` replient et déplient les panneaux si l'écran paraît chargé.
#### Terminé !
::
## `duf`, l'espace disque qui se lit comme un tableau
`df -h` affiche tous les loop devices que Docker a créés un jour et vous laisse plisser les yeux sur les colonnes. `duf` montre les mêmes informations groupées, alignées et colorées, avec une barre d'utilisation par système de fichiers.
::steps{level="4"}
#### L'installer
```bash [Terminal]
sudo apt install duf
```
#### Le lancer
```bash [Terminal]
sudo duf
```
![duf listant les systèmes de fichiers locaux, réseau et spéciaux](/img/global/linux/duf.png)
Les disques locaux, les partages réseau et les montages système sont groupés séparément. Ajoutez `--only local` pour masquer les pseudo-systèmes de fichiers que Docker laisse derrière lui.
#### Terminé !
::
## `ncdu`, trouver ce qui a mangé le disque
Quand `duf` vous dit que le disque est plein, `ncdu` vous dit pourquoi. Il parcourt un dossier, trie tout par taille réelle, et vous laisse descendre avec les flèches au lieu de lancer `du -sh *` vingt fois.
::steps{level="4"}
#### L'installer
```bash [Terminal]
sudo apt install ncdu
```
#### Le pointer sur un dossier
```bash [Terminal]
sudo ncdu /srv/docker
```
Les flèches pour se déplacer, :kbd{value="Enter"} pour ouvrir un dossier, :kbd{value="D"} pour supprimer l'élément sélectionné, :kbd{value="Q"} pour quitter. Sur un gros disque le premier scan prend un moment, il lit tout.
::warning
:kbd{value="D"} supprime immédiatement, avec une seule confirmation et sans corbeille. Lancez `ncdu` sans `sudo` quand vous ne faites que regarder, comme ça une touche tapée de travers ne peut rien toucher de ce qui appartient au système.
::
#### Terminé !
::
## `tldr`, le manuel sans les 400 lignes
`man tar` est exhaustif et illisible. `tldr tar` vous donne les cinq commandes que les gens tapent vraiment, avec une ligne d'explication chacune. Ce sont des exemples maintenus par la communauté plutôt qu'un substitut au vrai manuel, et sur Debian le client est empaqueté sous le nom `tealdeer`.
::steps{level="4"}
#### L'installer
```bash [Terminal]
sudo apt install tealdeer
```
#### Télécharger le cache des pages
```bash [Terminal]
tldr --update
```
Les exemples sont récupérés une fois et stockés en local, la commande fonctionne donc hors ligne ensuite. À relancer tous les quelques mois.
#### Lui demander quelque chose
```bash [Terminal]
tldr rsync
```
#### Terminé !
::
## `lazydocker`, gérer ses conteneurs depuis le terminal
La seule exception : il n'est pas empaqueté par Debian. C'est une interface texte complète pour Docker, conteneurs, images, volumes et logs sur un seul écran, avec des touches pour redémarrer, arrêter ou suivre les logs de n'importe quoi. Pratique quand vous êtes déjà en SSH et que vous n'avez pas envie d'ouvrir Dockge.
::steps{level="4"}
#### Télécharger la dernière version
```bash [Terminal]
curl -Lo /tmp/lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_0.25.2_Linux_x86_64.tar.gz"
```
Vérifiez le numéro de version actuel sur la [page des releases](https://github.com/jesseduffield/lazydocker/releases), et prenez `arm64` au lieu de `x86_64` si le serveur est un Raspberry Pi ou équivalent.
#### Installer le binaire
```bash [Terminal]
sudo tar -xzf /tmp/lazydocker.tar.gz -C /usr/local/bin lazydocker
rm /tmp/lazydocker.tar.gz
```
`/usr/local/bin` est le dossier prévu pour les logiciels que vous installez vous-même, et c'est pour ça qu'`apt` n'y touche jamais.
#### Vérifier qu'il est bien là
```bash [Terminal]
lazydocker --version
```
#### Le lancer
```bash [Terminal]
sudo lazydocker
```
![lazydocker affichant les services, conteneurs, images, volumes et la config d'un conteneur](/img/global/linux/lazydocker.png)
Il a besoin d'accéder au socket Docker, d'où le `sudo` à moins que votre utilisateur soit dans le groupe `docker`. Les touches à connaître :
| Touche | Ce qu'elle fait |
| --- | --- |
| `1` à `6` | Aller à un panneau : projets, services, conteneurs, images, volumes, réseaux |
| Flèches | Se déplacer dans le panneau, la partie droite suit la sélection |
| :kbd{value="Enter"} | Passer sur le panneau principal à droite, :kbd{value="Esc"} revient |
| `x` | Ouvrir le menu de tout ce que vous pouvez faire avec la sélection |
| `m` | Suivre les logs |
| `s` / `r` / `p` | Arrêter, redémarrer, mettre en pause le conteneur sélectionné |
| `E` | Ouvrir un shell dans le conteneur |
| `d` | Le supprimer |
| `b` | Commandes groupées, dont le nettoyage des images et des volumes |
| `/` | Filtrer la liste |
| `+` et `_` | Agrandir ou réduire les panneaux |
| `q` | Quitter |
La casse compte : `E` ouvre un shell dans le conteneur, `e` masque ceux qui sont arrêtés.
La [liste complète](https://github.com/jesseduffield/lazydocker/blob/master/docs/keybindings/Keybindings_en.md) se trouve dans la documentation du projet.
::note
Être en dehors d'`apt` veut aussi dire qu'il ne sera pas mis à jour par `apt full-upgrade`. Refaites ces étapes quand vous voudrez une version plus récente.
::
#### Terminé !
::
## `ufw`, un pare-feu réellement lisible
Le pare-feu de Debian (`iptables`/`nftables` sous le capot) est puissant et illisible tel quel. `ufw`, *uncomplicated firewall*, est une fine couche par-dessus qui le transforme en règles courtes et compréhensibles : tout bloquer par défaut et n'ouvrir que ce que vous exposez réellement.
::steps{level="4"}
#### L'installer
```bash [Terminal]
sudo apt install ufw
```
#### Définir la politique par défaut
```bash [Terminal]
sudo ufw default deny incoming
sudo ufw default allow outgoing
```
Rien n'entre à moins qu'une règle ne l'autorise, tout ce que le serveur initie lui-même sort toujours normalement.
#### Autoriser ce dont vous avez réellement besoin
```bash [Terminal]
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
```
`OpenSSH` est un profil intégré qui correspond au port SSH, pas besoin de se souvenir duquel il s'agit. Ajoutez un `allow` par port que vous exposez, [SWAG](/serveex/core/swag) sur le `443` par exemple.
::warning
Autorisez SSH **avant** d'activer le pare-feu, à l'étape suivante. Activez-le d'abord et la connexion depuis laquelle vous tapez est coupée, sans plus aucun écran branché pour réparer.
::
#### L'activer
```bash [Terminal]
sudo ufw enable
```
#### Vérifier les règles
```bash [Terminal]
sudo ufw status verbose
```
```console [Sortie]
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
```
#### Terminé !
::