Droits par défautgr
● Fichier : -rw-r--r--
● Répertoire : drwxr-xr-x
Créer un répertoire :
mkdir nom_du_repertoire
Copier des répertoires :
cp -r source destination
Déplacer des fichiers ou répertoires :
mv source destination
Toucher pour créer un fichier vide :
touch nom_du_fichier
Lister les fichiers dans un répertoire :
ls -l
Changer les permissions des fichiers et répertoires :
chmod options fichier_ou_repertoire
○ Par exemple :
■ chmod u+x fichier : Ajoute l'exécution pour l'utilisateur.
■ chmod a+w fichier : Donne la permission d'écrire à tout le monde.
Créer un lien physique (hard link) :
ln fichier lien_physique
Créer un lien symbolique (soft link) :
ln -s fichier lien_symbolique
Chercher un fichier par son extension :
find chemin -name "*.extension"
Chercher des répertoires ou fichiers modifiés récemment :
find chemin -mtime -7
Chercher et supprimer des fichiers répondant à certains critères :
find chemin -type f -name "[pattern]" -exec rm {} \;
Afficher le contenu d’un fichier :
cat fichier
Supprimer un fichier :
rm fichier
Supprimer un répertoire vide :
rmdir repertoire
Supprimer un répertoire et son contenu :
rm -r repertoire
Exemple de commandes filtres sous Linux :
● grep : filtre les lignes d’un fichier ou d’un flux en fonction d’un motif.
● sort : trie les lignes d’un fichier ou d’un flux.
● uniq : supprime les doublons dans des données triées.
● cut : extrait des parties spécifiques de chaque ligne.
● sed : effectue des modifications sur des données ligne par ligne.
Ces commandes sont souvent utilisées ensemble avec des tubes (|) pour réaliser des chaînes
de traitement puissantes.
cat file.txt | grep "motif" | sort | uniq
Ce pipeline de commandes prend un fichier, sélectionne les lignes contenant "motif", les trie,
puis élimine les doublons.
Redirection d'entrée (< ou 0<) :
● Lit les données depuis un fichier au lieu du clavier.
● Exemple : cat < fichier.txt affiche le contenu de fichier.txt.
Redirection de la sortie standard (> ou 1>) :
● Envoie la sortie d'une commande vers un fichier.
● Exemple : echo "texte" > fichier.txt crée ou écrase fichier.txt.
Redirection de la sortie d'erreur (2>) :
● Envoie les messages d'erreur vers un fichier.
● Exemple : ls dossierInexistant 2> erreurs.txt enregistre l'erreur dans
erreurs.txt.
Ajout à un fichier (>> ou 1>> et 2>>) :
● Ajoute des données ou erreurs à la fin d'un fichier sans écraser.
● Exemple : echo "texte" >> fichier.txt ajoute à fichier.txt.
Combinaison sortie standard et erreur (&> ou &>>) :
&> : Redirige tout (sortie standard + erreurs) vers un fichier en remplaçant son contenu.
&>> : Redirige tout (sortie standard + erreurs) vers un fichier en ajoutant au contenu existant.
● Redirige la sortie standard et les erreurs dans un même fichier.
● Exemple : commande &> fichier.txt ou commande &>> fichier.txt.
Redirection dans des fichiers séparés :
● commande 1> sortie.txt 2> erreur.txt envoie la sortie standard et les erreurs
dans des fichiers différents.
Tableau des flux de données :
● Entrée standard (stdin) : Clavier | Descripteur : 0.
● Sortie standard (stdout) : Écran | Descripteur : 1.
● Sortie d'erreur (stderr) : Écran | Descripteur : 2.
Pipes (|) :
● Utilisé pour rediriger la sortie standard d'une commande vers l'entrée standard d'une
autre commande.
Exemples d'utilisation des pipes :
1. Compter les utilisateurs :
○ cat /etc/passwd | wc -l : affiche le nombre de lignes du fichier
/etc/passwd, donc le nombre d'utilisateurs.
2. Combiner plusieurs pipes :
○ cat /etc/passwd | head -n 10 | wc -c : affiche le nombre de
caractères des 10 premières lignes du fichier.
3. Lister et compter les fichiers :
○ ls *.txt | wc -l > compter.txt : liste les fichiers texte, compte leur
nombre et redirige le résultat vers le fichier compter.txt.
-l : Compte les lignes.
-w : Compte les mots.
-m : Compte les caractères (octets).
Principe de l'option -exec :
● L'option -exec permet d'exécuter une commande sur chaque fichier ou répertoire
trouvé par find.
● Syntaxe :
find [chemin] [options] -exec [commande] {} \;
○ {} : Représente le fichier trouvé.
○ ; : Termine la commande, à échapper avec un backslash.
Exemples courants :
1. Supprimer des fichiers :
find . -name "*.tmp" -exec rm {} \;
Supprime tous les fichiers .tmp dans le répertoire actuel.
2. Afficher le contenu de fichiers :
find ~/Desktop -name "*.txt" -exec cat {} \;
Affiche le contenu de tous les fichiers .txt du répertoire Desktop.
3. Modifier les permissions :
find myrep -name "*.sh" -exec chmod +x {} \;
Ajoute le droit d'exécution à tous les fichiers .sh dans le répertoire myrep.
Commande grep :
● Définition :
grep perme&t de rechercher un mot-clé dans des fichiers. La commande affiche les
lignes contenant le mot spécifié.
Options courantes de grep :
Option Description
-c Compte le nombre de lignes contenant le mot-clé recherché.
-r Effectue une recherche récursive dans les répertoires.
-i Ignore la casse (minuscule/majuscule) lors de la recherche.
-n Affiche les numéros de ligne où le mot-clé apparaît.
-v Inverse la recherche, affichant les lignes qui ne correspondent pas au mot-
clé.
Exemples pratiques :
1. Recherche d'un mot dans un fichier :
○ grep "system" /etc/passwd
Cherche toutes les occurrences de system dans le fichier /etc/passwd.
2. Compter les lignes contenant un mot :
○ grep -c "system" /etc/passwd
Affiche le nombre de lignes contenant system dans le fichier /etc/passwd.
3. Rechercher des lignes commençant par une lettre :
○ grep "^t" /etc/passwd
Cherche les lignes commençant par t.
4. Recherche récursive dans un répertoire :
○ grep -r "system" /etc/
Cherche system dans tous les fichiers et sous-répertoires de /etc/.
5. Recherche insensible à la casse :
○ grep -i "system" myfile
Cherche system dans le fichier myfile, en ignorant les majuscules/minuscules.
6. Afficher les numéros de ligne des résultats :
○ grep -n "system" /etc/passwd
Affiche les numéros de ligne où system apparaît dans le fichier /etc/passwd.
7. Inverser la recherche :
○ grep -v "system" /etc/passwd
Affiche toutes les lignes ne contenant pas le mot system.
Commande cut :
● Définition :
La commande cut est un outil de filtrage de texte qui permet d'extraire des portions de
texte à partir de fichiers ou de l'entrée standard. Elle est utilisée pour récupérer des
caractères ou des champs spécifiques d'une ligne.
Options courantes de cut :
Option Description
-d Définit le caractère séparateur de champ (par défaut, c'est la
tabulation).
-f Spécifie les champs à extraire.
-c Sélectionne des caractères par position dans chaque ligne.
Exemples pratiques :
1. Extraire des champs avec un délimiteur :
○ cut -d',' -f1,2 data.txt
Utilise , comme délimiteur pour extraire le 1er et le 2ème champ de chaque ligne
dans le fichier data.txt.
2. Extraire des caractères par position :
○ cut -c1-5 data.txt
Extrait les caractères de la position 1 à 5 de chaque ligne dans le fichier
data.txt.
3. Extraire des caractères spécifiques :
○ cut -c1,5 data.txt
Extrait les caractères à la position 1 et 5 de chaque ligne dans le fichier
data.txt.
4. Couper les 2 premiers chiffres d'un code postal :
○ Exemple non fourni ici, mais tu peux utiliser cut -c1-2 sur un fichier contenant
des codes postaux.
5. Afficher des champs spécifiques des dernières lignes d'un fichier :
○ tail -n 5 /etc/passwd | cut -d: -f1,6,7
Affiche le 1er, 6ème et 7ème champ des 5 dernières lignes du fichier
/etc/passwd, avec : comme délimiteur.
Commande sort :
● Définition :
La commande sort trie le contenu d’un fichier texte, ligne par ligne. Elle permet de
réorganiser les lignes d’un fichier afin qu’elles soient triées selon des critères spécifiés.
Options courantes de sort :
Option Description
-r Trie en ordre décroissant (inverse l'ordre
habituel).
-u Trie et supprime les doublons.
-n Trie numériquement (utile pour les nombres).
-t Définit le caractère séparateur pour le tri (ex : :).
-k Spécifie la clé de tri (champ sur lequel trier).
Exemples pratiques :
1. Tri par ordre croissant :
○ sort num.txt
Trie les lignes du fichier num.txt en ordre croissant par défaut.
2. Tri par ordre décroissant :
○ sort -r num.txt
Trie les lignes du fichier en ordre décroissant, de 9 à 1.
3. Tri avec suppression des doublons :
○ sort -u fruits.txt
Trie le fichier fruits.txt en ordre alphabétique et supprime les doublons, affichant
chaque fruit une seule fois.
4. Tri avec séparation et tri numérique :
○ sort -n -t: -k2 datasort.txt
Trie le fichier datasort.txt en utilisant : comme séparateur, triant les lignes selon
le deuxième champ de manière numérique
Commande sed :
● Définition :
La commande sed (stream editor) est utilisée pour manipuler et transformer du texte
dans des fichiers ou des flux de données. Elle permet de rechercher, remplacer, insérer
et supprimer des mots et des lignes.
Options et fonctionnalités courantes de sed :
Fonctionnalité Syntaxe Description
Remplacer sed Remplace la première
's/ancien_texte/nouveau_text occurrence de ancien_texte
e/' fichier.txt par nouveau_texte dans
chaque ligne.
Afficher une sed -n '2p' exemple.txt Détails :
ligne spécifique
● -n : Empêche d'afficher
tout le fichier par défaut.
● 2p :
○ Le 2 signifie "ligne
numéro 2".
○ Le p signifie
"imprime cette
ligne".
Supprimer une sed '3d' exemple.txt Détails :
ligne spécifique
● 3d :
○ Le 3 signifie "ligne
numéro 3".
○ Le d signifie
"supprime cette
ligne".
Remplacer sed Remplace toutes les occurrences
toutes les 's/ancien_texte/nouveau_text de ancien_texte par
occurrences e/g' fichier.txt nouveau_texte dans le fichier.
L'option g indique une
substitution globale sur chaque
ligne.
Shebang : Ligne au début d'un script shell indiquant l'interpréteur à utiliser, par exemple
#!/bin/bash.
Exécution du script :
1. Rendre exécutable : chmod +x Firstscript.sh
2. Exécuter avec :
○ bash Firstscript.sh
○ sh Firstscript.sh
○ ./Firstscript.sh
Débogage : Utiliser bash -x Firstscript.sh.
Commentaires : Utiliser # pour des commentaires simples. Pour des commentaires multiligne,
utiliser : <<COMMENT.
Affichage : Utiliser echo pour afficher des messages. Activer -e pour les retours à la ligne
avec \n.
Variables : Plusieurs méthodes pour déclarer et afficher des variables.
Pour évaluer des expressions arithmétiques sous shell, on utilise la commande expr ou la
syntaxe $(()).
Opérateurs arithmétiques :
● + : addition
● - : soustraction
● * : multiplication
● / : division entière
● % : reste de la division
Remarque : Avec $(()), la multiplication se fait uniquement avec l'opérateur *.
Exemples d'opérations arithmétiques :
1. Addition : result=$((3 + 5)) (result = 8)
2. Soustraction : result=$((10 - 2)) (result = 8)
3. Multiplication : result=$((4 * 3)) (result = 12) OU prod=$(expr $a \* $b)
4. Division entière : result=$((20 / 4)) (result = 5)
Pour déclarer une variable, on affecte une valeur :
nom_variable=valeur_variable
● Les noms de variables sont sensibles à la casse et peuvent contenir des chaînes ou des
nombres.
● Pour accéder à la valeur, utilisez $nom_variable.
Types de quotes
1. Simples quotes (' ') : Traitement littéral, aucune expansion (ex. : 'age').
2. Doubles quotes (" ") : Expansion des variables (ex. : "Votre âge est $age").
3. Back quotes ( ) : Exécution de la commande à l'intérieur (ex. : `date`), remplaçables
par $( ).
Saisie des variables
Utilisez la commande read pour saisir des variables à partir du clavier :
read nom age
Avec l'option -p, affichez un message d'invite :
read -p "Entrez votre nom : " nom
Variables d'environnement
● Accessibles par tous les processus. Affichez-les avec env ou printenv.
● Exemples :
○ HOME : chemin vers le répertoire personnel.
○ USER : nom de l'utilisateur.
○ PATH : répertoires pour les exécutables.
Pour définir une variable d'environnement, utilisez :
export nom_variable=valeur
Variables prédéfinies spéciales
● Utilisées pour récupérer les arguments passés au script :
○ $0 : nom du script.
○ $# : nombre d'arguments.
○ $* : tous les arguments.
○ $1, $2, ... : arguments individuels.
○ $? : code retour de la dernière commande exécutée.$
0 : La commande s'est exécutée avec succès.
Toute autre valeur (exemple : 1) : Une erreur s'est produite.
Déclaration d'un tableau
● Un tableau peut être déclaré de deux manières :
Syntaxe avec parenthèses :
tableau=(valeur1 valeur2 valeur3)
Syntaxe avec declare :
declare -a tableau=(valeur1 valeur2 valeur3)
Accès aux éléments du tableau
Pour accéder à un élément spécifique :
tableau[indice]
● Exemple : tableau[0] pour accéder au premier élément.
Accès à tous les éléments du tableau
Pour afficher tous les éléments :
echo "${tableau[@]}"
Vous pouvez également utiliser * :
echo "${tableau[*]}"
Longueur du tableau
Pour obtenir la longueur du tableau :
longueur=${#tableau[@]}
Remplacez @ par * pour la même opération :
longueur=${#tableau[*]}
Pour ajouter un nouvel élément à la fin du tableau :
tableau+=(nouvelle_valeur)
Pour supprimer un élément à un indice spécifique :
unset tableau[indice]
● Exemple : unset tableau[1] supprime le deuxième élément.
La commande <test>
● Utilisée pour évaluer des expressions conditionnelles et renvoie un statut vrai (0) ou faux
(1).
● Pour vérifier le résultat, on utilise la variable $?.
Types de tests possibles
1. Sur les fichiers :
○ -e <nom_fichier> : existe
○ -f <nom_fichier> : fichier ordinaire
○ -d <nom_fichier> : répertoire
○ -L <nom_fichier> : lien symbolique
○ -r <nom_fichier> : accessible en lecture
○ -x <nom_fichier> : accessible en exécution
○ -w <nom_fichier> : accessible en écriture
○ -s <nom_fichier> : existe et non vide
2. Sur les nombres :
○ -eq : égal
○ -ne : différent
○ -lt : inférieur strictement
○ -le : inférieur ou égal
○ -gt : supérieur strictement
○ -ge : supérieur ou égal
eq = equal (égal)
ne = not equal (non égal)
lt = less than (inférieur)
le = less or equal (inférieur ou égal)
gt = greater than (supérieur)
ge = greater or equal (supérieur ou égal)
3. Sur les chaînes de caractères :
○ -n "string" : longueur non nulle
○ -z "string" : longueur nulle
○ "s1" = "s2" : égales
○ "s1" != "s2" : non égales
/dev/null est un "trou noir" dans le système. Tout ce qu'on y envoie est immédiatement
supprimé.
En bref :
● Rediriger vers /dev/null :
○ Supprime les erreurs : 2> /dev/null (stderr).
○ Supprime les sorties normales : > /dev/null (stdout).
○ Supprime tout (erreurs + sorties normales) : > /dev/null 2>&1.
Utilisation des crochets [ ]
● La commande <test> peut être remplacée par [ ] pour effectuer les mêmes tests.
Structure conditionnelle if:
if [ condition ]; then
# commandes
fi
Structure conditionnelle case:
case variable in
motif1)
# commandes
;;
motif2)
# commandes
;;
● esac
L boucle <for>
Utilisée pour itérer sur une liste de valeurs prédéfinies.
Syntaxe :
for variable in liste; do
# commandes
done
Exemple :
for i in 1 2 3; do
echo "Valeur: $i"
done
La commande <seq>
Utilisée pour générer une séquence numérique facilement.
Exemple :
bash
for i in $(seq 1 250); do
echo "Numéro: $i"
done
La boucle <while>
Exécute des commandes tant que la condition est vraie.
Syntaxe :
while [ condition ]; do
# commandes
done
Exemple : Lire un fichier ligne par ligne
while IFS= read -r ligne; do
echo "$ligne"
done < mon_fichier.txt
La boucle <until>
Exécute des commandes tant que la condition est fausse.
Syntaxe :
until [ condition ]; do
# commandes
done
Exemple : Décompte
compteur=5
until [ $compteur -lt 1 ]; do
echo "Décompte: $compteur"
compteur=$((compteur - 1))
done
echo "Fin du décompte !"
Fonctions en Shell
Déclaration : Une fonction est un bloc de code qui exécute des opérations. On peut la déclarer
de deux manières :
nom_fonction() {
# code
}
ou
function nom_fonction {
# code
}
Appel : Pour exécuter la fonction, il suffit d'invoquer son nom dans le script :
nom_fonction
Arguments : Les fonctions peuvent accepter des paramètres. On y accède en utilisant $1, $2,
etc. Par exemple :
nom_fonction() {
echo "Premier argument : $1"
}
Retour : Une fonction peut renvoyer un code de sortie, qui indique le succès ou l'échec. Utilisez
return pour spécifier ce code :
bash
return 0 # indique succès
● Le code retourné est accessible via la variable $?.
Terminaisons
● Script : Utilisez exit n pour quitter le script avec un code de retour.
● Fonction : Utilisez return n pour quitter la fonction avec un code de retour.
● Boucle : Utilisez break pour sortir d'une boucle.
LBA est la méthode pour numéroter les blocs de données sur un disque.Chaque numéro
de LBA correspond à une petite portion de données (en général 512 octets ou 4096
octets) sur le disque.
Organisation des LBAs sur un disque GPT avec UEFI :
LBA Contenu Rôle
LBA 0 MBR de protection Compatibilité avec les anciens systèmes (anti-
corruption).
LBA 1 primary Header Métadonnées principales (structure GPT, taille des
GPT partitions, etc.).
LBA 2-33 Table des partitions Informations sur les partitions utilisateur (jusqu'à 128
principale entrées par défaut).
LBA 34+ Partitions utilisateur, ESP (EFI System Partition) : contient les chargeurs
incluant la de démarrage (comme grubx64.efi,
partition EFI bootx64.efi) et d'autres fichiers UEFI.
LBA -2 Table des partitions Sauvegarde de la table principale.
secondaire
(backup)
LBA -1 Header GPT Sauvegarde du Header GPT principal.
secondaire
(backup)
Appui sur le bouton d'alimentation : Quand on allume l’ordinateur, un
programme de démarrage appelé UEFI (qui remplace l’ancien BIOS) se
lance.
Vérification du matériel : L’UEFI vérifie si les composants de l'ordinateur,
comme la mémoire, le disque dur, et le processeur, fonctionnent
correctement.
Chargement du disque : Ensuite, l’UEFI cherche sur le disque dur où sont
stockés les fichiers de démarrage. Il utilise un format moderne appelé GPT
(plus avancé que l’ancien MBR) pour trouver les partitions sur le disque.
MBR : uniquement 4 partitions primaires, taille d’une partition ne dépasse pas 2,2To, ce type se
base sur l’adressage historique CHS……
GPT : jusqu’à 128 partitions primaires, ce type se base sur l’adressage logique des blocs
(LBA)..
Aspec Primary GPT Partition Table (Table Secondary GPT Partition Table (Table
t de partition primaire) de partition secondaire)
Positio Située au début du disque (LBA Située à la fin du disque, juste avant les derniers
n 1-33) secteurs
Rôle Contient les informations principales sur les Copie de sauvegarde de la table
partitions primaire
Accessibilité en Si endommagée, les partitions Permet de récupérer les informations
cas de corruption ne peuvent pas être lues sur les partitions si la table primaire
directement est corrompue
But de la table Sauvegarde et redondance Assure la récupération des partitions en
secondaire des informations de partition cas de problème avec la table primaire
Chargement de GRUB : Le chargeur de démarrage(gestionnaire
d’amorçage) appelé GRUB se lance. Il permet de choisir le système à
démarrer, ou simplement démarre Linux si c'est le seul installé.
Chemin absolu du fichier de configuration taa grub :
/boot/grub/grub.cfg
Lancement du noyau Linux : GRUB charge le noyau Linux (le cœur du
système), qui prend le relais pour contrôler les composants matériels,
comme la gestion des fichiers et de la mémoire.
Lancement de systemd : Le noyau passe la main à systemd (ou init sur
des systèmes plus anciens). Systemd commence alors à lancer des
services et des programmes pour préparer l'ordinateur à être utilisé.
Système prêt : À la fin de cette séquence, le système est complètement
prêt pour que vous puissiez l'utiliser, avec l’écran d’accueil ou la session
ouverte.
Qu'est-ce que le démarrage ?
Ce processus se déroule en plusieurs étapes clés :
1. Initialisation du matériel : Le système vérifie et prépare les composants matériels.
2. Localisation et lancement du chargeur de démarrage : Le système identifie le
chargeur de démarrage à partir de la table de partition.
3. Amorçage du noyau du système d'exploitation : Le noyau Linux est chargé pour
gérer les ressources matérielles.
4. Initialisation des services et processus : Un programme comme systemd démarre les
services nécessaires pour que l'ordinateur soit entièrement fonctionnel.
Vue d'ensemble des étapes du démarrage
Le processus commence lorsque l'utilisateur appuie sur le bouton d'alimentation :
1. UEFI : Initialise le matériel et configure les composants.
2. Table de partition GPT : Gère les partitions des disques durs.
3. Chargeur de démarrage GRUB : Permet de choisir et de charger le noyau Linux.
4. Noyau : Prend le contrôle pour gérer les ressources.
5. Programme d'initialisation : Démarre les services pour rendre l'ordinateur
opérationnel.
Qu'est-ce qu'un BIOS ?
● Définition : Basic Input-Output System, un logiciel de bas niveau sur la carte mère qui
initialise le matériel au démarrage..
3. Comment UEFI remplace et améliore le BIOS ?
● Définition : Unified Extensible Firmware Interface, un micrologiciel qui s'exécute au
démarrage, remplaçant le BIOS.
4. UEFI utilise Mémoire -!²
● Utilisation : Stocke les variables essentielles au démarrage, persistantes entre les
redémarrages.
● Exemples de données stockées :
○ Système démarré, ordre des entrées de démarrage, délai avant démarrage
automatique, etc.
5. EFIBootmgr
● Description : Utilitaire en ligne de commande sous Linux pour gérer le gestionnaire de
démarrage UEFI.
Lister les entrées de démarrage :
● efibootmgr : Affiche les options de démarrage avec leur ordre de priorité et l'entrée
active.
● efibootmgr -v : Liste les entrées avec des détails supplémentaires comme les
chemins de fichiers.
Changer l'ordre de démarrage :
● sudo efibootmgr -o 0004,0006,0000,... : Redéfinit l'ordre dans lequel le
système essaie les périphériques de démarrage.
1. Supprimer une entrée :
● sudo efibootmgr -B -b 0001
● -B : Supprime une entrée EFI existante.
● -b 0001 : Spécifie l'ID de l'entrée à supprimer (ici, l'entrée "0001", comme "EFI
Floppy").
2. Créer une nouvelle entrée :
● sudo efibootmgr -c -d /dev/sda -p 1 -L "Nom" -l '\chemin\
fichier.efi'
● -c : Crée une nouvelle entrée EFI.
● -d /dev/sda : Spécifie le disque où se trouve la partition EFI (ici, /dev/sda).
● -p 1 : Spécifie le numéro de la partition EFI (ici, partition 1).
● -L "Nom" : Donne un nom à l'entrée (par exemple, "Nom").
● -l '\chemin\fichier.efi' : Spécifie le chemin du fichier EFI à exécuter.
3. Amorcer temporairement sur une autre entrée :
● sudo efibootmgr -n 0004
● -n : Définit une entrée EFI comme amorçage temporaire pour le prochain démarrage
uniquement.
● 0004 : Spécifie l'ID de l'entrée EFI à utiliser temporairement (par exemple, "EFI
Network").
4. Configurer le délai d'attente du gestionnaire de démarrage :
● sudo efibootmgr -t 10
● -t 10 : agit au niveau de l'UEFI, avant que GRUB (ou tout autre gestionnaire) ne soit
chargé.
Pour changer l’intitulé du système d’exploitation, on va agir sur le paramètre :
GRUB_DISTRIBUTOR =”Old Kernel”
Pourquoi le nom personnalisé est accompagné par "GNU/Linux"
Le nom affiché dans le menu GRUB est généré automatiquement grâce à des scripts situés
dans /etc/grub.d/. Ces scripts utilisent une variable appelée GRUB_DISTRIBUTOR pour
savoir comment nommer l'entrée du menu.
1. Si GRUB_DISTRIBUTOR est vide : GRUB utilise "GNU/Linux" comme nom par défaut.
2. Si GRUB_DISTRIBUTOR contient un nom (comme "Ubuntu" ou "Debian") : Ce nom est
utilisé, mais GRUB y ajoute souvent "GNU/Linux" pour indiquer que c'est un système
basé sur Linux. Par exemple, "Ubuntu GNU/Linux".
3. Pourquoi "GNU/Linux" est ajouté : C'est une convention pour rappeler que la
distribution est basée sur Linux (le noyau) et GNU (les outils système). C'est un peu
comme donner le nom complet d'un système.
1. Fichiers contenus dans la partition EFI et leur rôle :
● grubx64.efi :
○ Ce fichier appartient au chargeur d’amorçage GRUB2, utilisé pour gérer le
démarrage des systèmes d’exploitation.
○ Rôle : Il permet à l’utilisateur de sélectionner un système d’exploitation ou un
mode de démarrage (comme le mode recovery) dans un menu au démarrage de
la machine.
● bootx64.efi :
○ C’est le fichier point d’entrée par défaut pour UEFI, indispensable au
démarrage.
○ Rôle : Il lance soit le chargeur d’amorçage (comme GRUB) soit directement un
système d’exploitation. Si aucun fichier spécifique n’est configuré, UEFI utilise ce
fichier pour amorcer.
● shim.efi (optionnel) :
○ Utilisé dans les environnements Secure Boot, notamment sur les systèmes
modernes.
○ Rôle : C’est un intermédiaire qui vérifie les signatures des fichiers EFI avant de
charger GRUB ou l’OS, garantissant la sécurité du démarrage.
2. Procédure en cas de mot de passe administrateur oublié :
● Étape : Accéder au mode rescue depuis GRUB
○ Lorsque l’administrateur a oublié son mot de passe, il peut regagner l'accès en
suivant ces étapes :
1. Redémarrer la machine et accéder au menu GRUB2.
2. Modifier temporairement les paramètres de démarrage pour ajouter
init=/bin/bash dans la ligne de commande du noyau (mode rescue).
3. Une fois dans le mode rescue, changer le mot de passe de l’utilisateur
administrateur avec passwd.
● Cette procédure permet de réinitialiser le mot de passe mais doit être utilisée avec
précaution.
Résumé des étapes du démarrage d'un ordinateur sous
Linux
1. Mise sous tension et POST :
○ Le BIOS ou UEFI effectue un autotest du système (POST) pour
vérifier les composants matériels essentiels.
2. Initialisation des composants :
○ UEFI (ou BIOS) active les composants clés, comme la carte vidéo,
le clavier et le stockage.
3. Recherche de la partition de démarrage :
○ Sous UEFI, le firmware recherche l'ESP (EFI System Partition),
une partition spéciale contenant les fichiers nécessaires au
démarrage. Cette partition stocke le chargeur de démarrage
(bootloader, comme GRUB), qui localise le noyau du système
d'exploitation et l'exécute pour lancer le système.
○ Sous BIOS, il recherche la partition active dans le MBR.
4. Chargement du chargeur de démarrage :
○ Sous UEFI, le chargeur GRUB est exécuté depuis l'ESP.
○ Sous BIOS, GRUB ou un autre chargeur de démarrage démarre
depuis le MBR.
5. Chargement et Initialisation du noyau :
○ GRUB charge le noyau (vmlinuz) et initramfs pour préparer le
système.
6. Démarrage du premier processus :
○ Le noyau passe le contrôle au programme d'initialisation (init ou
systemd) pour démarrer les services système.
7. Connexion de l’utilisateur :
○ L'écran de connexion apparaît, permettant à l'utilisateur d'accéder
au système.
Définition et rôle du système d'initialisation
Le système d'initialisation prend le relais après le chargement du noyau Linux pour rendre
l'ordinateur pleinement fonctionnel en démarrant les services nécessaires (réseau, stockage,
interface utilisateur, etc.). Ce système lance le premier processus utilisateur (PID 1), qui gère
tous les autres processus et assure un démarrage et un arrêt ordonnés du système.
Rôles principaux du système d'initialisation
1. Démarrage des services essentiels :
○ Montage des systèmes de fichiers : Accès aux données et applications.
○ Lancement des démons : Services en arrière-plan comme réseau, impression,
etc.
○ Initialisation de la console : Préparation de l'interface utilisateur.
2. Gestion des niveaux d'exécution (runlevels) :
○ Permet de changer d’état du système : mode mono-utilisateur, multi-utilisateur,
redémarrage, etc.
3. Arrêt du système :
○ Ordre d’arrêt des services, fermeture des fichiers, et extinction du système.
4. Gestion des processus orphelins :
○ Le processus PID 1 adopte les processus sans parent.
5. Intégration avec d'autres services :
○ Coordination et dépendances : Assure que les services démarrent dans le bon
ordre pour un fonctionnement fluide.
Types de systèmes d'initialisation
1. SysVinit : Un système d'initialisation traditionnel utilisé pour démarrer
et gérer les services du système Linux à l'aide de scripts d'initialisation
et de niveaux d'exécution.
SysVinit Utilise des scripts dans /etc/init.d/ pour démarrer, arrêter ou
redémarrer les services. Chaque script peut démarrer, arrêter ou
redémarrer un service spécifique. Exemple de script : /etc/init.d/cron
gère le démon cron.
○ Modèle séquentiel : Les services sont démarrés un par un selon un ordre
prédéfini.
○ Runlevels : Définit différents états du système via /etc/inittab, chaque
niveau d'exécution activant un ensemble de services spécifiques.
○ Avantages : Simplicité, compatibilité avec les anciens systèmes.
○ Inconvénients : Démarrage lent, gestion rigide des runlevels, scripts complexes,
gestion limitée des dépendances.
2. systemd : Un système d'initialisation moderne qui remplace
SysVinit, offrant une gestion avancée des services, des
dépendances, et un démarrage plus rapide avec des fichiers
d'unité.
○ Gestion avancée des services : Permet un démarrage parallèle des services et
une meilleure gestion des dépendances.
○ Unités (fichiers .unit) : Gère les services, cibles, points de montage, sockets,
timers, etc.
○ Targets : Remplace les runlevels avec une flexibilité accrue pour définir des
états du système.
○ Commandes systemctl : Outil pour gérer les services et cibles via des
commandes (start, stop, restart, etc.).
○ Journalisation avec journalctl : Centralise les journaux pour consulter les
événements du système et des services.
Résumé structuré des commandes systemd
Un service, c'est comme un assistant invisible qui travaille en
continu pour faire fonctionner certaines parties importantes de
ton système (réseau, sécurité, applications, etc.). 😊
Gérer les services :
○ Démarrer un service :
sudo systemctl start <nom_du_service>
○ Arrêter un service :
sudo systemctl stop <nom_du_service>
○ Redémarrer un service :
sudo systemctl restart <nom_du_service>
○ Vérifier l'état d'un service :
systemctl status <nom_du_service>
○ Activer un service au démarrage :
sudo systemctl enable <nom_du_service>
○ Désactiver un service au démarrage :
sudo systemctl disable <nom_du_service>
Lister et vérifier les services :
○ Lister les services actifs :
systemctl list-units --type=service
○ Vérifier si un service est activé :
systemctl is-enabled <nom_du_service>
○ Lister tous les services (même inactifs) :
systemctl list-unit-files --type=service
Commandes pour les cibles (targets) :
○ Lister les cibles actives :
systemctl list-units --type=target
○ Lister toutes les cibles (actives et inactives) :
systemctl list-unit-files --type=target
○ Afficher la cible par défaut :
systemctl get-default
○ Définir une cible par défaut
sudo systemctl set-default <nom_de_la_cible>
○ Changer la cible actuelle temporaitmeent :
sudo systemctl isolate <nom_de_la_cible>
○ Lister les dépendances d'une cible :
systemctl list-dependencies <nom_de_la_cible>
Recharger et diagnostiquer :
○ Recharger les configurations systemd : est nécessaire uniquement si tu
viens de créer ou de modifier manuellement le fichier de service.
sudo systemctl daemon-reload
○ Voir les journaux d'un service spécifique :
journalctl -u <nom_du_service>
○ Suivre les journaux en temps réel :
journalctl -f
Types d’unités dans systemd :
1. .service : Services système (ex. apache2.service).
2. .target : Groupes d'unités (ex. multi-user.target).
3. .socket : Communication inter-processus.
4. .timer : Programmation de tâches.
Principaux types de cibles :
● graphical.target :
○ Démarre le système avec une interface graphique (GUI).
○ Equivalent au runlevel 5 dans les systèmes SysV init.
● multi-user.target :
○ Démarre le système en mode multi-utilisateur, sans interface graphique
(mode texte).
○ Equivalent au runlevel 3.
● rescue.target :
○ Mode de récupération avec accès limité.
○ Seul un nombre minimal de services sont démarrés.
○ Equivalent au runlevel 1.
● emergency.target :
○ Offre un accès direct à un shell root, avec un système minimal (aucun
service ou réseau activé).
● default.target :
○ La cible par défaut définie pour démarrer le système.
○ Souvent configurée comme graphical.target ou multi-user.target.
1. BIOS/UEFI (Amorçage matériel)
● Fichiers clés :
○ Secteur d’amorçage : MBR ou GPT (sur le disque).
2. Bootloader (Chargeur d’amorçage)
● Fichiers clés :
○ Menu de démarrage : /boot/grub/grub.cfg
○ Configuration GRUB : /etc/default/grub
○ Scripts GRUB : /etc/grub.d/
3. Noyau Linux
● Fichiers clés :
○ Fichier du noyau : /boot/vmlinuz
○ Ramdisk initial : /boot/initrd.img
4. Système de fichiers racine
● Fichiers clés :
○ Points de montage : /etc/fstab
○ Répertoires essentiels :
■ /bin/, /sbin/ : Commandes principales.
■ /lib/ : Bibliothèques système.
5. Initialisation et services
● Systemd :
○ Unités de service : /etc/systemd/system/,
/usr/lib/systemd/system/
○ Cible par défaut : /etc/systemd/system/default.target
○ Configuration globale : /etc/systemd/system.conf
● Fichiers de démarrage classique :
○ /etc/init.d/ : Services init.
6. Journaux
● Fichiers clés :
○ Logs systemd : /var/log/journal/
○ Configuration des journaux : /etc/systemd/journald.conf
7. Quotas
● Fichier clé :
○ Activation des quotas : /etc/fstab
8. LVM (Volumes Logiques)
● Fichier clé :
○ Configuration : /etc/lvm/lvm.conf
9. Utilisateurs et groupes
● Fichiers clés :
○ Liste des utilisateurs : /etc/passwd
○ Mots de passe chiffrés : /etc/shadow
○ Groupes : /etc/group
Les fichiers d'unité sont situés dans deux répertoires principaux :
/etc/systemd/system/ Les fichiers d'unités modifiés ou créés par l'administrateur.
usr/lib/systemd/system/ Les fichiers d'unités fournis par le système ou installés via des
packages.
[UNIT] Contient des directives qui définissent les relations et les dépendances entre les
unités.
Description: - une brève description de l'unité.
Documentation: - l'emplacement de la page de manuel (document d'aide) associé à
l'unité et la commande permettant d'accéder à cette page.
After :
Indique que cette unité (service ou autre) doit attendre qu'une autre unité soit activée
avant de se lancer.
Exemple :
After=network.target
● Cela signifie que le service actuel ne se lancera qu'après le démarrage du réseau.
Before :
Indique que cette unité doit être activée avant une autre unité.
Exemple :
Before=apache2.service
● Cela signifie que le service actuel doit être démarré avant Apache.
Wants: - Liste les unités ou services que cette unité souhaite démarrer (par défaut en
parallèle avec cette unité) , mais dont le démarrage n'est pas strictement nécessaire pour
le fonctionnement de cette unité.
Avec Requires, si les autres unités sont désactivées ou échouent de s’activer, l’unité en
question sera désactivée (dépendance de fonctionnement), alors que avec Wants si les
autres unités sont désactivées ou échouent de s’activer, l’unité en question continue
fonctionner…
Requires :- Énumère les unités ou services qui doivent être obligatoirement démarrés
pour que cette unité puisse fonctionner. Si ces unités échouent à démarrer, l'unité
actuelle ne démarrera pas non plus.
Conflicts: - Cette déclaration énumère les unités/services qui doivent être arrêtés avant
le démarrage de cette unité.
[SERVICE] Le titre de cette section (le mot clé entre les crochets) indique le type d'unité.
Par exemple, si le type d'unité est le Service, cette section utilise le titre [Service] et si le
type d'unité est le Socket, cette section utilise le titre [Socket]. Les déclarations de cette
section contiennent les opérations de contrôle/commandes de l'unité.
Type :
simple : Démarrage direct, sans complexité.
forking : Service en arrière-plan avec processus parent/enfant.
oneshot : Une tâche unique, puis fin.
notify : Le service indique lui-même qu’il est prêt.
idle : Démarrage retardé après tous les autres services.
ExecStart : Spécifie la commande ou le script à exécuter pour démarrer le service.
ExecStop : Spécifie la commande pour arrêter proprement le service
Restart : Contrôle le comportement de redémarrage du service
[INSTALL] Indique les cibles dans lesquels cette unité sera activée automatiquement
lors du démarrage du système.
WantedBy : - Nom de l'unité cible qui démarre automatiquement cette unité. Par exemple,
si vous voyez multi-user.target dans cette déclaration, cela signifie que lorsque le
système entre dans le niveau cible "multi-user.target", cette unité est démarrée
automatiquement.
CHAP3
Définition d'un utilisateur : Un utilisateur sous Linux est une entité associée à trois éléments
principaux :
1. Nom de connexion (LOGIN) : Identifiant unique pour se connecter au système.
2. UID (User ID) : Numéro unique attribué à chaque utilisateur.
3. GID (Group ID) : Numéro unique associé à un groupe auquel appartient l'utilisateur.
Chaque utilisateur a un répertoire personnel situé dans /home, sauf pour l'utilisateur
root, dont le répertoire personnel est dans /root.
Création d'un login sous Linux : Les logins doivent respecter certaines restrictions :
● Commencer par une lettre (majuscule ou minuscule).
● Contenir uniquement des lettres, chiffres, tirets (« - ») ou traits de soulignement («
_ »).
● Ne pas dépasser 32 caractères.
● Être sensibles à la casse (par exemple, esprit et Esprit sont différents).
Types d'utilisateurs :
1. Root : Super-utilisateur avec des privilèges illimités.
2. Utilisateur système/applicatif : Comptes utilisés par des applications et démons, sans
besoin d’un shell pour se connecter.
3. Utilisateur simple : Comptes standard pour se connecter et utiliser les ressources du
système.
Prompt de commande : Le prompt indique avec quel utilisateur on est connecté :
● Si le prompt se termine par $, l'utilisateur est normal.
● Si le prompt se termine par #, l'utilisateur est root.
Modification des privilèges avec sudo : Pour permettre à un utilisateur d'exécuter des
commandes en tant que root, on modifie le fichier /etc/sudoers. Par exemple, pour donner à
l'utilisateur user1 l'accès complet à sudo, on ajoute la ligne suivante :
user1 ALL=(ALL:ALL) ALL
Connexion à un compte utilisateur : Lors de la mise en route du système, on peut se
connecter à un compte utilisateur (sauf celui de root). Une fois connecté, on peut utiliser la
commande su pour changer de compte.
Commande su : La commande su (pour "substitute user" ou "switch user") permet de basculer
d'un utilisateur à un autre sans se déconnecter de la session en cours. Elle est souvent utilisée
pour obtenir des privilèges administratifs ou pour travailler sous un autre compte.
1. su (sans paramètre) : Permet de se connecter en tant que super-utilisateur (root).
Il est demandé le mot de passe de root.
2. su nom_utilisateur : Permet de se connecter en tant que l'utilisateur spécifié
tout en restant dans le répertoire courant. Il est demandé le mot de passe de
l'utilisateur cible.
3. su - nom_utilisateur : Permet de se connecter en tant que l'utilisateur
spécifié et de se rendre directement dans son répertoire personnel, comme si on
se connectait directement en tant que cet utilisateur.
Déconnexion du compte : Pour revenir à l'utilisateur précédent et se déconnecter du compte
courant, il suffit d'utiliser la commande exit
Gestion des mots de passe :
● Vérification de l'identité : Les mots de passe sont utilisés pour vérifier l'identité des
utilisateurs avant de leur accorder l'accès au système.
● Masquage du mot de passe : Lors de la saisie, le mot de passe est masqué pour
empêcher sa visibilité par des observateurs.
● Complexité des mots de passe : Un mot de passe doit être complexe (lettres
majuscules et minuscules, chiffres, caractères spéciaux) mais mémorisable.
● Hachage des mots de passe : Les mots de passe sont hachés avec des algorithmes
comme MD5, DES, ou SHA-256 pour assurer leur sécurité.
● Changement de mots de passe : Il est recommandé de changer régulièrement les
mots de passe pour minimiser les risques.
● Paramètres de longueur dans /etc/login.defs : Le fichier /etc/login.defs
permet de définir la longueur minimale (PASS_MIN_LEN) et maximale (PASS_MAX_LEN)
des mots de passe.
○ Exemple : PASS_MIN_LEN 8 impose une longueur minimale de 8
caractères.
Paramètres de mot de passe dans /etc/login.defs concernent les mots de passe
des utilisateurs locaux du système:
● PASS_MAX_DAYS 9999 : Nombre maximum de jours avant l'expiration du mot de
passe.
● PASS_MIN_DAYS 0 : Nombre minimum de jours entre deux changements de mot de
passe (0 signifie pas de délai).
● PASS_WARN_AGE 7 : L'utilisateur est averti 7 jours avant l'expiration de son mot de
passe.
Groupes sous Linux :
● Groupe primaire : Chaque utilisateur a un groupe primaire, utilisé par défaut comme
groupe propriétaire pour les fichiers créés par cet utilisateur.
○ Exemple : L'utilisateur "esprit" a le groupe primaire "student", donc les
fichiers qu'il crée appartiendront à "student".
● Groupe secondaire : Un utilisateur peut appartenir à plusieurs groupes secondaires, ce
qui lui permet d'accéder aux fichiers appartenant à ces groupes.
○ Exemple : L'utilisateur "esprit" peut être dans le groupe secondaire
"project", lui donnant des permissions sur les fichiers de ce groupe.
Les fichiers /etc/passwd, /etc/shadow, /etc/group et /etc/gshadow sont des fichiers clés
dans la gestion des utilisateurs et des groupes sur un système Linux. Voici un résumé
de leur rôle et de leur contenu :
1. /etc/passwd
Ce fichier contient la liste des utilisateurs du système et leurs informations de base.
Chaque ligne comprend sept champs séparés par des deux-points (:) :
john:x:1001:1001:John Doe,Room 123,1234567890,john.doe@example.com:/home/john:/bin/bashsh
● USERNAME : Le nom d'utilisateur.
● PASSWORD : Indique que le mot de passe est stocké dans /etc/shadow (marqué
par x).
● UID : Identifiant unique de l'utilisateur.
● GID : Identifiant du groupe principal de l'utilisateur.
● Commentaire/GECOS : Informations supplémentaires (comme le nom réel,
l'adresse, etc.).
● HOMEDIR : Le répertoire personnel de l'utilisateur.
● SHELL : Le programme qui sera lancé lors de la connexion (souvent un shell
comme /bin/bash).
2. /etc/shadow
Ce fichier contient des informations plus sensibles, notamment les mots de passe
hachés et les paramètres de sécurité liés au mot de passe (par exemple, date de
changement, âge minimum/maximum du mot de passe). Il est protégé et ne peut être
consulté que par l'utilisateur root. Les champs sont :
● USERNAME : Le nom d'utilisateur (identique à celui dans /etc/passwd).
● PASSWORD : Le mot de passe haché (ou un caractère spécial comme * ou ! pour
indiquer un compte verrouillé).
● LASTCHANGE : Le nombre de jours depuis le dernier changement de mot de
passe.
● MINAGE : L'âge minimum du mot de passe (en jours).
● MAXAGE : L'âge maximum du mot de passe (en jours).
● WARN : Nombre de jours avant expiration pour avertir l'utilisateur.
● INACTIVE : Nombre de jours après expiration avant que le compte soit désactivé.
● EXPDATE : Date d'expiration du compte, exprimée en jours depuis le 1er janvier
1970.
3. /etc/group
Ce fichier définit les groupes d'utilisateurs du système. Chaque ligne contient quatre
champs :
● NAME : Le nom du groupe.
● PASSWORD : Ancien emplacement pour le mot de passe du groupe,
généralement marqué par x.
● GID : L'identifiant du groupe.
● MEMBERS : Liste des utilisateurs faisant partie du groupe, mais comme membres
secondaires (les membres principaux sont dans /etc/passwd).
4. /etc/gshadow
Le fichier /etc/gshadow contient des informations sensibles sur les groupes, y compris
les mots de passe hachés des groupes. Seul root peut le lire et le modifier. Les champs
sont :
● NOM_GROUP : Le nom du groupe, identique à celui dans /etc/group.
● PASSWORD : Le mot de passe haché du groupe, ou * ou ! pour indiquer qu'il n'y
a pas de mot de passe.
● Administrateurs : Liste des utilisateurs ayant des privilèges d'administration sur
le groupe.
● Membres : Liste des utilisateurs membres du groupe.
Formes des mots de passe dans /etc/shadow et /etc/gshadow :
● * ou ! : Le compte est verrouillé et ne peut pas être utilisé pour se connecter.
● Hachage du mot de passe : Cela indique que le mot de passe est valide et stocké
sous forme hachée.
● Champ vide : Indique qu'il n'y a pas de mot de passe configuré pour ce compte ou
groupe.
Comment modifier les informations :
● Pour modifier le champ GECOS dans /etc/passwd, vous pouvez utiliser la
commande chfn.
● Pour changer un mot de passe utilisateur, vous pouvez utiliser passwd ou
modifier directement le fichier /etc/shadow avec des outils appropriés comme
vipw et vigr pour les fichiers respectifs.
Remarque :
● Il est fortement déconseillé de modifier ces fichiers manuellement. Il est
préférable d'utiliser les commandes appropriées (comme useradd, groupadd,
passwd, etc.) pour éviter toute erreur qui pourrait compromettre la sécurité du
système
Gestion des Utilisateurs
1. Commandes Principales
1.1. useradd - Ajouter un utilisateur
● Syntaxe : useradd [options] NOM_UTILISATEUR
○
● Exemple :
sudo useradd -u 1009 -m user1
● Change sudo useradd -D -option valeur les valeurs qui seront
appliquées aux utilisateurs créés ensuite (exemple : shell,
répertoire, groupe, etc.).
1.5. usermod - Modifier un utilisateur
● Syntaxe : usermod [options] NOM_UTILISATEUR
●
● Exemple :
sudo usermod -u 1008 user1
1.2. passwd - Gérer les mots de passe
● Syntaxe : passwd [options] [NOM_UTILISATEUR]
● Exemple :
sudo passwd user1
●
1.3. chage - Gérer la validité des mots de passe
● Exemple :
sudo chage -E 2024-12-31 user1
1.4. id - Afficher les informations d 'un utilisateur
● Syntaxe : id [NOM_UTILISATEUR]
● Exemple :
id user1
1.6. userdel - Supprimer un utilisateur
● Syntaxe : userdel [options] NOM_UTILISATEUR
● Options principales :
○ -r : Supprimer le répertoire personnel.
○ -f forcer la suppression
● Exemple :
sudo userdel -r user1
Option Commandes où elle apparaît Desc
-m useradd, usermod Crée un répertoire personnel (ou déplac
-u useradd, usermod Définit ou modifie l'UID (identifiant u
-g useradd, usermod Définit ou modifie le GID principal (gr
-G useradd, usermod Ajoute ou modifie les groupes secondair
-d useradd, usermod Définit ou modifie le répertoire person
-s useradd, usermod Définit ou modifie le shell de l'utilis
-c useradd, usermod Ajoute ou modifie un commentaire (comme
-e passwd, usermod Expire immédiatement le mot de passe ou
Action Commandes et Opt
uiller/Déverrouiller un mot de passe passwd -l : Verrouille le mot de passe.
passwd -u : Déverrouille le mot de passe.
usermod -L : Verrouille le compte utilisateur.
usermod -U : Déverrouille le compte utilisateur.
ir ou gérer un mot de passe passwd NOM_UTILISATEUR : Définit ou change le mot de
usermod -p : Définit un mot de passe chiffré (hâché)
gurer les politiques de mot de passe passwd -n : Définit l’âge minimal du mot de passe.
passwd -x : Définit l’âge maximal.
passwd -w : Avertissement avant expiration.
passwd -i : Nombre de jours avant désactivation aprè
chage -m : Durée minimale avant changement.
chage -M : Durée maximale.
chage -W : Délai d’avertissement avant expiration.
chage -E : Date d’expiration du compte.
chage -I : Délai d’inactivité après expiration.
les groupes secondaires usermod -aG <groupes> : Ajoute un utilisateur à des
ir ou modifier des paramètres useradd -p : Définit un mot de passe chiffré à la cr
sateur
usermod -p : Modifie un mot de passe chiffré.
Gestion des Groupes
1. Commandes Principales
1.1. groupadd - Ajouter un groupe
● Syntaxe : groupadd [options] NOM_GROUPE
● Options principales :
○ -g : Spécifier un GID.
● Exemple :
sudo groupadd -g 1009 grp1
1.2. gpasswd - Gérer les groupes
● Exemple :
sudo gpasswd grp1
1.3. groupmod - Modifier un groupe
● Exemple :
sudo groupmod -n newname oldname
1.4. groupdel - Supprimer un groupe
● Syntaxe : groupdel NOM_GROUPE
● Exemple :
sudo groupdel grp1
1.5. newgrp - Changer temporairement le groupe principal
● Exemple :
newgrp grp1
● groups :
○ Affiche uniquement les groupes (principal + secondaires) d’un utilisateur.
Exemple :
groups user1
○ Sortie : user1 sudo developers
Gestion des Droits et Permissions
1. Commandes pour Propriétaire et Groupe
1.1. chown - Changer le propriétaire
● Syntaxe : chown [propriétaire][:groupe] fichier
● Exemple :
sudo chown admin:students myfile
1.2. chgrp - Changer le groupe proprietaire
● Syntaxe : chgrp [groupe] fichier
● Exemple :
sudo chgrp students myfile
2. Droits Spéciaux
2.1. SUID (Set User ID)
Le SUID est une permission spéciale qui permet à un programme de s'exécuter avec les droits
de son propriétaire, pas ceux de la personne qui l'utilise. Par exemple, le programme passwd
utilise le SUID pour modifier les mots de passe, car il a besoin de droits élevés.
Par défaut : Un programme s’exécute avec les droits de l’utilisateur qui le
lance.
Avec SUID : Un programme s’exécute avec les droits de son propriétaire
Seul le propriétaire ou l’administrateur peut attribuer le droit SUID.
2.2. SGID (Set Group ID)
Le SGID (Set Group ID) est un bit de permission qui, lorsqu'il est activé sur un répertoire, force
tous les fichiers créés dans ce répertoire à hériter du groupe propriétaire du répertoire, au lieu
du groupe primaire de l'utilisateur qui les crée.
À la base : Quand un fichier exécutable est lancé, il s'exécute avec les droits du
groupe de la personne qui l’exécute.
Avec SGID activé : Le fichier s'exécutera avec les droits du groupe
propriétaire du fichier, peu importe qui l'exécute.
2.3. Sticky Bit
Lorsqu’un sticky bit est appliqué à un répertoire, un fichier dedans peut être visualisé et modifié,
mais seul son propriétaire (et le root) peuvent le supprimer. Le sticky bit permet donc d’affecter
une protection contre l’effacement du contenu d’un répertoire.
Sans Sticky Bit : Tout utilisateur avec les droits d’écriture sur le répertoire peut
supprimer ou modifier n’importe quel fichier.
Avec Sticky Bit : Seul le propriétaire du fichier ou du répertoire peut supprimer
ou modifier un fichier.
●
Emma crée un fichier.
● Propriétaire : Emma. Elle a le contrôle total sur ce fichier (lecture, écriture,
exécution, selon les permissions).
● Groupe propriétaire : Amouna. Les membres du groupe Amouna peuvent accéder
au fichier selon les permissions accordées au groupe.
Avec SGID (Set Group ID) :
Le SGID modifie le comportement pour que le fichier s’exécute avec les droits du groupe
propriétaire (Amouna), peu importe qui l'utilise.
Effet :
● Si Bob, un utilisateur qui appartient au groupe Amouna, utilise ce fichier, le
programme ou les actions liées à ce fichier s'exécutent avec les droits du groupe
Amouna, pas avec les droits du groupe principal de Bob.
Avec SUID (Set User ID) :
Le SUID modifie le comportement pour que le fichier s’exécute avec les droits du
propriétaire (Emma), peu importe qui l'utilise.
Effet :
● Si Bob exécute ce fichier, même si Bob est un utilisateur normal, le fichier
s'exécutera avec les droits de Emma, le propriétaire du fichier.
Résumé des valeurs octales :
Droit Valeur Effet
SUID 4 Exécuter avec les privilèges du propriétaire du fichier.
SGID 2 Exécuter avec les privilèges du groupe, ou hériter du groupe dans
un répertoire.
Sticky Bit 1 Empêcher la suppression de fichiers d'autres utilisateurs dans un
répertoire.
CHAP4
1. Les Fichiers sous Linux
● Principe Fondamental : Sous Linux, tout est considéré comme un fichier.
● Structure d’un Fichier :
○ Contient les données et des métadonnées associées.
○ Chaque fichier est identifié par un nom unique et un inode unique.
● Opérations : Ouverture, fermeture, lecture, écriture.
● Types de Fichiers :
○ Fichier ordinaire (-)
○ Répertoire (d)
○ Lien symbolique (l)
2. Les Inodes
Définition et Importance
● Un inode est une structure de données contenant les métadonnées d’un fichier ou
répertoire.
● Associé à un numéro unique dans un système de fichiers.
Informations Contenues
● Bloc de disque pour le stockage des données.
● Type de fichier.
● Taille du fichier.
● Identifiant du propriétaire (UID) et du groupe (GID).
● Permissions d’accès (lecture, écriture, exécution).
● Horodatages (dernier accès, modification, etc.).
Fonctionnement
● Attribution : Lors de la création d’un fichier, un inode est attribué.
○ Déplacement dans le même système : le numéro d’inode reste le même.
○ Déplacement vers un autre système : un nouvel inode est attribué.
● Gestion : Les inodes sont stockés dans une table unique pour un accès rapide.
Commandes Utiles
ls -a : Liste tous les fichiers, y compris les fichiers cachés
1. Afficher les inodes d’un répertoire : ls -i
2. Détails d’un fichier : ls -l -i
3. Vérification des inodes utilisés : df -i
4. Informations sur un fichier : stat [nom_du_fichier]
FS : Comment les fichiers sont stockés et organisés sur un disque.
FHS : Règles d'organisation des fichiers dans un système Linux (hiérarchie et
logique).
Concept Bibliothèque
L'architecture physique des
rayons
S L'organisation des types de
livres
3. Systèmes de Fichiers (FS)
Définition
● Méthode pour organiser et stocker des données sur des supports.
● Tous les systèmes de fichiers sont unifiés dans une seule arborescence logique sous
Linux.
Structure Interne
● Superbloc : Informations globales sur le système de fichiers.
● Table des Inodes : Contient les métadonnées des fichiers.
● Blocs de Données : Contiennent les données réelles.
Types de Systèmes de Fichiers
● Ext2 : Ancien, non journalisé, stable.
● Ext3 : Ajout de la journalisation, conversion facile depuis Ext2.
● Ext4 : Amélioré, supporte des fichiers/partitions plus grands.
● ReiserFS : Optimisé pour les petits fichiers, mais énergivore.
● XFS : Performant pour les très gros fichiers.
● JFS : Rapide, efficace, souvent utilisé en entreprise.
● FAT32 et NTFS : Compatibles avec Windows ; NTFS supporté sous Linux via ntfs-3g.
Comparaison des FS
Système de Taille Max Taille Max Partition Journalis Gestion des
Fichiers Fichier é Droits
Ext2 2 TiB 4 TiB Non Oui
Ext3 2 TiB 4 TiB Oui Oui
Ext4 16 TiB 1 EiB Oui Oui
FAT32 4 GiB 8 TiB Non Non
NTFS 16 TiB 256 TiB Oui Oui
4. Standard de la Hiérarchie des Systèmes de Fichiers (FHS)
Le Standard de la Hiérarchie des Systèmes de Fichiers (FHS) est une convention qui définit
la structure et l'organisation des répertoires dans les systèmes d'exploitation basés sur
Unix/Linux. Il standardise où et comment les fichiers système, les bibliothèques, les
exécutables et les données des utilisateurs sont placés.
Objectifs
● Normalisation de l’organisation des fichiers et répertoires sous Linux.
● Assure cohérence, navigabilité et facilité de gestion.
Structure Principale
● Racine (/) : Point de départ de tous les répertoires.
● Commandes utiles : tree pour visualiser l’arborescence.
Répertoire Contenu
/bin Commandes utilisées par tous les
utilisateurs
/etc Fichiers de configuration
/home Répertoires personnels des utilisateurs
/var Fichiers variables (logs, spool, etc.)
/usr Programmes et bibliothèques
/tmp Fichiers temporaires
La Journalisation
Des systèmes de fichiers tels que ext3 et ext4 (extensions du système de fichiers ext2 pour
Linux) utilisent des techniques de journalisation pour garantir l’intégrité des données.
Définition de la journalisation
La journalisation est une technique utilisée dans les systèmes de fichiers pour améliorer la
fiabilité et la récupération des données en cas de panne du système ou d'interruption
inattendue, comme une coupure de courant.
L’idée principale consiste à maintenir un journal (un enregistrement séquentiel des opérations
de modification) avant de les appliquer au système de fichiers lui-même.
Objectifs de la journalisation :
● Minimiser les risques de corruption du système de fichiers en cas de panne ou d'arrêt
brutal.
● Assurer la cohérence des données et faciliter leur récupération après une défaillance.
Fonctionnement de la journalisation
Voici les principales étapes du processus de journalisation :
1. Enregistrement des opérations : Avant d’appliquer une opération de modification
(comme l’écriture ou la suppression d’un fichier) au système de fichiers principal, celle-ci
est enregistrée dans un journal.
2. Application différée : Une fois l’opération enregistrée, elle est appliquée au système
principal. Cette application peut être différée selon les ressources disponibles.
3. Validation et marquage : Lorsque l’opération est appliquée avec succès, elle est
validée et marquée comme complète dans le journal.
4. Récupération en cas de panne : En cas de panne, le journal est consulté lors du
redémarrage pour identifier les opérations incomplètes. Ces dernières sont alors
réappliquées pour garantir l’intégrité des données.
Partitionnement et Gestion des Disques sous Linux
Lorsqu’on travaille avec des disques sous Linux, il est essentiel de comprendre comment ils
sont organisés et gérés. Le partitionnement est un processus clé qui permet de diviser un
disque physique en plusieurs segments logiques appelés partitions, afin de mieux organiser
les données et les systèmes de fichiers.
Définition d'une partition
Une partition est une division logique d'un disque dur ou d’un autre périphérique de stockage.
Chaque partition peut contenir un système de fichiers, ce qui permet de mieux organiser et
gérer les données. Cela est utile pour :
● Installer plusieurs systèmes d’exploitation.
● Séparer les données utilisateur des fichiers système.
Nommage des partitions sous Linux
Sous Linux, le système de nommage des partitions reflète le type de disque ainsi que l’ordre
dans lequel les disques sont connectés.IDE, SATA, SCSI sont des interfaces de connexion,
pas des types de disque.
1. Disque IDE :
○ Le disque maître sur la première nappe est nommé hda.
○ Le disque esclave est hdb.
○ Sur la deuxième nappe IDE, les disques sont nommés hdc et hdd.
2. Disques SATA, SCSI, ou USB :
○ Les disques SATA sont nommés sdX (ex. : sda, sdb).
○ Chaque partition sur un disque est identifiée par un numéro (ex. : sda1 pour la
première partition).
● Tableau Comparatif : HDD vs SSD
Caractéristique HDD (Disque Dur) SSD (Disque à État Sol
Fonctionnement Plateaux magnétiques rotatifs et tête de Puces de mémoire flash (pas de
lecture/écriture mobiles)
Vitesse Plus lent (temps d’accès élevé) Très rapide (temps d’accès quas
instantané)
Durabilité Moins durable (sensible aux chocs, pièces Plus durable (résistant aux choc
mobiles)
Bruit Bruyant (mouvement des plateaux et de la Silencieux (aucune pièce mobile
tête)
Consommation Plus élevé Plus faible
d’énergie
Prix par Go Moins cher (idéal pour le stockage volumineux) Plus cher
Capacité maximale Jusqu’à 20 To ou plus Généralement jusqu’à 4 To (bien
courante augmente)
Utilisation idéale Archives, sauvegardes, stockage de données Systèmes rapides, jeux, logiciels
volumineuses
Outils de Gestion des Partitions sous Linux
1. fdisk : Pour des disques anciens ou des systèmes BIOS avec une table MBR.
2. gdisk : Pour des disques modernes avec GPT (grandes tailles, systèmes UEFI).
3. parted : Pour une gestion avancée des partitions sur MBR et GPT
(redimensionnement, modification, etc.).
Gestion des partitions avec parted : Tableau des commandes
Action Commande avec parted Description
Lister les options de parted sudo parted /dev/sda Affiche toutes les commandes disponi
puis (parted) help dans l'interface interactive de parted
Afficher la liste des partitions (parted) print Affiche la table des partitions existante
existantes disque.
Créer une nouvelle partition (parted) mkpart Utilisé pour créer une nouvelle partitio
Exemple :
- Partition name : /dev/sda1
- File system type : ext2
- Start : 4800
- End : 5000.
Réafficher la table des (parted) print Vérifie et affiche les modifications effe
partitions sur la table des partitions.
Quitter parted (parted) quit Quitte l'interface interactive de parte
Action Commande avec fdisk Commande ave
Lancer l'outil sudo fdisk /dev/sdb sudo gdisk /dev/sd
Afficher les options Command (m for help): m Command (? for hel
disponibles
Créer une nouvelle partition Command (m for help): n Command (? for hel
Lister les partitions Command (m for help): p Command (? for hel
existantes
Changer le type de partition Command (m for help): t Command (? for hel
Renommer une partition Non pris en charge Command (? for hel
Afficher les détails d’une Non pris en charge Command (? for hel
partition
Supprimer une partition Command (m for help): d Command (? for hel
Sauvegarder les Command (m for help): w Command (? for hel
modifications
Annuler sans sauvegarder Command (m for help): q Command (? for hel
Lister les types de partitions Command (m for help): L Command (? for hel
Vérifier la table des sudo fdisk -l /dev/sdb sudo gdisk -l /dev
partitions
Quand utiliser chaque outil :
1. fdisk (MBR) :
○ Disques plus petits (≤ 2 To).
○ Systèmes anciens utilisant le BIOS.
○ Si vous avez besoin d’un maximum de 4 partitions primaires ou d’une partition
étendue.
2. gdisk (GPT) :
○ Disques plus grands (> 2 To).
○ Systèmes modernes utilisant UEFI.
○ Si vous avez besoin de plus de 4 partitions ou si vous travaillez sur des
disques récents.
8200 – 8318 Linux (8300 Linux file system) / ef00 EFI système partition / ef02 BIOS boot
partition
Afficher la table de partitions GPT
Pour afficher la table de partitions d'un disque, utilisez la commande suivante :
$ sudo gdisk -l /dev/sda
Lorsque gdisk démarre, il effectue une analyse de quatre types de tables de partition existantes
et affiche les résultats :
● MBR (Master Boot Record): Système de partitionnement classique.
● BSD (Berkeley Standard Distribution): Utilisé sur certains systèmes BSD (FreeBSD,
OpenBSD, etc.).
● APM (Apple Partition Map): Utilisé sur les anciens systèmes Macintosh.
● GPT (GUID Partition Table): Système moderne de partitionnement.
Les analyses BSD et APM indiquent si elles sont présentes ou non. Pour MBR et GPT, les états
suivants peuvent être signalés :
Ce sont différents états possibles des tables de partition (MBR ou GPT) sur un disque. Voici
une explication simple :
1. Pour MBR :
○ Le disque peut être configuré avec MBR uniquement, un MBR protecteur, un
MBR hybride, ou ne pas avoir de MBR (Non présent).
2. Pour GPT :
○ Le disque peut avoir une table GPT valide (Présent), ne pas avoir de table GPT
(Non présent), ou avoir une table GPT endommagée.
LVM : Logical Volume Manager
LVM (Logical Volume Manager) est un système qui permet de gérer l'espace de stockage de
manière flexible et dynamique, sans être limité par les partitions fixes.
Structure de LVM
● Volumes physiques (PV) : Disques ou partitions utilisés par LVM.
● Groupes de volumes (VG) : Ensemble de PV combinés.
● Volumes logiques (LV) : Partitions virtuelles créées à partir des VG.
Avantages :
1. Redimensionnement facile : Tu peux agrandir ou réduire les volumes sans tout
réorganiser.
2. Flexibilité : Pas de limitation au nombre de partitions (comme avec MBR).
Inconvénients :
1. Risque en cas de panne : Si un disque physique tombe en panne, les données
peuvent être perdues (à moins d'utiliser RAID pour sécuriser).
2. Complexité : Un peu plus compliqué à gérer que les partitions classiques.
Différence clé :
● Partition physique : Simple division logique du disque, indépendante de LVM.
● Volume physique : Une partition (ou un disque entier) préparée pour être utilisée dans
un système LVM.
Pratique avec LVM
1. Installation de LVM
Installez les outils LVM :
sudo apt-get install lvm2
2. Préparer les disques pour LVM
Listez les disques disponibles :
lsblk
Créez un volume physique :
sudo pvcreate /dev/sdc
Créez un groupe de volumes :
sudo vgcreate my_vg /dev/sdc /dev/sdd
Ici, les deux volumes physiques (/dev/sdc et /dev/sdd) seront inclus
dans le même groupe de volumes (my_vg).
Affichez les propriétés du VG :
sudo vgdisplay my_vg
3. Créer un volume logique
Créez un LV de 1 Go :
sudo lvcreate -n vol1 -L 1G my_vg
Affichez les propriétés du LV :
sudo lvdisplay /dev/my_vg/vol1
RAID avec LVM : Simplifié
● RAID : Technologie qui répartit ou copie les données sur plusieurs disques pour éviter la
perte en cas de panne.
● LVM (Logical Volume Manager) : Outil qui rend la gestion des disques plus flexible
(redimensionnement, ajout facile de disques).
● Ensemble : RAID + LVM offrent protection des données (RAID) et flexibilité (LVM).
Exemple d'usage :
● RAID sauvegarde les données sur plusieurs disques.
● LVM permet de gérer facilement la taille des volumes.
avant d'utiliser un disque brut sous Linux, voici ce qu'il faut faire :
1. Partitionner :
Diviser le disque en partitions pour créer des espaces logiques où les données seront
stockées.
2. Formater :
Appliquer un système de fichiers (ext4, xfs, etc.) sur les partitions pour organiser les
données.
3. Monter :
Associer les partitions à un répertoire (point de montage) pour les rendre accessibles
Création d’un système de fichiers
Après avoir créé une partition ou un volume logique, formatez-le (préparer ce disque ou cette
partition pour stocker des données en y créant un système de fichiers.) avec un système de
fichiers adapté.
1. Créer un système de fichiers
mkfs : Pour des tâches simples et rapides.
mke2fs : Pour un contrôle avancé des systèmes de fichiers ext.
Pour ext3 :
mkfs.ext3 /dev/sdb1
Pour ext4 :
sudo mke2fs -t ext4 /dev/sdb2
mkfs -t ext3 /dev/sdb1
Pour un volume logique avec LVM :
● Si vous utilisez LVM, formatez directement le volume logique :
mkfs.ext4 /dev/<vg_name>/<lv_name>
2. Vérifier le système de fichiers
Affichez le type et le point de montage des partitions (est l'endroit où cette partition devient
accessible dans l'arborescence du système de fichiers sous Linux.) :
lsblk -f
Gestion des Systèmes de Fichiers sous Linux
1. Vérification des Systèmes de Fichiers avec dumpe2fs
Présentation
Après la création d’un système de fichiers, il est crucial de vérifier ses paramètres pour garantir
son bon fonctionnement. L’outil dumpe2fs permet d’obtenir des informations détaillées sur les
partitions.
Afficher les détails d’un système de fichiers
$ sudo dumpe2fs /dev/sdb2
Lister les blocs défectueux
$ sudo dumpe2fs -b /dev/sdb2
2. Modification des Systèmes de Fichiers avec tune2fs
Présentation
Tune2fs permet d’ajuster les caractéristiques d’un système de fichiers ext2/ext3/ext4(ext2,
ext3 et ext4 sont des types de systèmes de fichiers utilisés principalement sous Linux pour
organiser et gérer les données sur un disque.)
Options principales
Convertir ext2 en ext3 :
$ sudo tune2fs -j /dev/sdb2
Attribuer une étiquette (label) :
$ sudo tuze2fs -L "Hello3A" /dev/sdb2
Afficher le contenu du superbloc :
$ sudo tune2fs -l /dev/sdb2
3. Vérification et Réparation avec fsck
Présentation
fsck est utilisé pour analyser et corriger les erreurs dans un système de fichiers sur une
partition demontée
Vérifier et réparer :
$ sudo fsck /dev/sdb2
Forcer la correction de fichiers corrompus :
$ sudo fsck -i /dev/sdb2
Remarque : Ne jamais exécuter fsck sur une partition montée.
Montage temporaire : On utilise la commande mount pour rendre un système de fichiers
accessible. Mais cette action est temporaire : dès que l'ordinateur redémarre, le montage est
annulé, et il faut le refaire.
Montage permanent : On configure l'ordinateur pour qu'il monte automatiquement un système
de fichiers à chaque démarrage, sans intervention manuelle. Cela se fait en ajoutant une ligne
dans un fichier spécial appelé /etc/fstab. Ainsi, le montage reste actif tant que l'ordinateur
fonctionne.
4. Montage et Démontage des Systèmes de Fichiers
Que monte-t-on ? Une partition, un disque, un volume logique.
Où le monte-t-on ? Dans un répertoire (point de montage) comme /mnt/data.
But : Rendre la partition/disque accessible dans l’arborescence Linux. : Rendre un disque
accessible dans l’arborescence Linux signifie que son contenu est attaché à un répertoire
(point de montage) et peut être utilisé comme s’il faisait partie du système de fichiers.
Le montage consiste à ajouter un disque ou une partition au système pour qu'il soit accessible,
tandis que le démontage le rend inaccessible temporairement.
Montage temporaire avec mount
Monter une partition :
$ sudo mount /dev/sdb1 /3A
Vérifier les partitions montées :
$ df -h
Démontage avec umount
$ sudo umount /dev/sdb1
5. Montage Permanent avec /etc/fstab (lorsque l'ordinateur démarre, le
disque ou la partition sera automatiquement ajouté et accessible au
système, sans que l'utilisateur ait besoin de le faire manuellement.)
Présentation
Pour garantir un montage automatique au démarrage, configurez le fichier /etc/fstab.
Configurer /etc/fstab
Créer un point de montage :
$ sudo mkdir /3A
L'option -p de la commande mkdir :
● Crée tous les répertoires parents nécessaires si ceux-ci
n'existent pas.
● Évite les erreurs si le répertoire existe déjà.
Vous ajoutez une ligne dans le fichier /etc/fstab :
echo "/dev/sda1 /mnt/data ext4 defaults 0 0" >> /etc/fstab
auto est utilisé ici pour s'assurer que la partition est montée
automatiquement au démarrage.
defaults aurait aussi fonctionné, mais auto est plus explicite dans ce
cas.
Explication de la ligne :
● /dev/sda1 : Le disque ou la partition à monter.
● /mnt/data : Le point où le disque sera accessible.
● ext4 : Type de système de fichiers.
● defaults : Options par défaut (lecture/écriture activée, etc.).
● 0 0 : Indique que ce disque ne sera pas sauvegardé ni vérifié au démarrage.
Champ 0 (Dump) :
● Indique si la partition est incluse dans les sauvegardes avec la commande dump.
○ 0 : Pas de sauvegarde.
○ 1 : Sauvegarde incluse.
Champ 2 (Vérification avec fsck) :
● Indique l'ordre de vérification au démarrage avec fsck.
○ 0 : Pas de vérification.
○ 1 : Vérifier en premier (partition racine /).
○ 2 : Vérifier après la racine.
Appliquer immédiatement les modifications :
$ sudo mount -a
Vérifier le montage :
$ df -h
Cette configuration assure le montage automatique de /dev/sdb1 sur /3A à
chaque démarrage.
1. Définition et Utilité des Quotas
Les quotas permettent de limiter l'utilisation des ressources disque (espace disque ou nombre
d'inodes) par utilisateur ou groupe, évitant ainsi la monopolisation des ressources.
2. Types de Limites
● Nombre d'inodes : Limite sur le nombre de fichiers qu'un utilisateur peut créer.
● Nombre de blocs : Limite sur l'espace disque en blocs.
● Soft Limit : Limite dépassable temporairement avec avertissement.
● Hard Limit : Limite absolue, non dépassable.
3. Configuration des Quotas
Installation des outils :
sudo apt-get install quota
1. Configuration dans /etc/fstab :
Ajouter les options usrquota et/ou grpquota pour les partitions concernées.
Avant modification :
UUID=xxxx-yyyy-zzzz /home ext4 defaults 0 2
Après modification :
UUID=xxxx-yyyy-zzzz /home ext4 defaults,usrquota,grpquota 0 2
usrquota seul : Contrôle individuel des utilisateurs.
grpquota seul : Contrôle collectif des groupes
Remontage des systèmes de fichiers :
sudo mount -a
Vérification et mise à jour :
sudo quotacheck -aucvm
○ -a : Tous les systèmes de fichiers.
○ -u : Vérifie les quotas utilisateur.
○ -c : Crée les fichiers de quotas si absents.
○ -v : Mode verbeux.
○ -m : Forcer la vérification même si les systèmes de fichiers sont montés en
lecture-écriture.
Activation des quotas :
sudo quotaon -av
○ -a : Active les quotas sur toutes les partitions configurées.
○ -v : Affiche les détails des actions.
1. Activer les quotas sur le système de fichiers
1. Modifier le fichier /etc/fstab :
○ Ajoutez les options usrquota et grpquota pour la partition où les quotas
doivent être appliqués (exemple : /dev/sda1).
Exemple :
/dev/sda1 /home ext4 defaults,usrquota,grpquota 0
0
Remonter la partition pour activer les quotas :
sudo mount -o remount /home
Initialiser les fichiers de quotas :
sudo quotacheck -cum /home
sudo quotaon /home
2. Configurer les limites pour l'utilisateur
Lancer l'éditeur de quotas pour l'utilisateur esprit :
sudo edquota -u esprit
1. Modifier les limites dans le fichier :
Exemple de fichier ouvert :
Disk quotas for user esprit (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 20000 15000 18000 10 15 15
Sauvegarder et quitter l’éditeur :
○ Enregistrez les modifications (généralement avec CTRL+O, puis CTRL+X).
3. Configurer la période de grâce
Lancer l’éditeur de période de grâce :
sudo edquota -t
1. Modifier les périodes de grâce :
Exemple de fichier ouvert :
rust
Grace period before enforcing soft limits for blocks: 7days
Grace period before enforcing soft limits for inodes: 7days
○ Changer les valeurs :
■ Remplacez 7days par une autre valeur, comme 10days ou 12hours.
○ Sauvegardez et quittez.
4. Tester les quotas
Vérifier les quotas pour l'utilisateur esprit :
quota -u esprit
Exemple de sortie :
Disk quotas for user esprit (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 20000 15000 18000 10 15 15
1. Tester avec des fichiers :
Connectez-vous en tant qu'utilisateur esprit :
su esprit
Créez des fichiers pour tester les limites :
touch file1 file2 file3 file4 file5
○ Si vous dépassez la soft limit, un avertissement apparaît.
Lorsque vous atteignez la hard limit :
touch file6
○ Résultat attendu :
touch: cannot touch 'file6': Disk quota exceeded
5. Gestion et Surveillance des Quotas
Lister les quotas d'un utilisateur/groupe :
quota
Rapport détaillé des quotas :
sudo repquota -a
○ -a : Tous les systèmes de fichiers.
○ -g : Rapports pour les groupes.
○ -u : Affiche les quotas disque et inodes pour les utilisateurs.
La commande quotacheck -avug :
● Vérifie et met à jour les quotas disque pour les utilisateurs (-u) et groupes (-g).
● Analyse tous les systèmes de fichiers avec quotas activés (-a).
● Crée ou met à jour les fichiers aquota.user et aquota.group.
Elle est utilisée après avoir activé les quotas ou modifié leur configuration.
at : Exécute une tâche une seule fois à une date/heure précise.
Syntaxe :
at [heure | date | +temps]
Exemple :
at 14:00 tomorrow
cron : Exécute des tâches répétitives selon une planification définie.
Syntaxe :
* * * * * commande
Les * représentent respectivement :
● Minute (0-59)
● Heure (0-23)
● Jour du mois (1-31)
● Mois (1-12)
● Jour de la semaine (0-7, où 0 et 7 représentent dimanche)
Exécuter un script tous les jours à 14h :
● Ajouter dans le fichier crontab (crontab -e) :
bash
Copy code
0 14 * * * /path/to/script.sh
○ Exemple :
0 14 * * * /path/to/script.sh # Exécute tous les jours à
14h
Permissions typiques de /etc/shadow :
-rw-r----- 1 root shadow
● Propriétaire (root) : Lecture (r) et écriture (w).
● Groupe (shadow) : Lecture (r) uniquement.
● Autres (others) : Aucun accès (---).
Personnages :
● Papa (membre du groupe Famille).
● Maman (membre du groupe Famille).
● Enfant (membre du groupe Famille).
Contexte :
La famille utilise un répertoire commun, /famille_dossier, pour partager des fichiers :
1. Tous les fichiers doivent être accessibles à tous les membres.
2. Les fichiers créés dans ce répertoire doivent toujours appartenir au groupe
Famille.
3. Personne ne doit pouvoir supprimer les fichiers qu’il n’a pas créés.
4. Les programmes dans ce répertoire doivent pouvoir être exécutés avec les
privilèges du propriétaire (SUID).
Étapes pour configurer le dossier partagé :
1. Création du répertoire partagé :
sudo mkdir /famille_dossier
2. Création et ajout au groupe Famille :
Créer un groupe nommé Famille :
sudo groupadd Famille
Ajouter Papa, Maman, et Enfant au groupe :
sudo usermod -aG Famille Papa
sudo usermod -aG Famille Maman
sudo usermod -aG Famille Enfant
3. Changer le groupe propriétaire de /famille_dossier :
sudo chgrp Famille /famille_dossier
4. Configurer les permissions de base :
Donner un contrôle total au propriétaire et au groupe, et aucun accès aux autres :
sudo chmod 770 /famille_dossier
5. Activer le SGID (Set Group ID) :
● Pourquoi ?
○ Pour que tous les fichiers créés dans /famille_dossier héritent
automatiquement du groupe propriétaire du répertoire (Famille).
Commande :
sudo chmod g+s /famille_dossier
● Résultat :
○ Si Maman ou Enfant crée un fichier, son groupe sera automatiquement
Famille, facilitant l’accès à tous les membres.
6. Activer le Sticky Bit :
● Pourquoi ?
○ Pour empêcher Papa, Maman, ou Enfant de supprimer les fichiers créés par
quelqu’un d’autre (seul le propriétaire ou l’administrateur peut supprimer ses
fichiers).
Commande :
sudo chmod o+t /famille_dossier
● Résultat :
○ Enfant ne peut pas supprimer le fichier créé par Maman, même s'il a des
permissions d'écriture.
Ajout du SUID (Set User ID) :
● Pourquoi ?
○ Si la famille place un programme dans le dossier partagé, et que ce programme
nécessite des privilèges du propriétaire pour fonctionner (par exemple, un
script appartenant à Papa), on active le SUID.
Commande :
sudo chmod u+s /famille_dossier/mon_programme
● Résultat :
○ Si Enfant exécute le programme mon_programme, il s’exécutera avec les
privilèges de Papa (le propriétaire du fichier).
Répertoire vs Partition : Qui contient quoi ?
1. Le répertoire /home/user1/3B :
○ C'est un point de montage ou un simple répertoire dans le système de fichiers.
○ Par défaut, il n’a pas de contenu propre. Son contenu dépend de la partition
qui y est montée.
2. La partition /dev/sda3 :
○ C'est le stockage physique où les données sont réellement stockées (comme le
fichier file1).
○ Quand /dev/sda3 est monté sur /home/user1/3B, le contenu de cette
partition devient visible dans le répertoire 3B.
Donc, qui contient le fichier file1 ?
● Physiquement : Le fichier file1 est stocké sur la partition /dev/sda3.
● Visiblement : Quand /dev/sda3 est monté sur /home/user1/3B, tu peux voir et
accéder à file1 via le répertoire 3B.
Ce qui se passe dans l'exercice :
1. Avant le montage de /dev/Myspace/part1 :
○ Le répertoire 3B montre le contenu de la partition /dev/sda3 (donc file1 est
visible).
○ Physiquement, file1 est stocké sur /dev/sda3.
2. Après avoir monté /dev/Myspace/part1 sur /home/user1/3B :
○ Le répertoire 3B affiche désormais le contenu de la partition
/dev/Myspace/part1.
○ Le contenu de /dev/sda3 (dont file1) est masqué, car /dev/sda3 n'est
plus visible via 3B.
Conclusion générale :
● file1 est physiquement stocké sur /dev/sda3.
● Le répertoire 3B ne contient rien par lui-même : il reflète uniquement le contenu de la
partition montée dessus.
● Après avoir monté une nouvelle partition sur 3B, tu masques le contenu de la partition
précédente.
1. Ligne 4 : Récupérer le point de montage
partition=$(grep "usrquota" /etc/fstab | cut -d " " -f 2)
Explication :
● grep "usrquota" /etc/fstab :
○ Recherche les lignes contenant usrquota dans le fichier /etc/fstab (qui liste
les partitions montées et leurs options).
○ usrquota indique que les quotas utilisateurs sont activés sur une partition.
● cut -d " " -f 2 :
○ Découpe chaque ligne trouvée en colones, séparées par des espaces (-d " "),
et extrait la 2e colonne.
○ La 2e colonne correspond au point de montage (par exemple, /data).
● partition= :
○ Stocke le point de montage trouvé dans la variable partition.
2. Ligne 6 : Récupérer les inodes totaux
bash
inodes_totales=`repquota -u $partition | grep Testuser | tr -
s " " | cut -d" " -f 8`
Explication :
● repquota -u $partition :
○ Affiche les quotas utilisateur (-u) pour la partition spécifiée par $partition.
● grep Testuser :
○ Filtre la ligne correspondant à l’utilisateur Testuser.
● tr -s " " :
○ Réduit les espaces multiples à un seul, pour faciliter la découpe en colonnes.
● cut -d" " -f 8 :
○ Extrait la 8e colonne, qui correspond à la limite stricte des inodes (inodes
totaux alloués à Testuser).
● inodes_totales= :
○ Stocke le résultat dans la variable inodes_totales.
3. Ligne 7 : Récupérer les inodes utilisés
bash
inodes_utilises=`repquota -u $partition | grep Testuser | tr
-s " " | cut -d" " -f 6`
Explication :
● Même logique que la ligne précédente, sauf que :
○ cut -d" " -f 6 extrait la 6e colonne, qui correspond aux inodes utilisés par
Testuser.
● inodes_utilises= :
○ Stocke le résultat dans la variable inodes_utilises.
4. Ligne 8 : Calculer les inodes disponibles
bash
inodes_disponibles=$(expr $inodes_totales - $inodes_utilises)
Explication :
● expr $inodes_totales - $inodes_utilises :
○ Effectue une soustraction : les inodes totaux moins les inodes utilisés.
○ Calcule ainsi le nombre d’inodes disponibles pour Testuser.
● inodes_disponibles= :
○ Stocke le résultat dans la variable inodes_disponibles.
5. Ligne 11 : Enregistrer le résultat dans un fichier
bash
echo -e "Il reste $inodes_disponibles inodes disponibles sur
la partition $partition.\n" >> checkinode.txt
Explication :
● echo -e :
○ Affiche du texte avec prise en charge des caractères spéciaux comme \n pour
aller à la ligne.
● "Il reste $inodes_disponibles inodes disponibles sur la partition
$partition.\n" :
○ Message à afficher, incluant :
■ $inodes_disponibles : Nombre d’inodes disponibles.
■ $partition : Point de montage (par exemple, /data).
● >> checkinode.txt :
○ Ajoute le message à la fin du fichier checkinode.txt (le crée s’il n’existe pas).