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.
Compléter la frise chronologique en y plaçant les dates d'apparition de quelques systèmes d'exploitation et de langages de programmation.
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 :
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.
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.
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 : vos fichiers personnels sont donc accessibles depuis n'importe quel poste.
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".
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.
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++ ).
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 :
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 :
Par exemple, dans l'arborescence ci-contre, si le répertoire courant est : /home/bob
rock
est : /home/bob/music/rock
/music/rock
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...
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.
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" ).
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 :
test
DOC-SPC
( pour vous ce doit être quelque chose comme H213-PXX
)~
, qui est l'équivalent du répertoire personnel, donc ici /home/test
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.
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.
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
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 :
-
) ou d'un répertoire ( d
= directory )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
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 :
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.
Avant de commencer, préparez le terrain de jeu :
NSI
; visualiser le contenu de votre répertoire pour vérifier la création de ce nouveau répertoire
wget http://nsivaugelas.free.fr/premiere2/fichiers/racine.tar.gz
( vous avez vu...pas besoin de navigateur web pour télécharger ! )
tar -xzf racine.tar.gz
Vous devez donc maintenant disposer d'une arborescence dont le chemin absolu est : /home/user/NSI/racine
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 !
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 :
Il y a trois types de droits sous Linux :
r
(read) et le chiffre 4.w
(write) et le chiffre 2.x
(execute) et le chiffre 1.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
test
, et le groupe dont il fait partie en tant que propriétaire du fichier ( = groupe propriétaire ) est students
-
) indique qu'il s'agit d'un fichierrw-r--r--
) indiquent les droits en lecture, écriture et exécution, respectivement, du propriétaire, des membres du groupe propriétaire et des autres utilisateurs :
rw-
: le propriétaire a le droit de lecture, d'écriture mais pas le droit d'exécutionr--
: les membres du groupe propriétaire ont uniquement le droit de lecturer--
: idem pour les autres utilisateursLors de sa création, les droits par défaut pour un fichier sont :
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 :
u
= user = propriétaire, g
= group = membres du groupe, o
= other = autres utilisateurs, a
= all = tous les utilisateurs )
r
, w
ou x
indiquant la nature du droit.Exemples :
u+r
pour rajouter au propriétaire le droit en lectureg-w
pour retirer aux membres du groupe le droit en écriturea+x
pour donner à tous les utilisateurs le droit en exécutionChaque 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.
test.txt
echo "blablabla" > fichier
test.txt
test.txt
test.txt
test.txt
; essayez également de modifier son contenu. Que constate-t-on ?test.txt
, et vérifiez le changement.test.txt
...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.
exo2.py
qui se trouve dans le répertoire /premiere2/fichiers/
du site nsivaugelas.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
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 !
~/partage
un fichier ayant votre nom
echo "blablabla" >> fichier