Les systèmes d'exploitation

Quand l'utilisateur d'un ordinateur, souhaite lui faire faire une action, il ne s'adresse pas directement à lui, car celui-ci ne comprend que le langage machine. L'utilisateur a recours à un logiciel ou a une interface de commande. Cette interface fait le pont entre l'utilisateur et les composants matériels.

Genèse

Jusqu'aux années 1950, les ordinateurs n'étaient utilisables que par les programmeurs qui interagissaient directement avec le matériel. Les rôles de programmeur et d'opérateur étaient alors confondus. Il n'y avait pas de système d'exploitation.
Puis, dans les années 1960, les premiers systèmes d'exploitation firent leur apparition. Dans un souci d'exploiter au mieux les ordinateurs, la mise en place de fonction d'ordonnancement des tâches et la séparation des rôles de programmeur et d'opérateur en été les premières missions.
Enfin, dans les années 1970, toujours avec l'objectif d'optimiser l'usage des calculateurs, le développement des systèmes d'exploitation s'est accéléré. Ils devaient assurer le partage des ressources matérielles des ordinateurs entre plusieurs programmes fonctionnant simultanément.
Depuis les années 1980, les systèmes d'exploitation se sont sophistiqués, en particulier avec l'essor de la , des interconnexions entre systèmes hétérogènes, d'Internet, et des réseaux locaux.

Définition d'un système d'exploitation

Un est capable d'exécuter plusieurs logiciels à la fois pour un utilisateur. Un serveur, en plus de cette faculté, doit être capable d'accepter plusieurs utilisateurs en même temps.
Les ressources matérielles d'un ordinateur doivent donc être partagées entre les différentes applications et utilisateurs qui y accèdent. C'est le système d'exploitation qui permet ce partage.

Un Système d'Exploitation (SE), ou en anglais Operating System (OS), est un ensemble de programmes qui répartissent l'usage des ressources matérielles d'un ordinateur pour les logiciels qui s'y exécutent. Windows, OS-X ou encore Linux sont tous les trois des systèmes d'exploitation.

Schéma d'un système d'exploitation
utilisateur utilisateur
application application application application
système d'exploitation
matériel
  1. Rechercher sur votre ordinateur portable et/ou votre téléphone portable, la version de votre système d'exploitation.
    • Pour Android : Dans paramètres (roue dentée) puis À propos du téléphone.
    • Pour Windows : Clic droit sur Ce PC puis Propriétés ou dans les paramètres Propriétés Système.
    • Pour iOS : Dans l'application Réglages puis Général et enfin Informations.
  2. Votre système d'exploitation est-il à jour ? Pourquoi est-ce important ?
    La plupart des virus exploitent des failles de sécurités des systèmes d'exploitation. Il est donc fortement conseiller de le maintenir à jour pour corriger ces failles. L'activation des mises à jour automatiques quand cela est possible est une bonne solution.

Les fonctions d'un système d'exploitation

Les fonctions de base d'un système d'exploitation sont d'assurer la gestion des accès :
  • au processeur ;
  • à la mémoire ;
  • aux périphériques d'entrée/sortie (clavier, souris, carte réseau, ...).
Mais aussi :
  • la gestion des fichiers : Il assure le stockage des fichiers sur le disque dur et l'organisation de ce stockage. On peut ainsi, grâce au système d'exploitation, manipuler les fichiers comme des objets, les déplacer, les détruire, les renommer et les modifier.
  • la gestion des utilisateurs et leurs droits.

Les systèmes d'exploitation libres et les systèmes d'exploitation propriétaires

Sur leur ordinateur personnel, les particuliers comme les professionnels utilisent communément Windows et Mac OS et plus marginalement Linux.
Ce dernier a la particularité d'être libre et d'être beaucoup plus utilisé par le monde universitaire et les professionnels de l'informatique.

Descendances des principaux systèmes d
Descendances des principaux systèmes d'exploitation avec en vert, ceux qui sont libres.
Logos GNU/Linux
GNU/Linux est un système d'exploitation libre créé en 1991 par Linus Torvalds, informaticien américano-finlandais de 21 ans. Il continue d'en diriger le développement avec le titre de (comme Guido Van Rossum pour le langage python).
Linus Torvalds

On qualifie un logiciel de libre quand son code est distribué dans le cadre d'une licence qui en autorise la consultation, la modification, et la redistribution, sans contrepartie financière. C'est le cas de Linux et également d'Android sur mobile. L'usage de ces systèmes s'avère sans restriction et gratuit, à l'opposé des systèmes propriétaires. Cette liberté d'usage d'un système d'exploitation libre basé sur Linux a donné lieu à la création de très nombreuses variantes, aussi appelées distributions dont Debian, Ubuntu ou encore Android, tous dérivé de Linux dont ils ont repris le noyau.

Voir l'arborescence de la multitude de distributions Linux sur Wikipédia.

Les matériels mobiles tels que tablette ou smartphone, qui reprennent en plus petit, l'architecture d'un ordinateur classique, sont également doté d'un système d'exploitation. On peut citer Android développé par Google où iOS développé par Apple. Si tous ces systèmes d'exploitation ont la même vocation, certains sont libres tandis que d'autres sont propriétaires.

Les commandes de base

Le système de fichiers

Que ce soit sur les systèmes Linux ou sur Windows, les fichiers sont organisés selon une structure arborescente.

Arborescence typique sous Linux
Arborescence typique sous Linux

Le dossier tout en haut est le dossier racine (root). Ce dossier a été choisi pour être la base du

Le dossier tout en haut est le dossier racine (root). Ce dossier a été choisi pour être la base du stockage des fichiers. Sur Linux, la racine est / tandis que pour Windows, la racine est C://.

Chaque dossier à la racine sert une fonctionnalité du système d'exploitation :
  • /bin contient les commandes de base
  • /boot contient l'ensemble des fichiers nécessaire au démarrage de Linux
  • /dev pour "device" contient les fichiers nécessaires à la liaison avec les périphériques
  • /etc contient un fichier listant les utilisateurs
  • /home contient les dossiers personnels des utilisateurs
  • etc ...

Le répertoire courant est le répertoire dans lequel on se situe. Il est désignable par un point ./.
Le répertoire père est le répertoire contenant le répertoire courant. Il est atteignable grâce à deux points ../.
Le chemin absolu d'un répertoire ou d'un fichier est son chemin en partant de la racine et montrant l'ensemble des répertoires traversés.
Le chemin relatif d'un répertoire ou d'un fichier est son chemin en partant du répertoire courant.

D'après l'arborescence typique sous Linux exposées ci-dessus :
  1. Donner le chemin absolu pour atteindre le dossier videos.
    /home/martin/videos
  2. Condisérant que le répertoire courant est Lisa, donner le chemin relatif pour atteindre le dossier images.
    ../martin/images

Le shell

Maintenant que nous connaissons le rôle du système d'exploitation pour un ordinateur, nous allons apprendre à lui passer des ordres. La manière la plus basique est d'employer des commandes en mode texte en utilisant le clavier, plutôt que d'utiliser l'interface graphique prévue par le système d'exploitation et qui utilise essentiellement la souris. Cette façon de procéder est particulièrement utile dans des situations de dysfonctionnement.

Ces commandes textuelles doivent être entrées dans un shell.
Il s'agit d'un programme assurant l'interface entre un ordinateur et son utilisateur. Les shells permettent d'accéder à des fonctions plus nombreuses et profondes d'un PC, ce que ne permet pas toujours l'interface graphique. C'est pourquoi, ils sont préféres par de nombreux professionnels de l'informatique et administrateurs système.

Remarque : «Shell» signifie «coquille» en anglais. En effet la coquille est la partie visible pour un utilisateur. C'est via cette coquille qu'il permet d'interagir avec ses fonctions internes.

Historiquement, les systèmes d'exploitation UNIX et Windows ont utilisé des shells différents puisque leurs noyaux sont différents. Il en résulte une différence dans la syntaxe des instructions suivant que l'on soit sur l'un ou l'autre des systèmes d'exploitation.
Le shell de Linux est souvent appelé «Terminal». Le shell de Windows, appelé «l'invite de commande» (cmd), a toujours été plus limités en fonctionnalités que le shell Linux.
«Windows Powershell» est le successeur attendu de l'invite de commande de Windows. Ce nouveau shell a plus de capacité d'action et veut devenir un outil universel pour les administrateurs système quelque soit le système d'exploitation. Il reprend pour cela en partie les commandes du shell de Linux et de Windows.

Jeu Terminus

En 2011, des étudiant·e·s du MIT ont eu l'idée de passer par le biais du jeu vidéo pour apprendre à utiliser les lignes de commande GNU/Linux aux non‐initié(e)s. Trois ans plus tard sortait le jeu Terminus.

Jouer à Terminus en établissant l'arborescence du jeu au fur et à mesure de l'aventure pour ne pas vous y perdre.
La carte level_map.png est dans le dossier docs du dépôt Git public du jeu : github.com/luffah/Terminus.

Les commandes de base pour manipuler les fichiers

Sous Linux, ces commandes sont écrites dans un langage de script appelé Bash et utilisable dans le Terminal.
Sur les systèmes Windows, le langage de script s'appelle Batch et est utilisable dans l'invite de commande.

🐧 Shell Linux :
Terminal
Langage Bash
⊞ Shell Windows :
Invite de commande
Langage Batch
Description
Se déplacer dans l'arborescence
cd [CHEMIN]Changer de répertoire (change directory) en donnant son chemin relatif ou absolu.
cd ..Aller dans le répertoire père.
pwdchdirAfficher le chemin absolu du répertoire courant.
lsdirLister le contenu du répertoire courant.
ls --helphelp dirAfficher la documentation 'une commande.
Gérer les répertoires/dossiers et les fichiers
mkdir [DOSSIER]Créer un nouveau répertoire.
echo [TEXTE] > [FICHIER]Écraser ou créer un fichier texte contenant un texte dans le dossier courant.
echo [TEXTE] >> [FICHIER]Concatèner un texte à la suite du texte déjà contenu dans le fichier.
cat [FICHIER]type [FICHIER]Afficher le contenu d'un fichier dans la console.
mv [FICHIER] [FICHIER]ren [FICHIER] [FICHIER]Renommer un fichier en ajoutant le nom du fichier suivi de son nouveau nom.
mv [FICHIER] [CHEMIN]move [FICHIER] [CHEMIN]Déplacer un fichier en donnant le chemin du fichier suivi du chemin du dossier d'accueil.
cp [FICHIER] [CHEMIN]copy [FICHIER] [CHEMIN]Copier un fichier
rm [FICHIER]del [FICHIER]Supprimer le fichier.
rmdir [DOSSIER]del [DOSSIER]Supprimer le dossier.
Divers
freesysteminfoConnaître la mémoire disponible.
datedate
time
Obtenir la date et l'heure courantes.
grep [TEXTE] [FICHIER]Recherche un texte dans un fichier.
psListe tous les processus actifs du système.

Remarques :

  • Pour reprendre la main dans la console, utilisez la combinaison de touches CTRL + C.
  • Lorsque vous écrivez une commande, vous avez la possibilité d'appuyer sur la touche TAB afin d'auto-compléter la fin de la commande. Selon les shells, cette technique peut ne fonctionner que lorsqu'il n'y a qu'une seule possibilité pour l'autocomplétion, ou bien donner la liste des possibilités pour la complétion. C'est très pratique. Cela permet d'éviter d'avoir à taper tout le nom d'un fichier par exemple.

  1. Depuis une distribution Linux, accéder au Terminal ou utiliser l'émulateur de console en ligne jslinux pour vous familiariser avec les différentes commandes Linux. Vous ne devez utiliser que des lignes de commande du Terminal et ne pas utiliser l'interface graphique du système d'exploitation.
  2. Créer un dossier à votre nom et s'y rendre .
  3. Créer plusieurs fichiers et y écrire puis afficher leur contenu.
  4. Renommer votre fichier et le déplacer dans un autre dossier que vous aurez préalablement créé.
  5. Supprimer vos deux dossiers avec tout leur contenu pour nettoyer vos traces.
    Vous pouvez obtenir la documentation de la commande rmdir avec la commande rmdir --help. On constate que cette commande a une option --ignore-fail-on-non-empty. Ainsi pour supprimer un dossier non-vide, la commande Bash est : rmdir nom_dossier --ignore-fail-on-non-empty.

  6. Rappel : Pour taper plus vite, utiliser la touche TAB. Exemple : Taper rmdir nom_dossier --ig puis TAB.
Problème QWERTY/AZERTY ? Afin de modifier le mode de votre clavier sous Linux (impossible sous l'émulateur en ligne), obtenez la liste des périphériques d'entrée et repérer le code du clavier avec la commande : xinput --list ; puis définissez le mode du clavier (fr pour AZERTY, us pour QWERTY) avec la commande : setxkbmap -device 3 fr

Le Bash est un langage de script facile d'utilisation et un outils incontournable des administrateurs systèmes Linux car comme les autres langages de script, il permet d'automatiser les tâches. Ses instructions peuvent être associées entre elles et enregistrées dans un fichier texte (extension .sh) pour être exécutées plus tard.

Sous windows, le langage de script Batch offre moins de possibilités mais comme sous Linux, les scripts Batch peuvent être enregistrés dans un fichier texte avec les extensions .bat ou cmd.

Associer les commandes afin d'écrire dans un fichier texte, la liste des fichiers du dossier courant.
ls > liste_fichiers.txt

Gestion des droits d'accès aux fichiers

Nous avons vu qu'un système d'exploitation a pour mission, entre autres, de gérer les différents utilisateurs qui se partagent les ressources de l'ordinateur. En particulier, il doit réglementer l'accès aux fichiers de son arborescence afin d'éviter des problèmes.

En effet, il n'est pas logique de permettre à un utilisateur de supprimer ou même de modifier les fichiers d'un autre utilisateur. Il n'est pas non plus normal de laisser n'importe quel utilisateur supprimer des répertoires entiers où sont localisés les programmes du système d'exploitation, au risque de provoquer une panne.
Nous allons voir comment, sous Linux, ces accès sont gérés.

Organisation des utilisateurs sous Linux

Il existe sous Linux un utilisateur particulier qui dispose de tous les droits. Il s'agit du super utilisateur (SU), aussi appelé root ou encore administrateur.

Pour faciliter l'administration des droits accordés à chacun des utilisateurs déclarés dans le système d'exploitation, il est possible d'organiser ces derniers en groupes. Ainsi, au lieu d'accorder de manière individuelle un droit d'accès, il est possible d'attribuer ce droit à tous les membres d'un groupe.

Les droits d'accès

Quel droit peut-on accorder sur un fichier ou un répertoire ? Ils sont au nombre de trois :

  • L'accès en lecture, repéré par la lettre r (read) accorde le droit de lire le contenu de l'élément,
  • L'accès en écriture, repéré par la lettre w (write) accorde le droit de modifier le contenu de l'élément,
  • L'accès en exécution, repéré par la lettre x (execute) accorde le droit d'exécuter le contenu de l'élément si celui-ci contient un code exécutable.
Les droits sont accordés à trois catégories d'utilisateurs :
  • le propriétaire de l'élément, repéré par la lettre u (user),
  • le groupe propriétaire rassemblant les utilisateurs auquel est associé l'élément, repéré par la lettre g (group)
  • tous les autres utilisateurs repéré par la lettre o (others). Ceux-ci n'appartiennent donc pas au groupe auquel est associés l'élément, et aucun d'eux n'en est le propriétaire,
  • la lettre a (all) est également utilisée lors de l'affectation des droits d'accès.
Convertir les droits d'accès en code décimal :
  1. rw-r--r--
    644
  2. rwxrwxrwx
    777
  3. rwxr--r--
    744
  4. rwxrw-r--
    764
🐧 Shell Linux :
Terminal
Langage Bash
⊞ Shell Windows :
Invite de commande
Langage Batch
Description
Gestion des droits et permissions d'accès
ls -l??Lister les fichiers du répertoire courant en affichant les droits d'accès et les permissions.
ls -l [FICHIER]??Afficher les droits d'accès et les permissions du fichier.
chmod XXX fichierattribModifier les droits d'accès et les persmissions d'un fichier. XXX correspond au code décimal des droits d'accès. Plus de détails sur cette instruction : Wikipédia
chmod UMD,...,UMD [FICHIER]attribModifier les droits d'accès et les persmissions d'un fichier. UMD correspond à la lettre Utilisateur (u, g, o ou a) suivi de la Modification (- pour enlever un droit ou + pour l'ajouter) et du Droit (r, w ou x).
chown [UTILISATEUR] [FICHIER]??Modifier le propriétaire d'un fichier.
Divers
ping [URL/IP]Tester la liaison vers un autre poste.
ifconfigipconfigObtenir les informations de l'interface réseau.
./[FICHIER][FICHIER]Exécuter le script de commande Bash contenu dans le fichier .sh pour Linux, ou le script de commandes Batch contenu dans un fichier .bat ou .cmd sous Windows.
python [FICHIER]
python3 [FICHIER]
py [FICHIER]Exécuter le script python contenu dans le fichier.
\^Échapper un caractère. En plaçant ce caractère devant un autre caractère, ce dernier sera interprété littéralement.
"[TEXTE]"??Échapper une chaîne de caractères.
  1. Depuis une distribution Linux, accéder au Terminal ou utiliser l'émulateur de console en ligne jslinux. (Attention, dans cet émulateur en ligne, vous êtes super-administrateur donc vous avez tous les droits.)
  2. Créer un dossier avec quelques fichiers.
    mkdir Julien
    echo bla > Julien/fichier_01.txt
    echo blabla > Julien/fichier_02.txt
    echo blablabla > Julien/fichier_03.txt
  3. Afficher tous les fichiers de ce dossier avec les droits d'accès et permissions.
    ls -l
  4. Interprétez les droits d'accès et permissions ainsi obtenu : qui a le droit de faire quoi ?
  5. Modifier les droits d'accès d'un des fichiers afin que tout le monde puisse lire, modifier et exécuter ce fichier.
    chmod 777 Julien/fichier_01.txt
  6. Sur le même fichier, modifier les droits d'accès afin que le propriétaire puisse tout faire, le groupe seulement lire et les autres seulement exécuter.
    chmod 741 Julien/fichier_01.txt
  7. Sur le même fichier, ajouter le droit d'écriture au groupe propriétaire.
    chmod g+w Julien/fichier_01.txt
  8. Sur le même fichier, retirer le droit d'écriture du groupe et ajouter le droit d'exécution.
    chmod g-w,g+x Julien/fichier_01.txt
  9. Sur le même fichier, retirer le droit d'exécution à tous.
    chmod a-x Julien/fichier_01.txt

Comme les langages de programmation, le langage de script Bash permet de faire des boucles.

  1. Écrire un script de commandes Bash sous Linux et l'enregistrer dans un fichier tables.sh.
    Ce script doit afficher dans le Terminal les 10 tables de multiplication.
    Voici le syntaxe pour faire une boucle en Bash :
    for var in 1 2 3
    do
    echo $var
    done
  2. Exécuter votre script Bash depuis le Terminal (sans utiliser l'interface graphique).
    for i in 1 2 3 4 5 6 7 8 9 10
    do
    for j in 1 2 3 4 5 6 7 8 9 10
    do
    echo $i x $j = $(($i*$j))
    done
    echo   # Ligne vide
    done
  1. Écrire un script python et l'enregistrer dans un fichier gen_table.py. Ce script doit créer un dossier intitulé tables_multiplications contenant dix fichiers texte nommé table_XX.txt. Chaque fichier devra contenir une table de multiplication (table de 1 pour le 1er fichier table_01.txt, etc.. jusqu'à la table de 10 dans le fichier table_10.txt).
    Il faut utiliser le module natif os, puis faites vos recherches ...
  2. Exécuter votre script python depuis le Terminal (sans utiliser l'interface graphique).
    import os
    os.mkdir("tables_multiplications")
    
    for i in range(1, 11):
        # Création de la table de multiplication
        table = ""
        for j in range(1, 11):
            table += str(i) + " x " + str(j) + " = " + str(i*j) + "\n"  # \n correspond à un saut de ligne
    
        # Enregistrement de la table dans un fichier
        nom_fichier = "table_0" + str(i) + ".txt" if i<10 else "table_" + str(i) + ".txt"
        with open("tables_multiplications/"+nom_fichier, 'w') as f:
            f.write(table)
En français en anglais
ordinateur personnel personal computer (PC)
Système d'Exploitation (SE) Operating System (OS)
logiciel libre free software
interface système ou coque logicielle shell
racine root