Introduction à GNU/Linux
Est-ce que Linux est un système d'exploitation?
Non, il ne s'agit en réalité que d'un noyau.
Qu'est-ce qu'un noyau?
C'est la partie du système d'exploitation qui est nécessaire pour communiquer avec le matériel. Elle permet d'utiliser ce matériel comme ressource faisant partie du système.
Qui a créé le noyau Linux?
Le créateur du noyau Linux est Linus Torvalds, qui a commencé à développer Linux au printemps 1991 et a annoncé son projet publiquement le 25 août 1991. Linus s'occupe toujours de la direction du développement pour le noyau Linux.
Où est utilisé majoritairement Linux de nos jours?
Au niveau des serveurs, Linux (et Unix, le système d'exploitation des années 1970 dont Linux reprend les principes) domine largement le marché. Le chiffre exact varie beaucoup selon la source et ce qui est mesuré (serveurs web, cloud, entreprise...), mais les études s'entendent sur une majorité nette. À titre d'exemple encore plus frappant : depuis novembre 2017, la totalité des 500 supercalculateurs du classement Top500 tournent sous Linux.
Où puis-je trouver le dernier noyau?
Puis-je l'installer sans distribution?
Non. Le noyau est un fichier placé sur le disque, que le chargeur d'amorçage (par exemple GRUB) charge en mémoire centrale au démarrage. Une fois chargé, le noyau détecte le matériel, puis lance un premier programme fourni par la distribution (nommé init). Le noyau seul ne suffit donc pas : sans distribution, il n'y a aucun programme à lancer et le démarrage échoue!
Alors pourquoi utiliser le terme GNU/Linux dans tout ça?
GNU
Le projet GNU, lancé en 1983 par Richard Stallman, visait à créer un système d'exploitation libre complet. En 1991, il disposait déjà de nombreux outils système, compilateurs et librairies, mais il lui manquait un noyau fonctionnel. Le noyau Linux est venu combler ce manque : l'association des deux a donné le système GNU/Linux. Quelques exemples de logiciels GNU:
- gcc (compilateur C) : afin de pouvoir compiler le code source C en langage machine
- glibc (librairie C) : afin de ne pas être obligé de tout programmer, offrir des librairies de programmation aux développeurs de solutions logicielles
- binutils (éditeur de liens) : afin de lier des programmes à des librairies existantes
- gnome (interface graphique): afin de ne pas tout faire en ligne de commande
- screen : plusieurs sessions de terminal dans une seule fenêtre
- tar (archiveur)
- gimp (dessin de graphique)
Aujourd'hui, GNU/Linux est un système d'exploitation complet, permettant à quiconque d'utiliser son ordinateur comme sur le S.E. Windows. Mis à part certains logiciels propriétaires tels que la suite Adobe et la suite Office de Microsoft, la plupart des logiciels sont disponibles sur le système GNU/Linux.
Étant un système d'exploitation plus léger, l'utilisation d'un GNU/Linux sur un ordinateur périmé permettra d'étendre sa durée de vie tout en permettant d'être sécuritaire, car par exemple Windows 10 n'est plus supporté par Microsoft depuis le 14 octobre 2025 (sauf programme payant de mises à jour de sécurité étendues) et ses failles de sécurité ne sont plus corrigées, alors que beaucoup d'ordinateurs ne peuvent pas passer à Windows 11.
Il est désormais possible de jouer à une grande quantité de jeux de Steam grâce à Proton, un fork (une fourche de développement) de Wine. Wine n'est pas un émulateur : c'est une couche de compatibilité qui permet d'exécuter des programmes Windows sous Linux en traduisant leurs appels au système.
LFS
Si vous avez envie de voir la création d'un Linux à partir de rien, vous pouvez installer Linux From Scratch (LFS) de chez vous ; le site https://www.linuxfromscratch.org explique en détail toutes les étapes de création d'un Linux à partir de rien. Vous apprendrez alors les étapes:
- Création de la partition Linux
- Compilation (première passe) des utilitaires binaires (binutils) et du compilateur gcc, installation des en-têtes du noyau, puis compilation des librairies C et C++
- Compilation des outils complémentaires (bash, coreutils, file, findutils, gawk, grep, gzip, make, patch, sed, tar, xz), (seconde passe) des utilitaires binaires et du compilateur gcc
- ...
- Compilation du noyau, vers la fin du processus
Dans ce cours, nous ne ferons pas cet exercice mais ça reste que si vous aimez vraiment ce système d'exploitation, je vous suggère de lire beaucoup sur ce site.
En suivant ce guide, vous aurez une version de Linux fonctionnelle et vous serez comblé, cependant un problème se glisse à l'horizon...
Il n'y a aucune façon automatisée pour garder à jour notre système, les logiciels devront être gardés à jour et malheureusement vous n'aurez aucun outil pour le faire. C'est l'inconvénient du système LFS et la raison pour laquelle c'est un excellent outil pédagogique, mais pas un système en production.
Un système GNU/Linux contenant une liste de programmes initiaux fonctionnels, mais qui n'est pas tenu à jour serait criblé de failles de sécurité et deviendrait rapidement obsolète. Avec le temps, des failles de sécurité seront découvertes et corrigées autant au niveau des logiciels qu'à celui du noyau et des librairies. De nouvelles fonctionnalités auront été ajoutées aux programmes que vous utilisez, mais vous n'y aurez pas accès car il n'y a aucun moyen de garder à jour son système sans une nouvelle compilation.
Imaginez alors que vous souhaitez faire une mise à jour sur une librairie de développement:
- Quels logiciels seront impactés et lesquels nécessitent une nouvelle compilation?
- Combien de temps de compilation sera nécessaire pour compiler l'ensemble des logiciels affectés?
- Est-ce que cette mise à jour pourra être exécutée sur un serveur en production et combien de temps cela prend-il?
- Est-ce que les applications seront toujours fonctionnelles après la mise à jour?
C'est dans cette optique qu'existent les distributions.
Distribution
Une distribution est:
- un nom de distribution,
- un noyau,
- un numéro de version ou nom (certaines fois un nom comme dans le cas de Debian ou d'Ubuntu)
- un ensemble de logiciels de base,
- un outil de gestion des paquetages (installation / désinstallation) et de mise à jour
Un grand nombre de distributions existent, comme le montre un simple tour sur https://distrowatch.com.
Paquetages
Un paquetage est un conteneur qui est composé de deux parties:
- données de contrôle (# de version, dépendances, ...)
- fichiers à installer (et emplacements)
Il y a près de 70 000 paquetages disponibles sur Debian 13. Ces paquetages peuvent être des logiciels, des fichiers de configuration, des librairies, des sons, des images, ... L'idée principale est de se rappeler que la grande totalité des fichiers installés par le système d'exploitation est gérée par le gestionnaire de paquetages.
Le gestionnaire a les informations de version et la description du programme, mais aussi ses différents types de dépendances, ses recommandations et ses suggestions. Par exemple, lorsque j'installe le logiciel evince, je dois également installer les librairies A, B et C afin qu'il soit fonctionnel. Et si je viens à supprimer evince, il faudrait que ces 3 mêmes librairies soient supprimées si elles ne sont pas utilisées par d'autres programmes.
Un paquet est relié à une distribution par l'entremise de son gestionnaire de paquets:
- apt, dpkg pour Debian,
- pacman pour ArchLinux,
- emerge ou portage pour Gentoo,
- dnf pour Fedora,
- chaque distribution possède son système de paquetage (ou presque)
Il faut comprendre ici que pour un logiciel, deux paquets provenant de deux sources (par exemple Ubuntu et Fedora) seront totalement différents car le gestionnaire de paquets n'est pas le même pour les deux systèmes et donc non compatibles. Chaque gestionnaire de paquets a sa propre façon de gérer les dépendances, les paquets et les différentes versions de ces deux derniers éléments.
Ubuntu et Debian utilisent tous les deux dpkg comme gestionnaire de paquets. Même si les deux sont compatibles, ce n'est pas recommandé de prendre des paquets de l'autre distribution.
Version des distributions sous Debian
Debian offre des arbres de distribution (chacun avec ses logiciels en version):
- Stable (actuellement Debian 13, nom de code « trixie »)
- Testing (actuellement « forky »)
- Unstable (nom de code sid)
La stable offre des versions plus stables avec moins de fonctionnalités, alors que les dernières fonctionnalités arrivent d'abord dans unstable. Les paquets passent ensuite d'unstable à testing au fur et à mesure, lorsqu'ils ont fait leurs preuves. En temps et lieu, testing est gelée, puis devient la nouvelle stable, et une nouvelle testing est créée. Unstable (sid), elle, n'est jamais publiée comme version : elle reste toujours sid.
Du côté d'ArchLinux, c'est une distribution en publication continue (rolling release) : une seule branche, qui contient les versions les plus récentes des paquets.
Binaire vs Source
Deux types principaux de distributions de paquets.
- Binaires: Debian, Ubuntu, Fedora, openSUSE, ArchLinux
- Sources: Gentoo, ArchLinux (AUR pour Arch User Repository), FreeBSD (ce n'est pas Linux)
Une distribution binaire (comme Debian et ArchLinux) partage des paquets compilés sur le serveur. Alors qu'une distribution source offre des paquets sources qui sont en réalité des fichiers texte indiquant la marche à suivre pour télécharger / configurer / compiler / installer le logiciel.
Note: ArchLinux est principalement une distribution binaire, mais offre également l'AUR (Arch User Repository) qui permet aux utilisateurs de compiler des paquets depuis les sources.
La différence principale est le temps nécessaire pour l'installation de la mise à jour. Vous aurez compris que les distributions sources vont être beaucoup plus lentes à compiler, mais vous pouvez les optimiser plus facilement pour votre système et elles sont moins "lourdes" sur les serveurs du propriétaire de la distribution.
Licence GPL
Comment Linux a-t-il réussi à exister et à rester en vie dans un monde capitaliste?
Il fallait être capable de protéger ses intérêts tout en s'assurant que tout le monde était régi par des règles simples permettant de s'assurer que les logiciels restent disponibles dans le futur.
Il serait dur de vous parler de l'univers du libre sans glisser un mot sur les licences. Une des plus connues est la licence GPL qui est une licence qui s'assure que les logiciels demeurent libres. Richard Stallman est le fondateur de cette licence et du mouvement GNU (vous vous rappelez, GNU/Linux).
La GPL garantit les quatre libertés du logiciel libre définies par la Free Software Foundation (FSF):
- la liberté d'exécuter le programme, pour tous les usages,
- la liberté d'étudier le fonctionnement du programme et de l'adapter à ses besoins: nécessite l'accès au code source.
- la liberté de redistribuer des copies du programme (ce qui implique la possibilité aussi bien de donner que de vendre des copies). Vous pourriez vendre vos logiciels issus d'un développement GPL, cependant puisque vous donnez vos sources, c'est généralement plus le support que vous allez offrir que le logiciel en tant que tel.
- la liberté d'améliorer le programme et de distribuer ces améliorations au public, pour en faire profiter toute la communauté. Il est généralement bien perçu de partager ses améliorations.
Finalement, un programme modifié à partir d'un programme GPL doit, s'il est distribué, être distribué lui aussi sous GPL. Vous n'avez pas légalement le droit d'enlever la GPL d'un programme. Si vous copiez du code GPL trouvé sur Internet dans votre programme et que vous distribuez ce programme, vous devez généralement le distribuer sous GPL (selon le type de liaison et la version de GPL utilisée) ; sinon, vous êtes en infraction avec la licence.
Hiérarchie des répertoires
Vu que Linux est un autre système d'exploitation inspiré de Unix, il n'a pas la même structure hiérarchique de fichier que Windows. Voici une liste des répertoires du système, contrairement à Windows où il y a plusieurs racines (C:, D:, E:), sur Linux, il y en a juste une (/).
| Emplacement | Définition |
|---|---|
| / | Racine du système |
| /bin | Programmes disponibles pour tous les utilisateurs (lien vers /usr/bin) |
| /boot | Fichiers de démarrage (noyau, grub) |
| /dev | Liste du matériel détecté par le noyau |
| /etc | Fichiers de configuration |
| /home | Répertoires utilisateurs |
| /lib | Librairies système, tels les pilotes du noyau (lien vers /usr/lib) |
| /media | Répertoire de montage pour les médias amovibles |
| /mnt | Répertoire de montage temporaire |
| /opt | Localisation optionnelle de certains programmes (Chrome) |
| /proc | Information sur les programmes en cours d'exécution et sur le noyau (uptime, réseau, ...) |
| /root | Répertoire home de l'utilisateur root |
| /run | Données temporaires des programmes en cours d'exécution, effacées au redémarrage |
| /sbin | Programmes d'administration système, qui demandent généralement les droits de root (lien vers /usr/sbin) |
| /sys | Informations sur le matériel et les pilotes, fournies par le noyau |
| /tmp | Répertoire temporaire, vidé au redémarrage sur la plupart des distributions (Debian 13 le garde en mémoire) |
| /usr/bin | Programmes utilisateurs |
| /usr/lib | Librairies des programmes utilisateurs |
| /usr/share | Données partagées par les différents programmes (sons, images, ...) |
| /var | Données des programmes en exécution, elles peuvent être des fichiers de courriel ou des files d'impression |
| /var/log | Logs des programmes système |
Monter un disque ou une clé USB, c'est rendre son contenu accessible à un emplacement de l'arborescence (par exemple /media/cle) : c'est l'équivalent Linux de la lettre de lecteur sous Windows.
Sur les distributions récentes (Debian 12 et 13, Ubuntu, Fedora, ArchLinux), /bin, /sbin et /lib ne sont plus de vrais répertoires : ce sont des liens vers /usr/bin, /usr/sbin et /usr/lib. Les chemins comme /bin/cat fonctionnent toujours, mais le fichier se trouve réellement dans /usr/bin.
Cette hiérarchie suit une norme nommée FHS (Filesystem Hierarchy Standard). Ce n'est qu'une recommandation et non une obligation : comme personne n'est tenu de la respecter, la hiérarchie pourrait être différente dans certaines distributions.
Un contenu particulier à connaître lors de votre parcours Linux est le répertoire personnel, chaque utilisateur d'un système d'exploitation Linux se fait assigner lors de la création du compte, un répertoire nommé personnel qui va contenir tous ses fichiers, ses configurations, son cache, ...
Les informations de fichier
Voyons comment les fichiers sont enregistrés sur le système, ça diffère de Windows.
Voici un exemple de droits d'accès pour un fichier. Il a été obtenu avec la commande ls -l, qui liste les fichiers en format détaillé (l'équivalent de dir vu au cours 4). La sortie ci-dessous vient d'un système ArchLinux ; vous pouvez tester la commande dans votre machine virtuelle Debian, où la taille et la date affichées seront différentes:
ls -l /usr/bin/cat
-rwxr-xr-x 1 root root 51576 15 jui 01:28 /usr/bin/cat
- En suivant la hiérarchie précédente, ce fichier est situé sous la racine (/), dans le répertoire usr (/usr), puis dans son sous-répertoire bin (/usr/bin), et a le nom cat (/usr/bin/cat). Comme /bin est un lien vers /usr/bin, le chemin /bin/cat mène au même fichier.
- En regardant la troisième et la quatrième colonne, il appartient à l'utilisateur root et au groupe root. Chaque utilisateur fait partie d'un certain nombre de groupes.
- 51 576 est la taille du fichier (en octets)
- 15 jui 01:28 est la date de dernière modification
- -rwxr-xr-x sont les permissions d'accès
Avant de parler des bits d'accès, nous devons expliquer les permissions possibles.
Fichier
| Propriété | Définition |
|---|---|
| r | lecture, permet de lire le contenu d'un fichier |
| w | écriture, permet d'écrire dans le fichier ou de remplacer le contenu d'un fichier |
| x | exécution, permet l'exécution du fichier dans le cas où c'est un fichier exécutable ou un fichier de script (permettant l'exécution de commandes successives) |
Répertoire
| Propriété | Définition |
|---|---|
| r | lecture, permet de lire le contenu d'un répertoire |
| w | écriture, permet d'ajouter ou supprimer des fichiers dans le répertoire |
| x | exécution, permet de traverser le répertoire dans le sens où si vous voulez exécuter la commande /usr/bin/cat, vous devez avoir l'exécution pour les répertoires usr et bin |
Pourquoi les bits d'accès se répètent (-rwxr-xr-x)?
Explication, divisons nos bits d'accès -rwxr-xr-x, séparons-les en 4 parties:
-
Cela signifie que ce dont on parle n'est ni un répertoire (d), ni un lien (l). En réalité, le - stipule que c'est un fichier.
rwx
Ici ça stipule que les droits d'accès sont lecture (r), écriture (w) et exécution (x) pour le propriétaire du fichier. Donc son propriétaire pourrait réécrire le fichier dans le cas d'une mise à jour par exemple. Comme on l'a vu précédemment, son propriétaire est root, donc il s'agit en réalité d'un fichier système (ce n'est pas une certitude, mais puisqu'il est dans le répertoire /usr/bin, c'est le cas) puisque possédé par root.
r-x
Ici ça stipule que les droits d'accès sont lecture (r) et exécution (x) pour le groupe du fichier. Le groupe qu'on a vu précédemment (avec le ls) est le groupe root. Il est à noter ici que chacun des fichiers du système de fichiers a ce genre de droits d'accès, dans le sens où ils sont possédés par un utilisateur et font partie d'un groupe. Donc le groupe root est un groupe dont la majorité des programmes et des utilitaires du système d'exploitation fait partie. Généralement le seul utilisateur faisant partie du groupe root est root.
r-x
Ici ça stipule que les droits d'accès sont lecture (r) et exécution (x) pour le reste des gens. Et oui, la dernière catégorie est celle des autres, ceux ne faisant pas partie du propriétaire, ni faisant partie du groupe. Nous voyons donc que le programme (oui car il est situé dans /usr/bin) est un utilitaire système que tout le monde peut utiliser car tout le monde a la permission de lecture et d'exécution.
Changer les permissions
Deux façons sont possibles avec la commande chmod
1. Façon symbolique
Nous avons vu qu'il y a 3 parties:
| Élément | Définition |
|---|---|
| u | user / owner |
| g | group |
| o | others |
| a | tous |
a = u + g + o
Il est possible d'utiliser les opérateurs suivants:
+ : ajout d'une permission
- : efface une permission
= : assigne la permission
Exemples
Si nous voulons retirer au groupe la possibilité d'écrire dans un fichier nommé fichier tout en conservant les propriétés pour l'utilisateur et les autres (le groupe ne sera pas modifié pour ses propriétés de lecture et d'exécution):
chmod g-w fichier
Si nous voulons assigner lecture et exécution à tous au fichier:
chmod a+rx fichier
Si nous voulons assigner lecture et exécution à tous au fichier et leur enlever l'écriture:
chmod a=rx fichier
2. Façon absolue
Il y a 3 permissions (r: lecture, w: écriture, x: exécution), ce qui donne 8 combinaisons possibles. Supposons 0 pour inactive et 1 pour active ; chaque combinaison correspond alors à un chiffre de 0 à 7, obtenu en additionnant r = 4, w = 2 et x = 1 (par exemple rx = 4 + 1 = 5)
| r | w | x | Décimal |
|---|---|---|---|
| 0 | 0 | 0 | 0 () |
| 0 | 0 | 1 | 1 (x) |
| 0 | 1 | 0 | 2 (w) |
| 0 | 1 | 1 | 3 (wx) |
| 1 | 0 | 0 | 4 (r) |
| 1 | 0 | 1 | 5 (rx) |
| 1 | 1 | 0 | 6 (rw) |
| 1 | 1 | 1 | 7 (rwx) |
Par contre, ce n'est pas suffisant pour affecter nos fichiers, puisque les permissions sont un regroupement de 3 permissions (users, groupes, autres).
Donc on écrit 3 chiffres collés, un pour chaque catégorie, dans l'ordre : propriétaire, groupe, autres. Chaque chiffre va de 0 à 7, donc le nombre va de 000 à 777.
Si nous souhaitons assigner toutes les permissions pour le propriétaire, lecture et exécution pour le groupe et les autres pour le fichier fichier:
chmod 755 fichier
Si nous souhaitons assigner lecture et écriture pour le propriétaire et aucun accès pour le groupe et les autres:
chmod 600 fichier
Commandes à apprendre pour aujourd'hui
| Commande | Définition |
|---|---|
| man | Aide pour une commande |
| cd | Changement de répertoire |
| mkdir | Création de répertoire |
| cp | Copie de fichier ou répertoire |
| mv | Déplacement de fichier ou répertoire |
| rm | Effacement de fichier |
| rm -r | Effacement récursif (répertoire) |
| touch | Création d'un fichier vide |
| ln | Création de lien (symbolique avec ln -s : un raccourci ; dur : un deuxième nom pour le même fichier, supprimer l'un laisse l'autre intact, contrairement au raccourci) |
| ls | Liste de fichiers (dir) ; ls -l pour le format détaillé |
| cat, less, more | Voir le contenu d'un fichier texte |
Exemple:
cp patate /home/vers/le/dossier/patate
Pour aller plus loin : les permissions rwx sont choisies par le propriétaire du fichier. Certaines distributions ajoutent une seconde couche de sécurité, qui impose des règles aux programmes eux-mêmes, peu importe ces permissions : AppArmor sur Debian et Ubuntu, SELinux sur Red Hat Enterprise Linux, Fedora, Rocky Linux ou AlmaLinux.