Aller au contenu principal

Linux — Les fondamentaux

Base de connaissances : commandes essentielles, gestion système, réseau et sauvegarde sous Linux (Debian/Ubuntu).


Le prompt du shell

Le prompt indique le niveau de privilège de l'utilisateur courant :

SymboleSignification
$Shell utilisateur non privilégié
#Shell root (privilégié)

Personnaliser le prompt (variable PS1)

Le prompt est défini par la variable d'environnement PS1. On peut y insérer des caractères spéciaux :

SéquenceDescription
\dDate (ex. Mon Feb 6)
\D{%Y-%m-%d}Date au format personnalisé (YYYY-MM-DD)
\HNom d'hôte complet (FQDN)
\hNom d'hôte court (jusqu'au premier .)
\jNombre de jobs gérés par le shell
\nNouvelle ligne
\rRetour chariot
\sNom du shell
\tHeure au format 24h (HH:MM:SS)
\THeure au format 12h (HH:MM:SS)
\@Heure courante (format AM/PM)
\uUtilisateur courant
\wChemin complet du répertoire courant
\WNom de base du répertoire courant

Exemple :

export PS1="\u@\h:\w\$ "
# -> mcan@debian:/home/mcan$

💡 Pour rendre le changement permanent, ajoutez la ligne export PS1=... dans ~/.bashrc.


Informations système

CommandeDescription
whoamiAffiche l'utilisateur courant
idRetourne l'identité de l'utilisateur (UID, GID, groupes)
hostnameDéfinit ou affiche le nom d'hôte du système
uname -aInformations sur le noyau et le matériel
pwdAffiche le répertoire de travail courant
ifconfigAffiche/configure une interface réseau (déprécié)
ipAffiche/manipule le routage, les interfaces et les tunnels
netstatAffiche l'état du réseau
ssInvestigue les sockets (remplaçant moderne de netstat)
psAffiche l'état des processus
whoAffiche les utilisateurs connectés
envAffiche l'environnement ou exécute une commande
lsblkListe les périphériques de bloc (disques)
lsusbListe les périphériques USB
lsofListe les fichiers ouverts
lspciListe les périphériques PCI
uptimeTemps de fonctionnement + charge système
free -hUtilisation de la mémoire (RAM/swap)
df -hEspace disque utilisé par point de montage
du -sh <dir>Taille d'un répertoire

Connexion via SSH

ssh student@[adresse_IP]

Options utiles :

ssh -p 2222 user@host # Port personnalisé
ssh -i ~/.ssh/id_ed25519 user@host # Clé privée spécifique
ssh -L 8080:localhost:80 user@host # Tunnel local (port forwarding)

🔐 Bonne pratique : privilégier l'authentification par clé (Ed25519) plutôt que par mot de passe. Générer une paire avec ssh-keygen -t ed25519.


Rechercher fichiers et répertoires

which

Localise le chemin d'un exécutable présent dans le PATH.

which python3

find

Recherche puissante et récursive.

find <emplacement> <options>

Exemple complet :

find / -type f -name "*.conf" -user root -size +20k -newermt 2020-03-03 -exec ls -al {} \; 2>/dev/null
OptionRôle
-type fFichiers uniquement (d pour dossiers)
-name "*.conf"Filtre par nom
-user rootFichiers appartenant à root
-size +20kPlus grands que 20 Ko
-newermtModifiés après une date
-exec ... {} \;Exécute une commande sur chaque résultat

locate

Recherche instantanée via une base de données indexée (plus rapide mais pas en temps réel).

locate "*.conf"
sudo updatedb # Met à jour la base

Descripteurs de fichiers et redirections

Les flux de données standards :

FluxNomNuméro
EntréeSTDIN0
SortieSTDOUT1
ErreurSTDERR2

Rediriger STDOUT et STDERR vers des fichiers séparés :

find /etc/ -name shadow 2> stderr.txt 1> stdout.txt

Autres redirections courantes :

commande > fichier # STDOUT (écrase)
commande >> fichier # STDOUT (ajoute)
commande 2>/dev/null # Ignore les erreurs
commande &> fichier # STDOUT + STDERR ensemble
commande1 | commande2 # Pipe : sortie de 1 vers entrée de 2

Gestion des utilisateurs

CommandeDescription
sudoExécute une commande en tant qu'autre utilisateur (root par défaut)
suChange d'identité (superutilisateur par défaut) via PAM
useraddCrée un nouvel utilisateur
userdelSupprime un compte et ses fichiers associés
usermodModifie un compte utilisateur
addgroupAjoute un groupe
delgroupSupprime un groupe
passwdChange le mot de passe d'un utilisateur

Fichiers clés :

  • /etc/passwd — comptes utilisateurs
  • /etc/shadow — mots de passe chiffrés (lisible par root uniquement)
  • /etc/group — groupes
  • /etc/sudoers — droits sudo (à éditer avec visudo)

Exemple — ajouter un utilisateur à un groupe :

sudo usermod -aG sudo mcan # Ajoute mcan au groupe sudo

Gestion des paquets

OutilDescription
dpkgInstalle/construit/supprime des paquets Debian (.deb)
aptInterface haut niveau du gestionnaire de paquets
aptitudeAlternative à apt (interface haut niveau)
snapPaquets universels conteneurisés (Canonical)
gemGestionnaire de paquets Ruby (RubyGems)
pipInstallateur de paquets Python
gitSystème de contrôle de version distribué

Commandes apt courantes :

sudo apt update # Met à jour la liste des paquets
sudo apt upgrade # Met à jour les paquets installés
sudo apt install <paquet> # Installe
sudo apt remove <paquet> # Désinstalle
sudo apt purge <paquet> # Désinstalle + config
sudo apt search <terme> # Recherche
apt show <paquet> # Détails d'un paquet

Gestion des services et processus

Signaux

Lister tous les signaux disponibles :

kill -l

Signaux les plus utilisés :

SignalDescription
1SIGHUPEnvoyé quand le terminal contrôlant le processus est fermé (souvent utilisé pour recharger la config)
2SIGINTInterruption via Ctrl + C
3SIGQUITQuitter via Ctrl + D
9SIGKILLTue immédiatement le processus, sans nettoyage
15SIGTERMTerminaison propre (signal par défaut de kill)
19SIGSTOPStoppe le processus (non interceptable)
20SIGTSTPSuspension via Ctrl + Z (interceptable)

Exemples :

kill 1234 # Envoie SIGTERM au PID 1234
kill -9 1234 # Force la fin (SIGKILL)
killall firefox # Tue tous les processus par nom
pkill -f script.sh # Tue par motif de ligne de commande

systemctl — gérer les services

sudo systemctl start <service> # Démarre
sudo systemctl stop <service> # Arrête
sudo systemctl restart <service> # Redémarre
sudo systemctl status <service> # État
sudo systemctl enable <service> # Démarrage automatique au boot
sudo systemctl disable <service> # Désactive au boot

Planification de tâches

Systemd Timers

1. Créer le timer (/etc/systemd/system/mytimer.timer) :

[Unit]
Description=My Timer

[Timer]
OnBootSec=3min
OnUnitActiveSec=1hour

[Install]
WantedBy=timers.target

2. Créer le service associé (/etc/systemd/system/mytimer.service) :

[Unit]
Description=My Service

[Service]
ExecStart=/full/path/to/my/script.sh

[Install]
WantedBy=multi-user.target

3. Recharger systemd et activer le timer :

sudo systemctl daemon-reload
sudo systemctl start mytimer.timer
sudo systemctl enable mytimer.timer

Cron

Format d'une ligne de crontab (édition via crontab -e) :

┌───────── Minute (0-59)
│ ┌─────── Heure (0-23)
│ │ ┌───── Jour du mois (1-31)
│ │ │ ┌─── Mois (1-12)
│ │ │ │ ┌─ Jour de la semaine (0-7, 0 et 7 = dimanche)
│ │ │ │ │
* * * * * commande_à_exécuter
ChampPlageDescription
Minutes0-59Minute d'exécution
Heures0-23Heure d'exécution
Jour du mois1-31Jour du mois
Mois1-12Mois
Jour de la semaine0-7Jour de la semaine

Exemple : exécuter un backup tous les jours à 2h30 :

30 2 * * * /home/mcan/backup.sh

NFS (Network File System)

Partage de répertoires entre machines sur un réseau.

Installation (côté serveur) :

sudo apt install nfs-kernel-server -y

Options d'export :

OptionDescription
rwAccès lecture/écriture au partage
roAccès lecture seule
no_root_squashLe root du client garde ses droits root
root_squashLe root du client est réduit aux droits d'un utilisateur normal
syncTransfert synchrone (données écrites avant confirmation)
asyncTransfert asynchrone (plus rapide, risque d'incohérence)

⚠️ Sécurité : no_root_squash est dangereux — un attaquant contrôlant le client peut écrire des fichiers appartenant à root sur le serveur. À éviter en production.

Créer un partage NFS :

mkdir nfs_sharing
echo '/home/cry0l1t3/nfs_sharing hostname(rw,sync,no_root_squash)' >> /etc/exports
cat /etc/exports | grep -v "#"
# /home/cry0l1t3/nfs_sharing hostname(rw,sync,no_root_squash)

Monter un partage NFS (côté client) :

mkdir ~/target_nfs
mount 10.129.12.17:/home/john/dev_scripts ~/target_nfs
tree ~/target_nfs
target_nfs/
├── css.css
├── html.html
├── javascript.js
├── php.php
└── xml.xml

0 directories, 5 files

VPN

Installation :

sudo apt install openvpn -y

Connexion à un VPN :

sudo openvpn --config internal.ovpn

Sauvegarde avec rsync

rsync synchronise efficacement des fichiers/répertoires en ne transférant que les différences.

Sauvegarder un répertoire local vers un serveur de backup :

rsync -av /path/to/mydirectory user@backup_server:/path/to/backup/directory

Avec compression, archivage des anciennes versions et suppression des fichiers obsolètes :

rsync -avz --backup --backup-dir=/path/to/backup/folder --delete \
/path/to/mydirectory user@backup_server:/path/to/backup/directory

Restaurer une sauvegarde :

rsync -av user@remote_host:/path/to/backup/directory /path/to/mydirectory
OptionRôle
-aMode archive (préserve permissions, dates, liens…)
-vVerbose
-zCompression durant le transfert
--deleteSupprime côté destination les fichiers absents de la source
--backupConserve les versions écrasées

💡 rsync fonctionne au-dessus de SSH par défaut pour les transferts distants : le trafic est chiffré.


Configuration réseau

Sous Ubuntu/Debian, on configure les interfaces réseau avec ifconfig (déprécié) ou ip (moderne).

Consulter les paramètres réseau

Avec ifconfig :

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 178.62.32.126 netmask 255.255.192.0 broadcast 178.62.63.255
inet6 fe80::88d9:faff:fecf:797a prefixlen 64 scopeid 0x20<link>
ether 8a:d9:fa:cf:79:7a txqueuelen 1000 (Ethernet)

Avec ip (recommandé) :

ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
link/ether 8a:d9:fa:cf:79:7a brd ff:ff:ff:ff:ff:ff
inet 178.62.32.126/18 brd 178.62.63.255 scope global dynamic eth0

ℹ️ ifconfig est déprécié dans les distributions récentes au profit de ip (paquet iproute2), plus complet.

Activer une interface

sudo ifconfig eth0 up # ancienne méthode
sudo ip link set eth0 up # méthode moderne

Assigner une adresse IP

sudo ifconfig eth0 192.168.1.2
# ou
sudo ip addr add 192.168.1.2/24 dev eth0

Assigner un masque de sous-réseau

sudo ifconfig eth0 netmask 255.255.255.0

Définir la passerelle par défaut

sudo route add default gw 192.168.1.1 eth0
# ou
sudo ip route add default via 192.168.1.1 dev eth0

Configurer le DNS

Les serveurs DNS traduisent les noms de domaine (ex. example.com) en adresses IP.

sudo vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

⚠️ Les modifications directes de /etc/resolv.conf ne sont pas persistantes : le fichier est régénéré par NetworkManager ou systemd-resolved. Pour un réglage permanent, passer par l'outil de gestion réseau approprié.

Rendre la configuration persistante

Éditer /etc/network/interfaces :

sudo vim /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4

Puis redémarrer le service réseau :

sudo systemctl restart networking

ℹ️ Sur Ubuntu récent (17.10+), la configuration réseau se fait via Netplan (/etc/netplan/*.yaml) plutôt que /etc/network/interfaces.


Annexe — Arborescence Linux (FHS)

Rappel des principaux répertoires du Filesystem Hierarchy Standard :

RépertoireContenu
/Racine du système
/bin, /sbinBinaires essentiels (utilisateur / système)
/etcFichiers de configuration système
/homeRépertoires personnels des utilisateurs
/rootRépertoire personnel de root
/varDonnées variables (logs, caches, mails)
/tmpFichiers temporaires (effacés au reboot)
/usrApplications et bibliothèques utilisateur
/optLogiciels optionnels tiers
/proc, /sysSystèmes de fichiers virtuels (infos noyau/processus)
/devFichiers de périphériques
/mnt, /mediaPoints de montage