Diaporama n°17¶

Systèmes d'exploitation¶

I. Généralités¶

II. Les commandes de base du shell¶

III. Le système de fichiers (1/2)¶

IV. Les processus¶

V. Les flux d'entrée/sortie¶

VI. Le système de fichiers (2/2)¶

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¶

image.png

Environnement de bureau Linux - Ubuntu (Unity)¶

image.png

Environnement de bureau MacOS¶

image.png

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

image.png

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

image.png

MacOS (2000- ...) - Apple¶

  • Entreprise crée en 1976 par Steve Jobs, Steve Wozniak

  • Dérivé d'Unix

image.png

Android (2007- ...) - Google¶

  • Entreprise crée en 1998 par Larry Page et Sergey Brin

  • Pour les téléphones / tablettes

  • Utilise Linux

image-4.png

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

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

image.png

Des groupes d'utilisateurs peuvent être définis.

La commande groups donne le nom des groupes auquel l'utilisateur appartient

image.png

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 ~

image.png

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

image.png

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

image.png

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"

image.png

La commande tree permet d'afficher l'arborescence des fichiers à partir du répertoire de travail

image.png

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)

image.png

  • 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épertoire TD
  • ls dir liste le contenu du répertoire dir
  • renommage du répertoire TD en TDInfo

"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

image.png

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

image.png

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

image.png

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 ou Ctrl C

image-2.png

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

image.png

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égulier

  • Les 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

image.png

  • 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

image.png

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

image-2.png

Le contenu du fichier /usr/bin/cat, destiné à être exécuté sur machine (code machine)

image.png

NB exemple de script exécutable

image.png

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épertoire
  • drwx------ : 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 droits
  • r, w, x désigne les droits en lecture / écriture / exécution

image.png

  • 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-------

image.png

Les droits d'accès à un fichier peuvent donc se représente sur 3 chiffres entre 0 et 7 :

  • 777 : rwxrwxrwx
  • 600 : rw-------

image.png

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

image.png

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

image.png

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)

image-2.png

image-2.png

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

image-4.png

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 image.png

Ajout de la sortie de la commande en fin de fichier liste.txt image.png

De nombreuses commandes qui prennent un fichier en argument savent aussi travailler à partir du flux d'entrée

image.png

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

image-2.png

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)

image.png

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

image.png

stat fichier permet d'afficher certaines informations de l'inode

image.png

VI.2 Liens¶

Lien physique¶

ln cible nom permet de créer un nouveau nom pour un même inode : lien physique ou lien matériel (peu utilisé)

Le nouveau fichier a le même inode, le nombre de références à l'inode passe à 2

image.png

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.

image.png

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.

image.png

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écuter

  • La 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

image.png