# Le système d'exploitation GNU-Linux/Qu'est-ce qu'un système d'exploitation ?

* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
[ Modifier le sommaire ]
Linux Is Not UniX.

## Objectifs

À la fin de ce chapitre, le lecteur sera en mesure :
* d’expliquer le rôle d’un système d’exploitation,
* de nommer les principales couches de l’architecture d’un système d’exploitation,
* d’associer les générations d’ordinateur aux différents types de systèmes d’exploitation,
* d’expliquer les différentes versions de UNIX et Linux.

## Introduction

Un système informatique moderne est composé d’un ou plusieurs processeurs, d’une mémoire principale, de disques durs, d’imprimantes, d’un clavier, d’une souris, d’un écran, d’une carte réseau et de beaucoup d’autres périphériques d’entrée/sortie. En un mot un système complexe. Dans ce contexte, développer des programmes d’application qui doivent tenir compte correctement de toutes ces entrées/sorties n’est pas une mince tâche. C’est pour cette raison que les ordinateurs modernes sont équipés d’un « système d’exploitation ». Une des tâches du système d’exploitation est donc d’offrir aux utilisateurs une interface simple et conviviale avec le matériel.
Dans ce chapitre, nous allons d’abord présenter une brève définition et description des systèmes d’exploitation. Par la suite, nous expliquons l’architecture et les fonctions d’un système d’exploitation. Puis finalement, les différentes versions de Unix et de Linux sont présentées.

## Qu'est-ce qu'un système d'exploitation

Un système d'exploitation effectue deux tâches bien distinctes :
* Présenter une machine virtuelle à l’utilisateur.
* Gérer les ressources de l’ordinateur.

### Machine virtuelle

Être une machine virtuelle signifie transformer un ensemble de circuits électroniques en un outil moderne qui offre une abstraction simple au niveau des entrées/sorties, de l'utilisation de la mémoire, de la gestion des fichiers, de la protection et du contrôle des erreurs, de l'interaction des programmes entre eux et de leur contrôle.
En deux mots : éviter au programmeur d’avoir à connaître les détails électroniques de tel ou tel microprocesseur et permettre à l'utilisateur de sauvegarder ses fichiers sans se soucier du type de disque utilisé pour stocker les informations.

### Gestionnaire de ressources

L'autre fonction du système d'exploitation est le partage des ressources. Le système d’exploitation joue un rôle de policier afin d'éviter les conflits d'utilisation de la mémoire, des périphériques d'entrée/sortie, des interfaces réseau, … On peut facilement imaginer ce qui arriverait si trois programmes essayaient d'imprimer en même temps sans que des priorités aient été préalablement établies.
De plus, lorsque l'ordinateur est utilisé par plusieurs usagers, le partage de la mémoire et surtout sa protection demeurent une priorité absolue. À tout moment, tout bon système d'exploitation doit connaître l'utilisateur d'une ressource, ses droits d'accès et son niveau de priorité.

## Architecture d’un système informatique

Tous les systèmes informatiques sont segmentés en « couches » pour permettre un meilleur contrôle de l'ensemble de l'ordinateur. La Figure 1 illustre les différentes couches d’un tel système.

### Matériel

Au plus bas niveau, on retrouve la première couche qui contient les composantes physiques constituées des circuits intégrés, des fils, des sources de courant, …
La couche suivante regroupe des outils logiciels primitifs qui permettent de contrôler directement les composantes physiques sous-jacentes, comme les registres internes du processeur et l’unité arithmétique et logique. Cette couche est appelée le microcode et réside bien souvent dans le processeur de l'ordinateur.
L'autre couche est celle du langage machine qui est interprété par le microcode. Ce langage de bas niveau regroupe 50 à 300 instructions pour permettre de déplacer des bits, de calculer ou de comparer des valeurs à l'aide des registres internes du processeur.

### Système d’exploitation

Le système d'exploitation qui se trouve juste au-dessus, offre aux programmeurs et aux utilisateurs un ensemble de fonctions du genre « lire le fichier » ou « afficher à l’écran ». Il s'agit ici d'un niveau d'abstraction élevé qui évite ainsi au programmeur de devoir écrire, par exemple, du code pour déplacer les têtes de lecture d'un disque rigide. Il s'agit du niveau d'exécution des pilotes de périphériques (contrôleurs d'interruptions, de disques, de carte graphique, ...).
En haut de la hiérarchie, il y a la couche où l'on retrouve les interpréteurs de commandes, les compilateurs et les logiciels d’application. Il est clair que ces programmes ne font pas partie du système d'exploitation, même s'ils sont livrés avec celui-ci dans bien des cas.

### Logiciels d’application

Finalement, au-dessus de toutes ces couches se trouvent les logiciels d’application qui permettent à un utilisateur d’effectuer des tâches particulières sans qu'il ait à tenir compte des couches inférieures.

## Fonctions d'un système d'exploitation

Aujourd'hui, l'informatique, aussi bien dans les entreprises que dans l'enseignement, utilise des machines plus petites fonctionnant avec des systèmes d'exploitation à caractère universel. Parmi ces systèmes d'exploitation, deux se distinguent particulièrement, un système mono-utilisateur, Windows, et un autre multi-utilisateurs et multi-tâches, Unix. D'une manière contestable, on peut affirmer que le premier système est destiné à des ordinateurs individuels, tandis que l'autre est réservé au travail en groupe.
Parmi les nombreux systèmes d’exploitation, Unix/Linux est celui qui offre le plus de richesse, le plus d'homogénéité et le plus de souplesse. Pour cette raison, dans ce livre, Linux a été choisi comme système d'exploitation pour illustrer les concepts théoriques. Par ailleurs, le système MS-DOS puis Windows, en évoluant, ont incorporé beaucoup de caractéristiques de Unix/Linux.
On peut diviser les fonctions des systèmes d'exploitation classiques en quatre parties principales :
* La gestion des processus (programmes).
* La gestion de la mémoire.
* Le système de fichiers.
* La gestion des entrées/sorties.
Les systèmes d'exploitation modernes intègrent par ailleurs d'autres caractéristiques. Ces dernières concernent notamment deux évolutions majeures des systèmes informatiques. La première est l'interconnexion des différentes machines et des différents systèmes par des réseaux locaux ou étendus. La seconde est la disparition des écrans de texte et leur remplacement par des dispositifs à fenêtres multiples disposant de propriétés graphiques.

### Historique des systèmes d'exploitation

L’histoire de l’informatique est très brève – les ordinateurs sont nés avec la seconde guerre mondiale – et pourtant, elle a connu de grandes évolutions. L'historique des systèmes d'exploitation est intimement liée à l'évolution de l’informatique. Cette évolution est séparée en 4 grandes étapes :
* Première génération (1945-55) : les tubes à vide.
* Deuxième génération (1955-65) : les transistors et le traitement par lots.
* Troisième génération (1965-80) : les circuits intégrés et la multiprogrammation.
* Quatrième génération (1980-aujourd’hui) : les micro-ordinateurs.
* Cinquième génération (compléter-compléter) : l'informatique quantique.

### Première génération (1945-55) : les tubes à vide

En 1946, le premier ordinateur ne comportant plus de pièces mécaniques est créé grâce à J. Mauchly et J. Presper Eckert : l’ENIAC (Electronic Numerical Integrator And Computer). Il est composé de 180 000 tubes à vide et occupe 1500 m². Son principal inconvénient est sa programmation : il était uniquement programmable manuellement avec des commutateurs ou des câbles à enficher.
Note : La première erreur informatique est due à un insecte qui, attiré par la chaleur, était venu se loger dans les tubes à vide et avait créé un court-circuit. Le mot « bug » (insecte en anglais), est donc resté pour nommer une erreur informatique.

### Deuxième génération (1955-65) : les transistors et le traitement par lots

En 1948, le transistor est créé par la firme Bell Labs grâce aux ingénieurs John Bardeen, Walter Brattain et William Shockley. Le transistor permet de rendre les ordinateurs moins encombrants et moins gourmands en énergie électrique : c’est la révolution dans l’histoire de l’informatique. Ce n’est qu’en 1960 qu’IBM commercialise l’un des premiers ordinateurs à base de transistors, l’IBM 7000.
C’est aussi à cette époque que les premiers systèmes d’exploitation sont apparus tel FMS (the Fortran Monitor System) et IBSYS (IBM’s operating System), utilisant le traitement par lots pour gérer l’exécution des programmes qui se fait maintenant de façon autonome.

### Troisième génération (1965-80) : les circuits intégrés et la multiprogrammation

Le circuit intégré est mis au point en 1958 par Texas Instrument. Il permet de réduire encore la taille des ordinateurs en intégrant plusieurs transistors dans le même composant électronique. Avec cette nouvelle génération d’ordinateurs, une nouvelle génération de systèmes d’exploitation mettant en application le concept de multiprogrammation fait son apparition.
Les premiers travaux sur MULTICS, l'ancêtre d'Unix, sont dus à Ken Thompson pour le compte de Bell Laboratories, AT&T, General Electric et le Massachusetts Institute for Technology.
En 1970, une première version d'Unix voit le jour. Elle fonctionne sur une machine PDP-7 de Digital Equipment. Les principales caractéristiques de ce système sont les suivantes :
* Gestion de fichiers sous forme d'une hiérarchie de répertoires.
* Entrées/sorties gérées de la même façon pour les fichiers, les processus (ou programmes) et les périphériques.
* Gestion multi-tâches de processus indépendants.
* Systèmes à base de commandes pouvant accepter de multiples interpréteurs de commandes, selon les besoins de l'utilisateur.
* Présence d'utilitaires et de compilateurs intégrés dans le système.
* Un système aussi portable que possible pouvant s'adapter à de nombreux types d'ordinateurs. C'est justement pour accroître la portabilité du système que Denis Ritchie inventa le langage de programmation C.
Une grande partie du système Unix fut réécrite en langage C. Le reste du système, en assembleur, dépend du type de machines sur lequel on installe le système. En 1976, la version 6 d'Unix, fut la première version complète. En 1979, ce fut le succès commercial avec la version 7. Cette version a été adoptée par Hewlett Packard et Digital Equipment.
Chaque constructeur eut le droit d'adapter Unix à ses machines. De même, des universités pouvaient travailler à son amélioration. Mais comme le nom d'Unix lui-même était protégé, chacun dut aussi choisir un nom différent. L'Université de Berkeley en Californie proposa ainsi les versions BSD (Berkeley Software Distribution). Face à cette diversité des versions d'Unix, AT&T proposa, dès 1983, le standard System V. Aujourd'hui, l'X/OPEN group a obtenu le droit de diffuser la marque Unix à tous les systèmes qui se soumettent à un contrôle approprié. Aujourd'hui encore, HP propose HP-UX, IBM propose sa version d'Unix appelée AIX et Sun propose Solaris.

### Quatrième génération (1980-aujourd’hui) : les micro-ordinateurs

En 1979, Microsoft prend une licence Unix et développe le système d'exploitation XENIX, disponible jusqu'en 1984. Au moment où le PC fit son apparition, Unix était déjà un système mûr. En 1981, lorsque IBM lança le PC, il choisit le système d'exploitation MS-DOS de Microsoft. MS-DOS, inspiré d'Unix, comportait dès le départ des contraintes liées à son architecture : insuffisance de la mémoire adressable, pas de gestion multi-tâches ou multi-utilisateurs, pas de protection de la mémoire.
Des particuliers eux aussi se sont attelés aux développements d'une version d'Unix : Andrew Tanenbaum, professeur à l'Université d'Amsterdam, développa avec ses élèves une version d'Unix pour PC, appelée Minix, qui vit le jour en 1987. Partant de Minix, Linus Torvalds développa Linux, un Unix pour PC dont la première version, appelée version 0.99, sortit en 1991. Aujourd'hui, Linux est devenu un système d'exploitation stable pour PC. Ce système constitue un logiciel libre, dont chaque utilisateur a le droit de modifier le code source.