# Guide des commandes Linux et administration Debian

## Structure du système de fichiers Debian

### Répertoires racine du système Debian

| Répertoire | Description | Contenu principal |
|------------|-------------|-------------------|
| `/` | Racine du système | Point de montage principal |
| `/bin` | Binaires essentiels | Commandes de base (ls, cat, cp, mv, etc.) |
| `/boot` | Fichiers de démarrage | Noyau Linux, initramfs, GRUB |
| `/dev` | Périphériques | Fichiers spéciaux des périphériques |
| `/etc` | Configuration système | Fichiers de configuration globaux |
| `/home` | Répertoires utilisateurs | Dossiers personnels des utilisateurs |
| `/lib` | Bibliothèques partagées | Bibliothèques système essentielles |
| `/lib64` | Bibliothèques 64-bit | Bibliothèques pour architecture 64-bit |
| `/media` | Points de montage amovibles | CD/DVD, clés USB montés automatiquement |
| `/mnt` | Points de montage temporaires | Montages manuels temporaires |
| `/opt` | Logiciels optionnels | Applications tierces |
| `/proc` | Système de fichiers virtuel | Informations sur les processus |
| `/root` | Répertoire de l'administrateur | Dossier personnel du compte root |
| `/run` | Données d'exécution | Fichiers temporaires des services |
| `/sbin` | Binaires système | Commandes d'administration système |
| `/srv` | Données de service | Données servies par le système |
| `/sys` | Système de fichiers virtuel | Interface avec le noyau |
| `/tmp` | Fichiers temporaires | Fichiers temporaires effacés au redémarrage |
| `/usr` | Ressources utilisateur | Applications et bibliothèques utilisateur |
| `/var` | Données variables | Logs, caches, bases de données |

### Répertoires importants dans `/usr`

| Répertoire | Description |
|------------|-------------|
| `/usr/bin` | Binaires utilisateur non-essentiels |
| `/usr/lib` | Bibliothèques pour `/usr/bin` |
| `/usr/local` | Logiciels installés localement |
| `/usr/sbin` | Binaires système non-essentiels |
| `/usr/share` | Données partagées (documentation, man pages) |

### Répertoires importants dans `/var`

| Répertoire | Description |
|------------|-------------|
| `/var/log` | Fichiers journaux (logs) |
| `/var/cache` | Cache des applications |
| `/var/lib` | Données variables des applications |
| `/var/tmp` | Fichiers temporaires persistants |
| `/var/www` | Contenu web (Apache/Nginx) |

## Commandes de base Linux
### Navigation et manipulation de fichiers
#### `ls` - Lister le contenu d'un répertoire
```bash
ls                  # Liste les fichiers et dossiers du répertoire courant
ls -l               # Liste détaillée avec permissions, propriétaire, taille
ls -a               # Affiche les fichiers cachés (commençant par .)
ls -lh              # Liste détaillée avec tailles lisibles (Ko, Mo, Go)
ls /chemin/dossier  # Liste le contenu d'un dossier spécifique
```
#### `cd` - Changer de répertoire
```bash
cd /home/utilisateur   # Aller dans un répertoire spécifique
cd ..                  # Remonter d'un niveau dans l'arborescence
cd ~                  # Aller dans le répertoire personnel
cd -                  # Revenir au répertoire précédent
```
#### `pwd` - Afficher le répertoire courant
```bash
pwd                   # Affiche le chemin complet du répertoire actuel
```
#### `mkdir` - Créer un répertoire
```bash
mkdir nouveau_dossier           # Créer un dossier
mkdir -p dossier/sous_dossier   # Créer un dossier avec ses parents
```
#### `rmdir` - Supprimer un répertoire vide
```bash
rmdir dossier_vide    # Supprime uniquement un dossier sans contenu
```
#### `rm` - Supprimer des fichiers/répertoires
```bash
rm fichier.txt                # Supprimer un fichier
rm -r dossier                 # Supprimer un dossier et son contenu
rm -rf dossier                # Supprimer forcément sans confirmation
```
#### `cp` - Copier des fichiers/répertoires
```bash
cp fichier1 fichier2          # Copier un fichier
cp -r dossier1 dossier2       # Copier un dossier et son contenu
cp fichier /chemin/destination # Copier vers un autre emplacement
```
#### `mv` - Déplacer/renommer des fichiers/répertoires
```bash
mv fichier1 fichier2          # Renommer un fichier
mv fichier /nouveau/chemin     # Déplacer un fichier
mv dossier1 /nouveau/chemin    # Déplacer un dossier
```
#### `find` - Rechercher des fichiers
```bash
find /chemin -name "*.txt"     # Trouver tous les fichiers .txt - Cas sensible au majuscule et minuscule
find /chemin -iname "*.txt"     # Trouver tous les fichiers .txt - Cas insensible au majuscule et minuscule
find . -type f -size +10M      # Fichiers > 10 Mo dans le répertoire courant
find /home -user utilisateur    # Fichiers appartenant à un utilisateur
```
#### `locate` - Localiser des fichiers rapidement
```bash
locate nom_fichier             # Recherche rapide dans l'index système
sudo updatedb                  # Mettre à jour l'index de recherche
```

### Gestion des permissions

#### `chmod` - Modifier les permissions
```bash
chmod 755 fichier.txt            # Définir des permissions (rwxr-xr-x)
chmod u+x script.sh              # Ajouter droit d'exécution au propriétaire
chmod g-w fichier                # Retirer droit d'écriture au groupe
chmod +t dossier                 # Activer le sticky bit sur un dossier
chmod 1777 dossier_partage       # Sticky bit sur permissions rwxrwxrwt
```
- **Sticky bit** : Permet, sur un répertoire (comme `/tmp`), que seuls les propriétaires puissent supprimer ou renommer leurs propres fichiers, même si d'autres ont des droits d’écriture. Représenté par un `t` à la fin dans `ls -l` (`drwxrwxrwt`).

#### `chown` - Changer le propriétaire
```bash
chown utilisateur fichier.txt   # Changer le propriétaire
chown utilisateur:groupe fichier # Changer propriétaire et groupe
```
#### `chgrp` - Changer le groupe
```bash
chgrp groupe fichier.txt        # Changer le groupe d'un fichier
```

### Surveillance système

#### `ps` - Afficher les processus
```bash
ps aux                         # Liste détaillée de tous les processus
ps -ef                         # Autre format de listing
```
#### `top` - Monitorer les processus en temps réel
```bash
top                            # Monitorer l'utilisation système
```
#### `htop` - Version améliorée de top
```bash
htop                           # Interface interactive de surveillance
```
#### `df` - Afficher l'espace disque
```bash
df -h                          # Affichage lisible des espaces disques
df -T                          # Afficher les types de systèmes de fichiers
```
#### `du` - Afficher l'utilisation de l'espace
```bash
du -sh /chemin                 # Taille totale d'un dossier
du -h --max-depth=1            # Taille des sous-dossiers
```
#### `free` - Afficher la mémoire disponible
```bash
free -h                        # Mémoire utilisable en format lisible
free -m                        # Mémoire en MégaOctets
```

### Informations Système

#### `uname` - Informations sur le système
```bash
uname -a                       # Afficher toutes les informations système
uname -s                       # Nom du système d'exploitation
uname -r                       # Version du noyau
uname -m                       # Architecture machine
```

#### `lsblk` - Lister les périphériques de bloc
```bash
lsblk                          # Liste des disques et partitions# Changer les permissions
chmod 755 fichier.txt
chmod u+x fichier.sh          # Ajouter exécution pour le propriétaire
chmod g-w fichier.txt         # Retirer écriture pour le groupe
chmod o=r fichier.txt         # Définir lecture seule pour les autres

# Changer le propriétaire
chown utilisateur:groupe fichier.txt
chown utilisateur fichier.txt
chgrp groupe fichier.txt
lsblk -f                       # Afficher les systèmes de fichiers
lsblk -a                       # Afficher tous les périphériques
```

#### `fdisk` - Gestion des partitions
```bash
sudo fdisk -l                  # Lister toutes les partitions
sudo fdisk /dev/sdX            # Gérer une partition spécifique
```

#### `lscpu` - Informations sur le processeur
```bash
lscpu                          # Détails complets du processeur
lscpu | grep "CPU(s)"          # Nombre de processeurs
```

#### `lspci` - Périphériques PCI
```bash
lspci                          # Liste des périphériques PCI
lspci -v                       # Informations détaillées
```

#### `lsusb` - Périphériques USB
```bash
lsusb                          # Liste des périphériques USB
lsusb -v                       # Informations détaillées
```

#### `cat` - Afficher des informations système
```bash
cat /etc/os-release            # Informations sur la distribution
cat /proc/cpuinfo              # Détails du processeur
cat /proc/meminfo              # Informations mémoire
```

#### `hostnamectl` - Informations système
```bash
hostnamectl                    # Afficher les informations système
hostnamectl status             # Statut du système
```

## Tableau des droits des fichiers

### Représentation numérique (octale)
| Valeur | Binaire | Permissions | Description |
|--------|---------|-------------|-------------|
| 0      | 000     | ---         | Aucun droit |
| 1      | 001     | --x         | Exécution seulement |
| 2      | 010     | -w-         | Écriture seulement |
| 3      | 011     | -wx         | Écriture + Exécution |
| 4      | 100     | r--         | Lecture seulement |
| 5      | 101     | r-x         | Lecture + Exécution |
| 6      | 110     | rw-         | Lecture + Écriture |
| 7      | 111     | rwx         | Tous les droits |

### Structure des permissions
Les permissions sont définies pour trois entités :
- **Propriétaire** (user) - Premier chiffre
- **Groupe** (group) - Deuxième chiffre  
- **Autres** (others) - Troisième chiffre

### Exemples courants
| Permission | Signification |
|------------|---------------|
| 755        | rwxr-xr-x (propriétaire: tous droits, groupe/autres: lecture+exécution) |
| 644        | rw-r--r-- (propriétaire: lecture+écriture, groupe/autres: lecture seule) |
| 600        | rw------- (propriétaire: lecture+écriture, groupe/autres: aucun droit) |
| 777        | rwxrwxrwx (tous droits pour tous) |
| 700        | rwx------ (propriétaire: tous droits, groupe/autres: aucun droit) |

### Commandes de gestion des permissions
```bash
# Changer les permissions d'un fichier
chmod 755 fichier.txt

# Changer les permissions d'un dossier de façon récursive
chmod -R 755 dossier

# Ajouter une permission d'exécution pour le propriétaire sur un fichier
chmod u+x fichier.sh

# Ajouter une permission d'exécution pour le propriétaire sur un dossier de façon récursive
chmod -R u+x dossier

# Retirer l'écriture pour le groupe sur un fichier
chmod g-w fichier.txt

# Retirer l'écriture pour le groupe sur un dossier de façon récursive
chmod -R g-w dossier

# Définir la lecture seule pour les autres sur un fichier
chmod o=r fichier.txt

# Définir la lecture seule pour les autres sur un dossier de façon récursive
chmod -R o=r dossier

# Changer le propriétaire d'un fichier
chown utilisateur:groupe fichier.txt

# Changer le propriétaire d'un dossier de façon récursive
chown -R utilisateur:groupe dossier

# Changer le groupe d'un fichier
chgrp groupe fichier.txt

# Changer le groupe d'un dossier de façon récursive
chgrp -R groupe dossier
```

## Gestion des serveurs Debian

### Services système
- `systemctl start service` - Démarrer un service
- `systemctl stop service` - Arrêter un service
- `systemctl restart service` - Redémarrer un service
- `systemctl enable service` - Activer un service au démarrage
- `systemctl status service` - Vérifier le statut d'un service

### Gestion des paquets
- `apt update` - Mettre à jour la liste des paquets
- `apt upgrade` - Mettre à jour les paquets installés
- `apt install package` - Installer un paquet
- `apt remove package` - Supprimer un paquet

## Réparation d'APT

### Problèmes courants et solutions

#### 1. Réparer les paquets cassés

Corriger les dépendances cassées :
```
sudo apt --fix-broken install
```

Forcer la configuration des paquets :
```
sudo dpkg --configure -a
```

Réparer les paquets partiellement installés :
```
sudo apt-get -f install
```

#### 2. Nettoyer le cache APT

Nettoyer le cache des paquets :
```
sudo apt clean
```

```
sudo apt autoclean
```

Supprimer les paquets orphelins :
```bash
sudo apt autoremove
sudo apt autoremove --purge  # Supprimer aussi les fichiers de configuration
```

#### 3. Reconfigurer APT

Reconstruire la base de données des paquets :
```
sudo apt update --fix-missing
```

Forcer la mise à jour des sources :
```
sudo apt update && sudo apt upgrade
```

#### 4. Problèmes de verrouillage

Supprimer les verrous APT (si aucun processus APT n'est en cours) :
```
sudo rm /var/lib/dpkg/lock-frontend
```

```
sudo rm /var/lib/dpkg/lock
```

```
sudo rm /var/cache/apt/archives/lock
```

Reconfigurer dpkg :
```
sudo dpkg --configure -a
```

#### 5. Réinitialiser les sources APT

Sauvegarder les sources actuelles :
```
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
```

Éditer les sources si nécessaire :
```
sudo nano /etc/apt/sources.list
```

Mettre à jour après modification :
```
sudo apt update
```

#### 6. Vérifier l'intégrité du système

Vérifier les paquets installés :
```
sudo apt check
```

Simuler les actions sans les exécuter :
```
sudo apt -s upgrade
```

Forcer la réinstallation d'un paquet :
```
sudo apt reinstall nom_du_paquet
```

## Administration des utilisateurs

### Création et gestion des comptes utilisateurs

```bash
# Créer un compte utilisateur
sudo adduser username

# Modifier le mot de passe
sudo passwd utilisateur

# Créer un nouveau groupe
sudo addgroup nom_groupe

# Ajouter un utilisateur à un groupe
sudo adduser utilisateur groupe

# Modifier le répertoire personnel
sudo usermod -m -d /newhome/username username

# Supprimer un utilisateur
sudo deluser username

# Supprimer un utilisateur et son répertoire personnel
sudo deluser --remove-home username

# Lister les utilisateurs
cat /etc/passwd

# Lister les groupes
cat /etc/group

# Voir les groupes d'un utilisateur
groups username
```

### Gestion des identifiants système

```bash
# Modifier le GID (identifiant de groupe) d'un utilisateur
sudo groupmod -g 900 toto

# Modifier l'UID (identifiant utilisateur) et le GID simultanément
sudo usermod -u 800 -g 900 toto

# Changer le shell par défaut d'un utilisateur
sudo usermod -s /bin/bash username

# Verrouiller un compte utilisateur
sudo usermod -L username

# Déverrouiller un compte utilisateur
sudo usermod -U username
```

### Suppression de mot de passe

**Méthode sécurisée :**
```bash
# Supprimer le mot de passe d'un utilisateur
sudo passwd -d username

# Forcer le changement de mot de passe à la prochaine connexion
sudo passwd -e username
```

**Méthode manuelle (mode recovery) :**
Pour supprimer manuellement un mot de passe, démarrez en mode live et modifiez le fichier `/etc/shadow`. Localisez la ligne correspondant à l'utilisateur et supprimez les caractères situés entre les deux premiers séparateurs « `:` ».

Exemple pour l'utilisateur Michu :
```
michu:$6$68oL9D6yVVCMTVswSb.51oFHz/:17999:0:99999:7:::
```
Devient :
```
michu::17999:0:99999:7:::
```

## Connexion par tunnel SSH (équivalent VPN)

Cette méthode permet d'utiliser la connexion du serveur via un tunnel SSH.

### Tunnel SOCKS (Dynamic Port Forwarding)
```bash
# Créer un tunnel SOCKS sur le port local 8080
ssh user@serveur -p port -D 8080

# Exemple avec l'utilisateur Michu
ssh michu@158.136.345.678 -p 1234 -D 8080
```

### Autres types de tunnels SSH
```bash
# Tunnel local (Local Port Forwarding)
ssh -L 8080:localhost:80 user@serveur

# Tunnel distant (Remote Port Forwarding)
ssh -R 8080:localhost:80 user@serveur

# Tunnel avec compression
ssh -C -D 8080 user@serveur

# Tunnel en arrière-plan
ssh -f -N -D 8080 user@serveur
```

**Configuration du proxy :**
Configurez votre navigateur pour utiliser le proxy SOCKS avec l'adresse `127.0.0.1` et le port `8080`.

**Note :** L'option `-p` spécifie le port SSH s'il diffère du port par défaut (22).

## Personnalisation et automatisation

### Message d'accueil personnalisé (MOTD)
```bash
# Créer un message d'accueil personnalisé
sudo nano /etc/motd.d/01-custom
```

## Maintenance et optimisation du système

### Nettoyage APT [1]

Suppression complète du cache (supprime tous les paquets de /var/cache/apt/archives) :
```
sudo apt-get clean
```

Nettoyage intelligent (conserve les paquets ayant des équivalents dans les dépôts, supprime les versions obsolètes) :
```
sudo apt-get autoclean
```

Cette approche de nettoyage permet de récupérer de l'espace disque tout en préservant les paquets utiles pour de futures réinstallations.

## Désactivation du compte root

### Méthodes de désactivation du compte root

#### 1. Verrouiller le compte root
```
sudo passwd -l root
```

#### 2. Désactiver la connexion SSH pour root
Éditer le fichier de configuration SSH :
```
sudo nano /etc/ssh/sshd_config
```

Modifier ou ajouter la ligne :
```
PermitRootLogin no
```

Redémarrer le service SSH :
```
sudo systemctl restart ssh
```

#### 3. Désactiver le compte root avec sudo
Éditer le fichier sudoers :
```
sudo visudo
```

Ajouter la ligne pour restreindre totalement l'accès root :
```
root ALL=(ALL) NOALL
```

#### 4. Utiliser sudo à la place de root
Créer un utilisateur avec des privilèges sudo :
```
sudo adduser votreutilisateur
sudo usermod -aG sudo votreutilisateur
```

#### 5. Vérifier les restrictions
Tester la connexion root :
```
sudo -i
```

### Précautions supplémentaires

Vérifier les connexions root :
```
sudo grep root /var/log/auth.log
```

Surveiller les tentatives de connexion :
```
sudo last root
```

### Bonnes pratiques
- Utilisez toujours `sudo` pour les actions administratives
- Créez un utilisateur distinct avec des privilèges sudo
- Utilisez des mots de passe forts
- Configurez l'authentification à deux facteurs
- Mettez à jour régulièrement le système