4. Système d'exploitation

Un ordinateur est une machine complexe; sa programmation et sa gestion, notamment celle de sa mémoire, est délicate puisque cela nécessite de se mettre "au niveau de la machine", ce qui n'est pas toujours évident pour un humain.

Pour faire l'interface entre le matériel et l'utilisateur, un ensemble de programmes, appelé système d'exploitation ( SE ou OS en anglais : Operating System ), "tournent" donc en permanence sur un ordinateur de façon à faciliter son utilisation.

Le systèmes d'exploitation étant proches de la machine, les plus anciens étaient donc écrits en assembleur; actuellement, ils sont généralement écrits dans un langage à mi-chemin entre le bas et le haut-niveau, comme le langage C.

Systèmes d'exploitation

Compléter la frise chronologique en y plaçant les dates d'apparition de quelques systèmes d'exploitation et de langages de programmation.

Rôle d'un système d'exploitation

Le système d'exploitation contient un ensemble de logiciels système ou noyau qui permettent de :

A côté du noyau, un SE fournit également d'autres logiciels pouvant réaliser des taches de plus haut-niveau : programmes utilitaires ou services pour gérer l'affichage, le son, contrôler le système de fichiers,....

Le SE est souvent vu comme une succession de "couches" qui s'empilent entre le matériel et l'utilisateur pour faire l'interface entre les deux :

Noyau Système d'exploitation

Libre ou privatif ( = propriétaire )

Il existe divers systèmes d’exploitation et tous n’apportent pas les mêmes solutions aux questions posées ci-dessus.
Indépendamment des solutions apportées, il existe deux familles de systèmes : les systèmes propriétaires et les systèmes libres.

La différence essentielle est que le code d’un logiciel libre (et donc d’un système libre) est public. On peut en général le modifier ou s’en servir pour fabriquer de nouveaux produits.

Les logiciels propriétaires sont en général non ouverts, il est donc plus difficile (voire illégal) de les modifier.

Les logiciels libres sont souvent maintenus par la communauté, mais peuvent aussi l’être par des entreprises qui les utilisent et qui ont intérêt à ce qu’ils restent efficaces et utilisés par d’autres, ce qui assure l’existence de développeurs susceptibles de participer à leur maintien.
Les logiciels propriétaires quant à eux sont essentiellement développés et mis à jour par l’entreprise qui les possède et qui peut décider d’arrêter de les maintenir.
Ce sont deux modèles économiques très différents.

Les SE libres ont eu pendant longtemps une réputation de systèmes qui ne s'adressent qu'aux "geeks" et autres "cracks" de l'informatique, impossibles à utiliser par "M. Tout-le-monde" du fait de leur complexité; cette réputation est aujourd'hui complètement injustifiée, et ils sont devenus aussi simples à manipuler que les systèmes propriétaires "classiques".

L'utilisation d'un système libre est au programme de la Spécialité NSI; ce sera pour vous GNU/Linux.

Le système GNU/Linux

Précisons tout de suite que "Linux" est strictement le nom du noyau de ce système d'exploitation, "GNU" étant le nom du système en lui-même; mais il peut utiliser différents noyaux : "GNU/Linux" signifie donc "Système d'exploitation GNU utilisant le noyau Linux".

Cependant, et bien qu'une "guerre des noms" existe autour de ce sujet, le terme "Linux" est très souvent utilisé en lieu et place de "GNU/Linux", c'est ce que nous ferons d'ailleurs dans ce chapitre...

Il existe de très nombreuses "versions" de Linux, que l'on appelle des distributions; elles diffèrent par la nature des logiciels qu'elles incluent et aussi par leur "philosophie" vis à vis du logiciel libre : utilisation uniquement de logiciels libres, ou "tolérance" d'une partie non-libre.
La distribution installée sur les PC de la salle H213 est la distribution Debian, en double-boot" avec Windows : le choix entre les deux se fait au démarrage de l'ordinateur.

Utilisateurs et administrateur

Comme tous les systèmes d'exploitation modernes, Linux est un SE multi-utilisateurs, c'est à dire que plusieurs utilisateurs différents peuvent utiliser la machine sur laquelle il tourne, avec certaines restrictions que l'on appelle des droits ou permissions.

Mais contrairement à ce qui se passe sous Windows où un utilisateur "normal" a généralement tous les droits sur la machine ( installer des logiciels, des pilotes de matériel, utilisation de toutes les ressources, etc...), la gestion des utilisateurs sous Linux est beaucoup plus stricte; on y distingue :

Chaque utilisateur dispose sur la machine d'un Répertoire personnel pour y stocker ses documents, ses images, etc...Les utilisateurs ( autre que root ) ne peuvent pas accéder à la zone personnelle des autres utilisateurs.

Le nom de votre compte ainsi que votre mot de passe vous ont été communiqués : utilisez les pour vous connecter à votre session Linux.

Remarque : chaque compte-élève est présent sur toutes les machines de la salle H213, mais vos fichiers personnels ne sont accessibles ( pour l'instant...) que sur la machine où vous les avez enregistrés.

Le bureau Linux

En démarrant Linux en mode graphique, vous arrivez sur le bureau; dans la version sur laquelle vous travaillez il s'agit ici de XFCE, qui est un bureau "léger".

Bureau XFCE

Il existe d'autres bureaux comme Gnome, KDE, Cinnamon, Mate, etc... qui offrent les mêmes fonctionnalités mais sont un peu plus "esthétiques" graphiquement.

Le fait que sous Linux, l'utilisateur ait le choix du bureau qu'il souhaite utiliser, et de manière générale de beaucoup de logiciels différents, est une des forces de ce système d'exploitation, mais aussi un des inconvénients car beaucoup d'utilisateurs se sentent perdus face à ce choix pléthorique...Le choix de la liberté !

Les logiciels installés sur les machines sont disponibles pour la plupart dans le Menu en haut à gauche de la fenêtre, et pour certains, dans le dock en bas de l'écran. Un clic-droit sur le bureau fait apparaître un menu contextuel qui propose également le menu des applications.

Menu XFCE
Menu XFCE
Dock XFCE
Dock
Menu contextuel XFCE
Menu contextuel

Prenez quelques minutes pour prendre vos repères; vous retrouverez tout ce qui doit vous être familier : un gestionnaire de fichiers ( Thunar ) et un accès direct sur le bureau à votre Répertoire personnel, un navigateur web ( Firefox ), une suite bureautique ( LibreOffice ), etc...
Les outils de développement installés sont Pyzo et Bluefish ( l'équivalent de Notepad++ ).

Le système de fichiers Linux

Dans la "philosophie UNIX" dont dérive Linux, tout est fichier : toutes les ressources de la machine, les documents mais aussi les périphériques, peuvent être accédés grâce à leur chemin d'accès dans le système de fichiers.

L'arborescence du système de fichiers, c'est à dire la hiérarchie des répertoires et fichiers présentée sous forme d'un arbre, est la suivante :

Système de fichiers Linux
Répertoire description
/ Répertoire "racine", point d'entrée du système de fichiers
/boot Répertoire contenant le noyau Linux et l'amorceur
/bin Répertoire contenant les exécutables système de base
/dev Répertoire contenant des fichiers spéciaux nommés devices qui permettent le lien avec les périphériques de la machine
/etc Répertoire contenant les fichiers de configuration du système
/home Répertoire contenant les fichiers personnels des utilisateurs (un sous-répertoire par utilisateur)
/media ou /run/media Répertoire contenant les « points de montage » des médias usuels : cd, dvd, disquette, clef usb
/root Répertoire personnel de l'administrateur
/tmp Répertoire contenant des fichiers temporaires utilisés par certains programmes
/usr Répertoire contenant les exécutables des programmes (/usr/bin et /usr/sbin), la documentation (/usr/doc).
/var Répertoire contenant les fichiers qui servent à la maintenance du système (les fichiers de journaux notamment dans /var/log)

Et non, pas de "c:\" ou "d:\" : c'est vraiment une autre façon de voir les choses...

Pour indiquer dans l'arborescence le chemin d'accès vers une ressource, on utilise le slash ( "/" ) pour séparer deux niveaux successifs :


	/niveau_1/niveau_2/niveau_3/....
				

Le répertoire dans lequel on se "trouve" actuellement s'appelle le répertoire courant.

Un chemin d'accès peut être :

  • absolu lorsqu'on le décrit complètement depuis la racine
  • relatif si on le décrit seulement depuis le répertoire courant

Par exemple, dans l'arborescence ci-contre, si le répertoire courant est : /home/bob

  • le chemin absolu vers le sous-répertoire rock est : /home/bob/music/rock
  • le chemin relatif vers ce sous-répertoire est simplement : /music/rock
Exemple d'arborescence Linux

Linux en ligne de commandes

La mauvaise réputation de Linux vient de l'idée reçue que tout doit être fait en ligne de commande, c'est à dire en entrant de longues et compliquées suites de caractères destinées à exécuter les taches même les plus simples; d'où la conséquence que seuls les "initiés" et les surdoués de l'informatique peuvent utiliser un tel système...

Cette situation était peut-être vraie au début de l'existence de Linux ( on rappelle : 1991 ) mais est complètement dépassée aujourd'hui : vous avez pu utiliser Linux en mode graphique et retrouver vos marques très rapidement.

Cependant, la ligne de commande est un outil très puissant, de nombreuses taches pouvant souvent grâce à elle être effectuées plus rapidement; de plus, certains utilisateurs préfèrent passer par la ligne de commande pour réaliser les taches courantes, car ils y sont habitués. On voit même maintenant arriver sous Windows l'équivalent de la ligne de commandes Linux, le "Power-Shell" : c'est donc bien que cela a son utilité !

L'étude et l'utilisation de quelques commandes "classiques" sous Linux sont au programme de la spé NSI, vous allez donc découvrir à quoi tout cela ressemble...

Lignes de commande Linux
J'y comprends rien, mais c'est trop la classe...

Pas de Linux chez vous ? Pas de problème : vous pouvez faire de la ligne de commande...en ligne !

Voila un lien vers un émulateur de ligne de commande Linux fonctionnant dans un navigateur ( et codé en JavaScript ) :

Par défaut, vous vous connectez en tant qu'administrateur ( compte root ), mais vous pouvez créer un compte utilisateur, même si ce n'est pas indispensable.

Comment entrer des commandes : le Terminal

Chaque distribution Linux fournit un logiciel spécialement destiné à entrer des commandes et à les exécuter, le terminal ou console.

Vous pouvez le lancer à partir du dock en bas de l'écran ou à partir du menu des applications ( "Émulateur de terminal" ).

Terminal XFCE

Au lancement du terminal, et après l'exécution de chaque ligne de commande, s'affiche l'invite de commande; elle est de la forme :


	utlisateur@nom_de_la_machine:répertoire_courant$
			

Dans l'exemple ci-dessus :

Comme son nom l'indique, on invite donc l'utilisateur à entrer une commande en sachant qu'il se "trouve" actuellement dans tel ou tel répertoire.
Chaque ligne de commande doit être suivie de l'appui sur la touche ENTRÉE pour être exécutée.

Tout se fait au clavier dans le terminal, mais la souris peut quand même être utilisée pour faire par exemple du copier-coller.

Le langage Bash

Et maintenant, vos première commandes...Elles s'écrivent dans une syntaxe portant le nom de langage Bash.
Vous trouverez ici une liste des commandes Bash usuelles, mais vous allez déjà en voir quelques unes parmi les plus courantes.

Déplacement dans l'arborescence des fichiers

La ligne de commande ne "bloque" bien entendu pas l’utilisateur dans sa zone personnelle : elle lui permet de naviguer dans toute l'arborescence.

La commande pour changer de répertoire est la commande cd; par exemple, pour remonter d'un niveau dans l'arborescence :


	cd ..
			

Pour revenir à son répertoire personnel quelque soit l'endroit de l'arborescence où l'on se trouve :


	cd
			

Et de manière générale, pour atteindre un répertoire quelconque de l'arborescence :


	cd /chemin/vers/le/répertoire
			

Visualisation du contenu d'un répertoire

On utilise pour cela la commande ls :


	test@DOC-SPC:~$ ls
	Bureau		Public
	config.ini	sketchbook
	Documents	Téléchargements
	Images		test.py
	Modèles		Vidéos
 	Musique
 	test@DOC-SPC:~$
			

La commande ci-dessus liste par ordre alphabétique les répertoires et les fichiers présents dans le répertoire courant; pour avoir plus d'informations, on utilisera la commande avec l'option -l :


	test@DOC-SPC:~$ ls -l
	total 3308
	drwx------  2 test test    4096  1 févr. 13:55  Bureau
	-rw-r--r--  1 test test     201 15 déc.  17:30  config.ini
	drwx------ 20 test test    4096  3 févr. 19:27  Documents
	drwx------  4 test test   20480  5 déc.  11:43  Images
	drwx------  2 test test    4096  1 mars   2014  Modèles
	drwx------  8 test test   20480 12 juil.  2019  Musique
	drwx------  2 test test    4096  1 mars   2014  Public
	drwx------  8 test test    4096  4 avril  2018  sketchbook
	drwx------ 10 test test   12288 24 févr. 16:28  Téléchargements
	-rw-r--r--  1 test students      72  1 déc.  12:20  test.py
	drwx------  4 test test    4096 12 mai    2019  Vidéos
 	test@DOC-SPC:~$
			

Ouh là, beaucoup d'informations !...On trouve pour chaque fichier ou répertoire, dans l'ordre :

Création et suppression de fichiers et répertoires

Pour créer un répertoire dans le répertoire courant :


	mkdir nom_du_nouveau_repertoire
			

Pour supprimer un fichier :


	rm nom_du_fichier_a_supprimer
			

Pour supprimer un répertoire et tout son contenu :


	rm -r nom_du_repertoire_a_supprimer
			

Exécution de programmes

Les commandes que vous venez d'utiliser ne sont ni plus ni moins que de petits programmes, qui sont accessibles à partir de n'importe quel point du système de fichiers ( même si leurs fichiers exécutables se situent ailleurs dans l’arborescence ). Ces programmes sont dits "system-wide", c'est à dire accessible depuis l'ensemble du système.

Pour lancer un programme plus conséquent installé sur la machine, il suffit également de taper son nom dans le terminal; vous pouvez essayer avec des logiciels "classiques" ( testez libreoffice, firefox, gimp,... )

Pour exécuter un programme qui n'est pas "system-wide", il faut se placer dans son répertoire et utiliser la commande : ./nom_du_programme

Pour visualiser le contenu d'un fichier ( texte par exemple ) : cat nom_du_fichier.txt

Pour créer un nouveau fichier vide, par exemple un fichier texte : touch nouveau_fichier.txt

Les commandes ci-dessus telles qu'elles sont présentées travaillent dans le répertoire courant, mais on peut bien entendu les utiliser pour un fichier ou un répertoire situé n'importe où dans l'arborescence, en indiquant son chemin d'accès relatif ou absolu.

Dernières petites astuces qui deviendront vite indispensables :

  • le terminal dispose de l'auto-complétion : en appuyant sur la touche TAB à l'invite de commande, le système vous suggère un nom de fichier ou de répertoire commençant par la ou les lettres que vous avez déjà entrées; très pratique pour éviter d'entrer "à la main" un long chemin absolu !
  • En appuyant sur la touche HAUT ( ↑ ) , on rappelle la dernière commande entrée; pratique pour éviter de devoir retaper une deuxième fois une longue ligne de commande !

Un petit "escape-game" pour prendre tout cela en main...

Vous allez appliquer l'utilisation de la ligne de commande Linux à la résolution d'un "escape-game" tournant autour de l'informatique; les réponses aux énigmes seront cachées dans une arborescence de fichiers que vous allez devoir parcourir et analyser.

Travail préliminaire

Avant de commencer, préparez le terrain de jeu :

  • replacez-vous dans votre répertoire personnel, ou assurez-vous de bien y être
  • créez un nouveau sous-répertoire du nom de NSI; visualiser le contenu de votre répertoire pour vérifier la création de ce nouveau répertoire
  • placez-vous dans ce sous-répertoire; grâce à la commande suivante, téléchargez l'archive contenant l'arborescence de notre escape-game :
    
    wget http://nsivaugelas.free.fr/premiere1/fichiers/racine.tar.gz
    					
    ( vous avez vu...pas besoin de navigateur web pour télécharger ! )
  • décompressez l'archive avec la commande suivante :
  • 
    tar -xzf racine.tar.gz
    					

Vous devez donc maintenant disposer d'une arborescence dont le chemin absolu est : /home/user/NSI/racine

Résolution de l'énigme

Suivez et complétez le document distribué pour résoudre cet escape-game...

Aucune connaissance n'est nécessaire : il suffit d'exécuter les bonnes commandes !

Lien vers la SOLUTION

Les droits ou permissions sous Linux

Les groupes

Groupes d'utilisateurs

Chaque fichier (et répertoire) est la propriété d’un utilisateur particulier. Par défaut, celui-ci appartient à l’utilisateur qui a créé le fichier.

Les utilisateurs sont réunis en groupes. Un utilisateur pouvant faire partie de plusieurs groupes, pour chaque fichier est spécifié le groupe propriétaire, c’est-à-dire en tant que membre de quel groupe le propriétaire détient le fichier.

On distingue alors trois catégories d’utilisateurs pour chaque fichier :

Droits sur les fichiers et les répertoires

Il y a trois types de droits sous Linux :

  1. Droit en lecture :
    • Identifié par la lettre r (read) et le chiffre 4.
    • Donne l’accès à la lecture d’un fichier.
    • Permet de lister le contenu d’un répertoire.
  2. Droit en écriture :
    • Identifié par la lettre w (write) et le chiffre 2.
    • Donne l’accès à l’écriture dans un fichier.
    • Permet d’ajouter ou de supprimer un élément d’un répertoire.
  3. Droit en exécution :
    • Identifié par la lettre x (execute) et le chiffre 1.
    • Donne l’accès à l’exécution d’un fichier.
    • Permet de passer à travers un répertoire.

Les droits sur chaque fichier et répertoire sont définis pour chacune des 3 catégories d'utilisateurs.

Voici un exemple à partir du listage du contenu d'un répertoire avec la commande ls -l :


	-rw-r--r--  1 test students      72  1 déc.  12:20  test.py
			

Lors de sa création, les droits par défaut pour un fichier sont :

  • droit en lecture et exécution pour tout le monde (propriétaire, groupe et autres utilisateurs)
  • droit en écriture pour le propriétaire seulement.

Modifier les permissions

La commande chmod permet d’accorder ou de retirer aux catégories d'utilisateurs les droits sur les fichiers et les répertoires.


	chmod droit fichier(s)
			

Le droit à donner ou retirer sur le (ou les) fichier(s) est indiqué par :

Exemples :

Groupes secondaires

Chaque utilisateur peut aussi appartenir à un ou plusieurs groupe(s) secondaire(s), qui lui autorise l'utilisation de certains matériels ou ressources de la machine.

Voila par exemple quelques groupes avec leur fonction :

Groupe Fonction
audio Accès au matériel son.
lp Accès à l'imprimante
optical Accès au lecteur optique (cd/dvd).
root Super-utilisateur: accès complet au système
scanner Accès au matériel scanner
storage Accès aux périphériques amovibles (ex: clé/disque usb)
video Accès aux périphériques de capture vidéo
.... ....

C'est le compte administrateur ( ou un utilisateur appartenant au groupe root ) qui peut créer les utilisateurs, les groupes, et ajouter un utilisateur dans tel ou tel groupe.

On empêche ainsi "n'importe qui de faire n'importe quoi"; la stabilité du système mais surtout la sécurité de la machine s'en trouvent ainsi beaucoup plus assurés.

Vos comptes sont tous des comptes utilisateur, qui appartiennent tous au groupe eleve, mais qui n'appartiennent pas au groupe root; vos droits sur les machines sont donc restreints, vous ne pourrez par exemple pas installer de nouveaux logiciels; mais vous avez un accès "normal" à la plupart du matériel.

Exercices autour des droits

Lire et écrire

  1. Créer dans votre zone personnelle un fichier nommé test.txt
  2. pour envoyer du contenu dans un fichier, on utilise la commande :
    
    	echo "blablabla" > fichier
    					
  3. Utilisez cette commande pour placer quelques mots dans le fichier test.txt
  4. à l'aide de la commande adéquate, afficher et noter les droits dont vous disposez sur le fichier test.txt
  5. entrez la commande qui permet de vous retirer les droits en lecture et en écriture sur le fichier test.txt
  6. essayez maintenant d'afficher le contenu du fichier test.txt; essayez également de modifier son contenu. Que constate-t-on ?
  7. Redonnez-vous les droits de lecture et d'écriture sur le fichier test.txt, et vérifiez le changement.
  8. supprimez enfin le fichier test.txt...

Exécuter

Il est possible d'exécuter tout type de fichier contenant du code, pour peu bien sûr que l'on ait le droit d'exécution sur ce fichier ! Nous allons essayer ceci avec un script Python.

  1. téléchargez dans votre zone personnelle le fichier exo2.py qui se trouve dans le répertoire /premiere1/fichiers/ du site nsivaugelas.
  2. essayez d'exécuter le fichier de la même manière que les programmes de l'escape-game; que constatez-vous ?
  3. Entrez la commande qui vous permet de vous donner le droit d'exécution sur le fichier exo2.py, et vérifiez le changement.

Vous pourriez être tenté peut-être d'exécuter ainsi un de vos scripts Python écrit lors d'une séance précédente, mais ça ne marchera pas...Il faut en effet indiquer au terminal avec quel programme il doit exécuter le code contenu dans le fichier, et pour cela, il faut rajouter la ligne de commentaire suivante au début du script :


	#!/usr/bin/env python3
				

Partager

Vous avez peut-être remarqué la présence d'un répertoire partage dans votre zone personnelle; il s'agit en réalité d'un répertoire distant qui est physiquement présent sur un serveur du lycée : dans votre zone personnelle, il ne s'agit donc que d'un lien vers ce répertoire distant.

Mais cela signifie aussi que toutes les machines de la salle ont accès à ce même répertoire : tout ce que vous y mettrez sera donc disponible pour l'ensemble du groupe ! Hmm....oui, à condition de lui en donner les droits !

  1. créez dans le répertoire ~/partage un fichier ayant votre nom
  2. ajoutez quelques lignes de votre choix dans ce fichier; pour ajouter du texte à la suite dans un fichier sans écraser son contenu précédent, utiliser la commande :
    
    	echo "blablabla" >> fichier
    					
  3. demandez à un de vos voisins de tenter de lire le contenu de votre fichier; est-ce possible ?
  4. demandez à un de vos voisins de tenter de modifier le contenu de votre fichier; si c'est impossible, entrez alors la commande qui permet à votre voisin de le faire.

Lien vers les REPONSES

QCM d'entraînement