I. Généralités¶
Définition¶
Un système d'exploitation (OS : opérating system) fait le lien entre matériel et logiciel. C'est programme ou ensemble de programmes :
- dont l'exécution débute avec au démarrage de l'ordinateur
- qui s'exécute en permanence sur l'ordinateur.
- qui gère le "bon fonctionnement" de tous les programmes en cours d'exécution
- qui fournit des fonctionnalités aux programmes en cours ou à l'utilisateur pour interagir avec le matériel
Exemples¶
- l'utilisateur souhaite créer un nouveau dossier ...
c'est l'OS qui le place dans l'arborescence des fichiers et fait noter l'information sur le disque dur
- un programme souhaite lire le contenu d'un fichier ...
c'est l'OS qui sait où aller chercher l'information (quel disque, quel endroit sur le disque ..)
- un utilisateur souhaite exécuter un programme ...
c'est l'OS qui attribue une mémoire de travail au programme et dit au processeur de se mettre au boulot
- le navigateur web souhaite accéder à une page internet ...
c'est l'OS qui assure la transmission de la requête vers le réseau et récupère la réponse
NB¶
L'OS ne fait pas tout lui-même :
- il délègue certaines tâches au matériel et transmet les résultats aux programmes de l'utilisateur
- c'est une couche d'abstraction : les programmes et l'utilisateur n'ont pas à se soucier des "détails matériels"
Séquence de démarrage d'un ordinateur personnel classique¶
- Mise sous tension
- BIOS ou UEFI : un petit programme présent sur la carte mère (test de fonctionnement de base du matériel)
- Chargement sytème d'exploitation (multi-boot)
- Démarrage du système d'exploitation
- Mise en place de l'environnemement de Bureau
NB :¶
l'environnement de Bureau est la partie "visible" de l'OS
mise en veille prolongée : la mémoire de l'ordinateur est enregistrée sur disque, puis rétablie à l'allumage (pas de séquence de démarrage)
Environnement de bureau Windows 7¶
Environnement de bureau Linux - Ubuntu (Unity)¶
Environnement de bureau MacOS¶
Rôles du système d'exploitation¶
la partie "émergée" : le paramétrage de l'environnement de bureau
- la disposition des fenêtres, les icônes, le fond d'écran, les raccourcis, la forme de la corbeille ...
Accès au matériel (Pilotes), protocoles réseau (TCP/IP)
Système de fichiers
- organisation du contenu des disques durs / clé usb : fichiers, répertoires, droits d'accès
Gestion des programmes en cours d'exécution (Processus)
gestion mémoire : attribue la mémoire RAM aux processus
ordonnancement : attribue à tour de rôle le processeur
NB: on s'intéressera surtout au système de fichier et à la gestion des processus
Histoire des systèmes d'exploitation¶
Les premiers ordinateurs (sans système d'exploitation) : 1940¶
- on cable les machines, cartes perforées en entrées/sorties ...
Petit à petit ...¶
invention des mémoires "de masse"
amélioration des périphériques d'entrée sortie
invention des langages de programmation
chaque machine dispose de ses propres outils pour la faire fonctionner
Unix (1970-...)¶
Ken Thompson, Denis Richie, AT&T (téléphone US)
le premier "vrai" système d'exploitation : multi-utilisateurs, multi-tâche
écrit en C : système transposable assez facilement sur les machines différentes
de nombreux dérivés d'Unix, pas forcément compatibles ...
MS-DOS - Windows (1985-...) - Microsoft¶
Entreprise créée en 1975 par Bill Gates et Paul Allen
logiciel propriétaire
Linux (1990-...)¶
Linus Torvalds (étudiant finlandais) qui travaille sur un projet mais a des problèmes de droits/licences avec Unix et ses dérivés.
Il écrit un système similaire à Unix, sous GPL (Gnu Public Licence : tout le monde peut l'utiliser gratuitement et ne peut se l'approprier, même en cas de modification)
... inspiré de Minix (Andrew Tanenbaum)
NB :
un noyau Linux (Kernel),
plusieurs environnements de bureau : Gnome, KDE ...
des dizaines de distributions Linux (environnement de bureau paramétré + logiciels pré-installés) : Ubuntu, Mint, Debian, Arch linux (minimale), Kali (cybersécurité))
chacune d'elles avec leurs évolutions
MacOS (2000- ...) - Apple¶
Entreprise crée en 1976 par Steve Jobs, Steve Wozniak
Dérivé d'Unix
Android (2007- ...) - Google¶
Entreprise crée en 1998 par Larry Page et Sergey Brin
Pour les téléphones / tablettes
Utilise Linux
Communication : utilisateur / OS¶
Environnement de bureau (Desktop) : interface graphique conviviale pour l'utilisateur. Cf ci-dessus (cliquer/déplacer ...)
Interface en ligne de commande (CLI : Command line interface) : interface texte pour les utilisateurs avancés. Cf la suite (shell)
Communication : programme / OS¶
Appels systèmes (System calls) : pour les programmes en cours d'exécution
- Dans les langages de programmation, certaines fonctions prédéfinies servent à faire réaliser une tâche par l'OS
- par exemple : lire le contenu d'un fichier.
- Un appel à une telle fonction est appellé appel système
- Dans les langages de programmation, certaines fonctions prédéfinies servent à faire réaliser une tâche par l'OS
NB : la norme POSIX :
normalisation de la spécification de certains appels systèmes.
un programme qui ne réalise que des appels systèmes POSIX fonctionnera sur tous les OS qui respectent la norme POSIX (tous les OS dérivés d'Unix)
II. Les commandes de base du shell¶
L'interface système (shell) permet l'interaction avec le système d'exploitation.
NB : Plusieurs variantes sous Unix / Linux : bash
sh
ksh
zsh
...
Le shell se présente comme une invite de commande affichée dans un terminal (référence à l'époque où l'écran était séparé d'un énorme ordinateur)
Les commandes sont saisies au clavier, exécutées par l'ordinateur, puis l'utilisateur peut saisir à nouveau une commande
Après s'être connecté à une machine Linux, on ouvre un terminal : l'utilisateur prof
est connecté sur la machine qui s'appelle pc001
- plusieurs utilisateurs peuvent avoir un compte sur une même machine
- l'administrateur de la machine est l'utilisateur
root
, il a tous les pouvoirs
Des groupes d'utilisateurs peuvent être définis.
La commande groups
donne le nom des groupes auquel l'utilisateur appartient
L'utilisateur est constamment dans un répertoire de l'arborescence du système de fichier, dont la racine est le répertoire /
La commande pwd
(print working directory) affiche ce répertoire en donnant le chemin absolu depuis la racine
Par convention, le répertoire /home/user
est le répertoire "maison" de l'utilisateur user
. Il est décrit par le raccourci ~
Pour connaître le contenu du répertoire, on utilise la commande ls
(list)
ls -a
: lister tous les fichiers, même ceux qui commencent par .
(convention pour les fichiers "cachés)
Les répertoires apparaissent ici en bleu, les fichiers classiques (fichier régulier) en blanc.
.
désigne le répertoire courant
..
désigne le répertoire parent
La commande cd
(change directory) permet de changer de répertoire : cd
dir
Ici, Images
est le chemin relatif par rapport au répertoire de travail, son chemin absolu étant /home/prof/Images
On peut remonter dans l'arborescence, ou aller directement dans un répertoire par son chemin absolu.
La touche tabulation
permet de compléter/proposer les noms possibles.
- un retour au répertoire parent
- puis, dépacement dans le répertoire racine : on y voit le répertoire
home
qui contient les répertoires des utilisateurs - puis, retour au répertoire "maison"
La commande tree
permet d'afficher l'arborescence des fichiers à partir du répertoire de travail
La commande mkdir
dir permet de créer un nouveau répertoire (make directory).
La commande mv
source destination permet de déplacer/renommer un fichier ou un répertoire (move)
La commande cp
source destination permet de copier un fichier (copy)
La commande cp -R
source destination permet de copier un répertoire et tous les sous-répertoires (recursive copy)
- création d'un répertoire
TD
- copie des fichiers de tous les fichiers du répertoire
Téléchargement
se terminant par.pdf
(on utilise un motif "glob pattern") dans le répertoireTD
ls
dir liste le contenu du répertoire dir- renommage du répertoire
TD
enTDInfo
"Glob pattern"¶
Ce sont de motifs qui représentent un ensemble de noms de fichiers. Pour décrire ces motifs, on peut utiliser les carctères habituels, ainsi que des caractères spéciaux (wildcard ou joker) :
*
: n'importre quelle suite de caractères?
: n'importe quel caractère[aeiou]
: un des caracères entre crochet- ...
Par exemple :
*.pdf
: tous les fichiers qui terminent par.pdf
Images/DSC_00[12]?.jpg
: tous le fichiers du répertoire Image qui s'écrivent ...*/*.???
: tous les fichiers de tous les répertoires qui se terminent par . suivi de 3 lettres
La commande rm
fichier permet d'effacer un fichier (remove)
La commande rm -R
dir permet d'effacer un répertoire et tout son contenu de manière récursive
ATTENTION : le(s) fichier(s) sont définitivement effacés (pas de "mise à la corbeille")
- suppression de deux fichiers (utilisation d'un motif)
- suppression d'un répertoire
La commande cat
fichier permet d'afficher le contenu du fichier dans la console (peu pratique pour les fichiers longs)
La commande wc
fichier donne le nombre de lignes / mots / caractères d'un fichier
La commande head
fichier affiche les 10 premières lignes d'un fichier
La commande tail
fichier affiche les 10 dernières lignes d'un fichier
La commande less
fichier permet d'afficher et de revenir le contenu d'un long fichier
less 19942.txt
Humour du programmeur : la commande
more
faisait la même chose, mais en moins bien ...Pour interrompre une commande en cours d'exécution, on tape au clavier :
q
ouCtrl C
Exécuter une ligne de commande¶
De manière générale, une commande s'écrit :
command arg1 arg2 ... argn
Les commandes sont très nombreuses, avec un très grand nombre d'options, souvent représentées par des lettres et préfixées par un tiret
La commande man
commande permet d'accéder à la documentation de commande.
Ici man cp
pour obtenir les informations sur la commande cp
III. Le système de fichiers (1/2)¶
La "vraie" nature des fichiers¶
Sous Linux, tout est fichier :
les fichiers réguliers (y compris les fichiers exécutables)
les répertoires (qui contiennent d'autres fichiers)
les liens (physique ou symbolique) (cf VI)
les flux d'entrée et de sortie d'un programme (cf V)
les périphériques
Pour chaque fichier : on peut lire, ecrire et parfois exécuter
Les attributs d'un fichier¶
La commande ls -l
permet d'afficher les attributs d'un fichier ou ensemble de fichiers
La première lettre donne le type du fichier :
d
pour répertoire (directory)-
pour un fichier régulierLes 9 symboles suivants donne les droits en lecture/écriture/exécution pour le propriétaire du fichier, le membres du groupe propriétaire du fichier, les autres
- NB :
-
indique l'absence de droits
- NB :
Le nombre de liens physiques vers le ficher (peu utile)
Puis, le propriétaire, le groupe propriétaire, la taille en octets, la date de dernière modification et le nom du fichier
Les droits sur un fichier¶
Pour les fichiers réguliers :¶
la droit en lecture donne la possibilité de lire (et donc copier) le contenu du fichier
le droit en écriture donne la possibilité de renommer, modifier, supprimer le fichier
le droit en exécution concerne :
- soit les programmes directement exécutables sur machine
- soit les programmes de script qui indiquent sur leur première ligne le programme qui se chargera d'exécuter le contenu du script
Exemples de droits pour un fichier régulier non exécutable :
-rw-r--r--
: le propriétaire a les droits en lecture/écriture, le groupe et les autres peuvent lire le fichier-rw-------
: le propriétaire a les droits en lecture/écriture, le groupe et les autres ne peuvent ni lire ni écrire
Exemple de droits pour un fichier régulier exécutable :
-rwxr-xr-x
: le propriétaire a tous les droits, le groupe et les autres lire et exécuter le fichier
NB : les commandes ont elles-mêmes des fichiers exécutables
La commande which
permet de localiser une commande
Le contenu du fichier /usr/bin/cat
, destiné à être exécuté sur machine (code machine)
NB exemple de script exécutable
Les droits sur un fichier¶
Pour les répertoires :¶
la droit en lecture donne la possibilité de lister le contenu du répertoire
le droit en écriture donne la possibilité de renommer, supprimer, modifier le contenu du répertoire
le droit en exécution donne la possibilité de rentrer dans le répertoire (commande
cd
)
Exemples de droits pour un répertoire :
drwxr-xr-x
: le propriétaire a tous les droits, le groupe et les autres peuvent lire et entrer dans le répertoiredrwx------
: le propriétaire a tous les droits, le groupe et les autres ne peuvent pas accéder au contenu du répertoire
Modification des droits¶
Le propriétaire du fichier (ou root
) peut modifier les droits d'un fichier avec la commande chmod
chmod [ugoa] [+-=] [rwx]
fichier :
u
,g
,o
,a
, désigne le propriétaire (user), le groupe (group), les autres (others), tout le monde (a)+
,-
,=
désigne l'ajout, la suppression ou la valeur exacte des droitsr
,w
,x
désigne les droits en lecture / écriture / exécution
- suppression de l'accès au répertoire
vacances
pour les autres - suppression du droit en écriture au répertoire
vacances
pour le groupe
Modification des droits en octal¶
On peut stocker sur 3 bits les droits lecture / écriture / exécution, ce qui peut se traduire par un chiffre entre 0 et 7
valeur octale | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
droits | --- |
--x |
-w- |
-wx |
r-- |
r-x |
rw- |
rwx |
NB 4 pour le droit en lecture, 2 pour le droit en écriture, 1 pour le droit d'exécution
Les droits d'accès à un fichier peuvent donc se représente sur 3 chiffres entre 0 et 7 :
777
:rwxrwxrwx
600
:rw-------
Les droits d'accès à un fichier peuvent donc se représente sur 3 chiffres entre 0 et 7 :
777
:rwxrwxrwx
600
:rw-------
IV. Les processus¶
Un programme en cours d'exécution est appelé processus.
Chaque processus est identifiable par un numéro (PID : process id) et a été lancé par un utilisateur
NB : les processus sont susceptibles d'accéder à des fichiers ... ils le font avec les droits de l'utilisateur qui a démarré le processus
ps u
affiche les informations sur les processus de l'utilisateur
ps au
affiche les informations sur les processus de tous les utilisateurs attachés à un terminal
ps aux
affiche également les informations de tous les processus en cours d'exécution sur la machine
NB :
- le processus correspondant Ã
bash
qui interprète les commandes envoyées au terminal - le processus correspondant Ã
ps u
, la commande en cours d'exécution
La commande top
permet d'avoir la liste mise à jour régulièrement de tous les processus en cours, de leur utilisation de la mémoire et du CPU
Une commande peut mettre longtemps à s'exécuter (par exemple si on souhaite lancer un éditeur de texte depuis un terminal)
Pour que le terminal soit tout de même disponible, on peut lancer le processus en arrière-plan il suffit de faire suivre la commande de &
Ctrl + C
permet de "tuer" la commande en cours d'exécution dans le terminal
kill -9
PID permet de "tuer" un processus en cours (à condition d'être son propriétaire, ou d'être root
)
V. Les flux d'entrée/sortie¶
Notion de flux¶
De manière générale, les fichiers sont manipulés par les processus comme des flux entrant ou sortant.
Pour un fichier ouvert en lecture :
- le processus lit les données fournies comme un flux entrant
Pour un fichier ouvert en écriture :
- le processus écrit des données vers le fichier comme un flux sortant
Chaque processus dispose automatiquement de 3 flux standard :
stdin : entrée standard (numéro 0) qui correspond aux données récupérées depuis le clavier (input)
stdout : sortie standard (numéro 1) qui correspond aux informations à afficher à l'écran (console ou terminal) (print)
stderr : erreur standard (numéro 2) qui correspond aux messages d'erreur, eux aussi affichés à l'écran
NB : ces flux ne correspondent pas à des fichiers réguliers, mais sont tout de même traités comme des fichiers Linux
Redirection de flux¶
commande < fich.txt
permet de passer le contenu de fich.txt
comme flux d'entrée à commande
commande > fich.txt
permet d'écrire le flux de sortie dans le fichier fich.txt
(créé pour l'occasion, ou dont l'ancien contenu sera écrasé)
commande >> fich.txt
permet d'écrire le flux de sortie dans le fichier fich.txt
(créé pour l'occasion ou à la suite du contenu existant)
Redirection de flux¶
Moins courant :
commande 2> fich.txt
permet d'écrire le flux d'erreur dans le fichier fich.txt
commande 1> out.txt 2> err.txt
permet d'écrire le flux de sortie vers out.txt
et le flux d'erreur vers err.txt
Création d'un fichier liste.txt
à partir de la sortie de la commande ls Téléchargements
Ajout de la sortie de la commande en fin de fichier liste.txt
De nombreuses commandes qui prennent un fichier en argument savent aussi travailler à partir du flux d'entrée
Tentative de lister le contenu des répertoires /r*
(il y en a deux : /root
et /run
)
Le flux de sortie et le flux d'erreur sont écrits dans deux fichiers distincts
Tube¶
Un tube ("pipeline" ou "pipe" en anglais) est un mécansime qui permet de rediriger la sortie standard d'un processus vers l'entrée standard d'un autre processus.
commande1 | commande2
: le flux de sortie de la commande1 sert de flux d'entrée à la commande 2
L'utilisation d'un tube permet d'éviter d'avoir à créer un fichier intermédiaire.
Exemple :¶
ps aux
écrit sur sa sortie standard la liste des processus en cours d'éxécution (précédée d'une ligne d'entête)
wc
compte le nombre de lignes envoyées sur son entrée standard : 249
Il y a donc 248 processus en cours d'exécution (-1 à cause de la ligne d'entête)
On passe ensuite le flux à la commande less
(qui permet de lire un long fichier)
Plusieurs Tubes¶
commande1 | commande2 | commande3 ...
: même principe
L'utilisation d'un tube permet d'éviter d'avoir à créer un fichier intermédiaire.
NB : concrètement, un tube est aussi traité comme un fichier Linux. C'est un flux à la fois sortant et entrant.
VI. Le système de fichiers (2/2)¶
VI.1 Représentation interne des fichiers¶
Détails techniques¶
Le système de fichier est un moyen d'organiser les informations contenues dans la mémoire de masse (disque dur, clé usb ...) divisée en blocs.
A chaque nom de fichier est associé un inode (index node) dans une grande table.
Un inode contient :
les informations sur le fichier (méta-données : propriétaire, droits, taille ...)
et l'adresse des blocs mémoire associés au fichier (données)
Pour un fichier régulier, les blocs mémoire correspondent au contenu du fichier.
Pour un répertoire (qui est aussi un fichier), les blocs mémoire correspondent aux associations "nom de fichier"-"inode" des fichiers contenus dans le répertoire.
ls -i
permet d'afficher les inodes
Subtilité : plusieurs noms peuvent désigner le même inode (et donc le même contenu)
L'inode de .
est le même que l'inode de Documents
stat
fichier permet d'afficher certaines informations de l'inode
Lien symbolique¶
ln -s
cible nom permet de créer un lien symbolique : un petit fichier qui désigne un autre fichier. C'est l'équivalent d'un raccourci sous Windows
NB: l'inode du lien symbolique est différent de celui du fichier.
VI.3 Montage, démontage¶
Montage et démontage de sytèmes de fichiers¶
Le système de fichier sous Linux se présente comme une arborescence unique (pas de notion de lecteur C: D: comme sous Windows)
Les différents disques (ou partitions) ou supports amovibles (clé usb, CD-Rom ...) ont aussi chacun leur propre sysème de fichier qui vient se greffer au système de fichier principal.
Montage, démontage d'un support amovible¶
Lors de l'insertion d'une clé USB par exemple :
- le système de fichier est monté (mount) automatiquement quelque part dans l'arborescence
/media/user/...
Avant de retirer la clé USB, il faut démonter le système de fichier (unmount) :
- si un processus est entrain d'utiliser les fichiers de cette arborescence, le système de fichier ne sera pas démonté ("device busy")
- si le système de fichier est correctement démonté, on peut ensuite retirer la clé USB
En cas de retrait de la clé USB sans démontage préalable :
- les modifications n'auront pas forcément été prises en compte : (les écritures sont souvent mises en mémoire avant d'être inscrites physiquement sur le support)
- les fichiers ouverts peuvent se trouver endommagés.
Pour conclure¶
Les possibilités offertes par l'interface système permettent souvent de travailler plus rapidement qu'en passant par une interface graphique.
Pour des utilisations plus avancés, il est possible de réaliser des programmes écrits dans un langage propre au shell (shell script) : boucles, tests, entrée/sortie, fonctions ... En particulier, le shell manipule des variables dites variables d'environnement :
La variable
PATH
contient les chemins vers des dossiers où le shell cherchera les commandes à exécuterLa variable
HOME
contient le chemin vers le répertoire maison~
On peut voir le contenu de ces variables avec la commande echo $VARIABLE
, et avoir la liste des variables avec la commande env