Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
1. ARCHITECTURE
a) Principe de modularite
Comme tout logiciel d'une certaine taille, un système d'exploitation est d'une grande complexité. Tous
les systèmes d'exploitation récents sont en effets constitués d'un grand ensemble de composants qui
interagissent entre eux et qui doivent fonctionner de concert afin d'assurer la bonne marche du système et
répondre aux besoins de l'utilisateur.
Pour résoudre ce problème, il est courant de subdiviser les systèmes complexes en composants
indépendants, dont le mauvais fonctionnement potentiel ne peut perturber que partiellement les autres
parties du système. Par ailleurs, ces composants sont regroupés en couches logicielles successives, les
couches supérieures s'appuyant sur les services des couches inférieures. Ainsi, des points de
synchronisation à partir desquels le système peut reprendre un fonctionnement normal après une défaillance
peuvent être définis. Ces points de synchronisation permettent donc d'assurer la viabilité du système, ou du
moins des couches inférieures, même en cas d'erreur inopinée d'un composant dans une couche de plus haut
niveau.
Il va de soi que, lorsqu'un composant se plante, ceux qui l'utilisent risquent de se retrouver dans un état
d'erreur assez difficile à gérer. Cela peut souvent provoquer leur propre perte. Par conséquent, plus un
composant est utilisé, plus il doit être fiable. Autrement dit, les composants des couches inférieures doivent
nécessairement être beaucoup plus fiables que ceux des couches de plus haut niveau, car ils sont utilisés par
tout le reste du système.
Pour quelques systèmes, le découpage fonctionnel est trop grossier, voire inexistant. Il arrive également que
les interactions entre les composants soient trop importantes et impliquent une dépendance entre eux qui
annihile le bénéfice de leur isolation. Dans ces systèmes, une défaillance d'un composant peut donc
entraîner un dysfonctionnement global sévère, et en pratique peut nécessiter jusqu'à un redémarrage de
l'ordinateur. Les systèmes monolithiques et les systèmes dont les composants sont trop interdépendants sont
donc sujets à de nombreux redémarrage, parfois même pour des raisons mineures (modification de la
configuration du système, ajout d'un logiciel, ou même simple erreur d'un logiciel).
Il est d'usage de considérer que Linux est un système monolithique. En effet, toute la gestion du matériel,
ainsi que la gestion de certaines fonctionnalités de haut niveau, est prise en charge au niveau du noyau («
kernel » en anglais). On pourrait donc craindre une faible fiabilité de ce système d'exploitation. Toutefois,
cette vision des choses n'est pas tout à fait juste car, comme on l'a déjà dit, le noyau n'est qu'une partie du
système d'exploitation, et en réalité un système Linux est effectivement constitué de différentes couches
fonctionnelles. De plus, le noyau reste d'une taille raisonable. Pour l'essentiel, il est constitué que d'une base
relativement petite et très bien testée, à laquelle beaucoup de pilotes de périphériques ont été ajoutés. La
complexité du noyau reste donc limitée, car les pilotes de périphériques ne sont bien entendus pas tous
utilisés en même temps sur une même machine.
Par ailleurs, le noyau Linux est d'une très, très grande fiabilité, et il n'est pas rare de voir un système Linux
fonctionner plusieurs mois ou années sur des serveurs. Cette grande fiabilité provient du modèle de
développement de Linux, qui est ouvert à tout le monde (chacun peut récupérer, lire, modifier, et compléter
ou corriger le noyau à condition de savoir bien programmer). Ainsi, à partir d'une taille critique en terme de
nombre d'utilisateurs, taille que Linux a atteinte, il existe suffisamment de développeurs pour détecter et
corriger les erreurs. En pratique, dès qu'une erreur est détectée, elle est souvent corrigée dans les jours qui
suivent si la fonctionnalité concernée est effectivement utilisée, ce qui assure au final une très grande
qualité.
Ainsi, un système Linux est constitué, outre du noyau, d'un certain nombre d'autres couches logicielles, qui
s'appuient les unes sur les autres. Nous allons donc présenter brièvement ces couches ici.
Le noyau se trouve bien évidemment à la base de toutes les autres couches, puisqu'il gère quasiment tout le
matériel (mémoire, disques, systèmes de fichiers, réseau, clavier, etc.). Mais comme il n'est pas exploitable
tel quel (par exemple, il n'est pas capable d'offrir une interface utilisateur permettant de lui donner les
commandes que l'ordinateur doit exécuter) il faut au moins une interface utilisateur.
Cette interface utilisateur, c'est ce qu'on appelle le « shell » (ce qui signifie grosso modo « environnement
utilisateur »). Le shell est capable de lire des commandes saisies au clavier, de les exécuter et d'afficher
leurs résultats à l'écran. En général, les programmes capables de réaliser ces opérations sont appelés des
interpréteurs de commandes. Mais le shell est bien plus que cela, car il peut être programmé, et il peut gérer
les processus (en arrêter un, en lancer un autre, etc.). Bien entendu, il existe plusieurs shells, mais le plus
utilisé sous Linux est le shell bash, qui est développé par la Free Software Foundation et distribué sous
licence GPL.
En fait, les commandes que le shell peut exécuter sont en nombre très réduit. La plupart des commandes
sont donc tout simplement prises en charge par d'autres programmes. Ces programmes, que l'on peut utiliser
directement dans le shell, sont ce que l'on appelle des programmes « en ligne de commande », parce qu'ils
sont propres à être utilisés dans les lignes de commandes que l'on saisit au clavier dans le shell. Ces
programmes sont, encore une fois, développés soit par la Free Software Foundation, soit par des bénévoles,
toujours sous la licence GPL. Toutes ces commandes sont des commandes compatibles Unix, et nous
apprendrons à nous en servir dans le Chapitre 5.
Bien entendu, ces commandes sont absolument essentielles pour pouvoir utiliser le système, mais elles sont
assez rébarbatives et peu d'utilisateurs acceptent de s'en contenter. C'est pour cela qu'une couche graphique
a été développée, pour introduire une interface graphique plus conviviale : XWindow. Encore une fois, cette
couche logicielle est constituée de plusieurs composants, dont la base est le serveur X. Le serveur X est un
programme capable de fournir les services graphiques (d'où le nom de serveur) aux autres applications.
Plusieurs implémentations concurrentes existent. L'une d'elles est particulièrement utilisée sous Linux,
puisqu'elle est libre : X.org. À vrai dire, un serveur X ne fait pas grand chose d'autre que de réaliser des
affichages sous les ordres d'autres programmes. D'autres composants permettent donc d'obtenir des
fonctionnalités de plus haut niveau.
Le gestionnaire de fenêtres (« Window Manager » en anglais) est un de ces composants. Il se place juste
au-dessus du serveur X et prend en charge, comme son nom l'indique, la gestion des fenêtres des
applications graphiques sous X. C'est le gestionnaire de fenêtres qui prend en charge la gestion des
décorations des fenêtres de premier niveau (c'est-à-dire des fenêtres principales des programmes). Par
exemple, il s'occupe d'afficher les bords, la barre de titre, les boutons de réduction et de restauration, etc.
des fenêtres. C'est également lui qui s'occupe du positionnement des fenêtres, et qui donc permet à
l'utilisateur de déplacer et de réduire les fenêtres des applications graphiques. L'utilisateur est libre d'utiliser
le gestionnaire de fenêtres qu'il désire, selon ses propres goûts et ses désirs, la différence est souvent une
pure question de style.
Il existe également des environnements graphiques complets qui, en plus de fournir un gestionnaire de
fenêtres, fournissent la plupart des outils classiques que l'on est en droit d'attendre d'un système graphique
moderne. Ainsi, ces environnements comprennent des éditeurs, des outils de configuration, des navigateurs
Internet, des logiciels multimédia... En plus de ces applications, ils fournissent un cadre standard pour les
applications graphiques qui savent communiquer avec eux. Ce cadre permet d'améliorer l'intégration des
diverses applications entre elles, et c'est la raison pour laquelle on appelle souvent ces environnements des
gestionnaires de bureau. KDE et Gnome sont des exemples de tels environnements de travail.
Enfin, au-dessus de toutes ces couches logicielles, on trouve les applications X, qui sont aussi diverses que
variées (traitement de texte, tableurs, logiciels de dessin...). Quelques-unes de ces applications sont
simplement des « front-end » d'applications en ligne de commande, c'est-à-dire des interfaces graphiques
pour des programmes non graphiques. Ce concept permet d'avoir un composant unique réalisant une action,
utilisable en ligne de commande et donc scriptable, et une ou plusieurs interfaces graphiques pour ce
composant. De plus, ce modèle permet de séparer clairement l'interface graphique du traitement qu'elle
permet de réaliser. La stabilité en est d'autant plus accrue.
➢ les systèmes Unix, donc Linux, sont très structurés, donc plus simples à utiliser, à configurer, à
maintenir et à développer ;
➢ ils sont très stables, car les composants de haut niveau n'interfèrent pas sur les composants de bas
niveau ;
➢ ils sont faciles à personnaliser, puisque l'utilisateur a le choix des outils à chaque niveau ;
➢ Linux a de plus la particularité d'être parfaitement modifiable, puisque si l'on sait programmer, on peut
personnaliser les composants du système ou en rajouter à tous les niveaux ;
➢ et il n'est pas propriétaire, c'est-à-dire que l'on n'est pas dépendant d'un éditeur de logiciel pour résoudre
un problème donné.
En bref, c'est la voie de la vérité.
2. ARBORESCENCE
Comme tout système, Linux possède son « architecture » propre, son arborescence de dossiers. Pour
assurer la compatibilité et la portabilité, les systèmes Linux respectent l'unique norme FHS (File Hierarchy
Standard).
Quasiment tous les fichiers de configuration du système sont éditables avec un éditeur de texte (Gedit
sur Gnome, Pluma sur Mate, Mousepad sur Xfce...). Signalons quelques dossiers :
Ceci est peut etre une repetition mais, Parmi ces répertoires, plusieurs sont importants, on peut en citer :
/bin/ : Contient toutes les commandes de base nécessaires au démarrage et à l’utilisation d’un système
minimaliste (par exemple : cat, ls, cp, sh).
/sbin : Contient les commandes systèmes réservées aux administrateurs.
/boot : Contient les fichiers nécessaires au démarrage du système d’exploitation.
/dev : Contient des fichiers correspondants à un périphériques (disques , disquettes …).
/etc : Contient la plupart des fichiers de configuration du système.
/home/ : Utilisé pour stocker les répertoires utilisateurs (exemple : /home/user1).
/opt : Utilisé comme emplacement d’installation d’un logiciel utilisé.
/tmp/ : Utilisé pour stocker les fichiers temporaires tout comme /var/tmp et /run/tmp et généralement vidé à
chaque démarrage.
Le système, dès son installation, avant même la première connexion au système a créé des users
système.
Un utilisateur n'est donc pas uniquement une personne physique, le système a besoin d'utilisateurs pour sa
gestion interne, notamment comme propriétaire des divers processus.
La commande ps aux | less montre qu'avant toute connexion d'utilisateur humain (repérée par les
lignes login --user), root a lancé init, et la plupart des services, crond, inetd, lpd, smbd, ... , avant de lancer
les connexions utilisateurs dans les consoles, y compris éventuellement la sienne !
Créer un compte pour un nouvel utilisateur : Cela signifie lui permettre d'être connu du poste local,
s'y loguer, avoir un accès complet sur son rép. personnel.
Mais aussi dans une configuration réseau, de pouvoir se connecter à son compte par telnet et ftp, et de
pouvoir bénéficier de services réseau de partage distant (sous Linux par NFS et sous Windows 9x par
SMB).
❖ Pour créer l'utilisateur stagex, root passe la commande : sudo useradd stagex Ceci crée :
❖ Pour lui attribuer un mot de passe a l’utilisateur stagex: passwd stagex puis saisir 2 fois le mot de
passe desire
❖ Supprimer le compte d'un utilisateur (non connecté), (suppons que nous effacons le compte totox):
userdel [-r] totox ou sudo deluser nom_utilisateur. L'option -r supprime aussi le rép. personnel et les
Remarques
➢ Attention : si root passe la commande passwd il s'apprête à redéfinir son propre mot de passe !
➢ Un utilisateur quelconque ne peut pas créer de compte, même s'il a le privilège de faire partie du
groupe root. A tester !
➢ Par contre, il peut modifier lui-même son mot de passe.
➢ Voir les diverses options avec useradd -h
➢ Pour une gestion sous interface graphique, cherchez des outils tels que linuxconf
2) Les groupes
Un groupe est, aussi pour Linux, un ensemble d'utilisateurs qui partagent les mêmes fichers et
répertoires. Nous verrons que les fichiers accordent des droits d'accès réglables à ces groupes.
Chaque utilisateur doit faire partie au moins d'un groupe, son groupe primaire. Celui-ci est défini au
moment de la création du compte, et par défaut, l'utilisateur appartient à un nouveau groupe créé, portant
son nom. Ainsi, dans /etc/passwd chaque utilisateur possède un groupe par défaut, précisé par son
identifiant gid dans ce fichier.
L'appartenance au groupe primaire n'étant pas exclusive, tout utilisateur peut faire partie de
plusieurs autres groupes, appelés ses groupes secondaires.
Mais le rôle joué par le groupe primaire demeure prépondérant, comme nous le verrons dans le système des
permissions des fichiers.
➢ Pour lister tous les groupes (primaire et secondaires) d'un utilisateur : groups stagex
➢ Pour créer un nouveau groupe: groupadd stagiaire
➢ Supprimer un groupe, au hasard .. encore totox. groupdel totox (Le groupe est supprimé du
fichier /etc/group.)
➢ Pour ajouter un utilisateur à un groupe Le plus simple est d'éditer le fichier /etc/group et d'ajouter une
liste d'utilisateurs (séparés par des virgules) sur la ligne du groupe (ou utiliser Linuxconf).
Manipulations
Il s'agit de créer un groupe nommé stagiaire dont les membres sont les comptes stagex. On donnera ensuite
à ce groupe des droits complets sur un répertoire partagé. Comme root :
Tout ce qui concerne la gestion et l'authentification des utilisateurs est inscrit dans un seul
fichier /etc/passwd
La gestion des groupes est assurée par /etc/group
Les mots de passe cryptés sont maintenant placés dans /etc/shadow, par sécurité lisible seulement
par root.
❖ Structure de /etc/passwd
1. nom de connexion
2. ancienne place du mot de passe crypté
3. numéro d'utilisateur uid, sa valeur est le véritable identifiant pour le système Linux; l'uid de root est
0, le système attribut conventionnellement un uid à partir de 500 aux comptes créés.
4. numéro de groupe gid, dans lequel se touve l'utilisateur par défaut; le gid de root est 0, des groupes
d'utilisateurs au delà de 500
5. nom complet, il peut être suivi d'une liste de renseignements personnels (cf chfn)
6. rép. personnel (c'est également le rép. de connexion)
7. shell, interprétateur de commandes (par défaut /bin/bash)
❖ Structure de /etc/group
1. nom du groupe
2. x pour remplacer un mot de passe non attribué maintenant
3. numéro de groupe, c-à-d l'identifiant gid
4. la liste des membres du groupe
Tout fichier du système appartient à la fois à un utilisateur (son "propriétaire") et à un groupe. Ainsi, pour
chaque fichier le monde de ses utilisateurs potentiels est scindé en 3 catégories, nommées :
1. u, l'utilisateur normal, son propriétaire, bien souvent son créateur, qui n'a pas pour autant tous les
droits sur lui !
2. g, son groupe, ensemble d'utilisateurs ayant parfois des "permissions" particulières.
3. o, tous les (others) autres.
le groupe propriétaire n'est pas forcément le groupe primaire de l'utilisateur propriétaire, et même,
le propriétaire n'est pas forcément membre du groupe ! Mais (heureusement) une règle générale simple
s'applique à la création de tout nouveau fichier (ou rép):
1. r, lecture
2. w, écriture
3. x, exécution
De façon générale, ces permissions sont consultables complètement par la commande : ls -l. Rappel : ll est
un alias plus court, pour la commande ls -l. Par exemple: ls -l Documents/Doc.docx
Description globale
On trouve de gauche à droite
le système de droits est spécifié symboliquement par les 9 attributs suivants, correspondants aux 3
catégories d'utilisateurs du fichier.
...|...|...
u g o
La section u fixe les droits accordés au propriétaire du fichier., La section g fixe les droits accordés
aux utilisateurs faisant partie du groupe auquel appartient le fichier. La section o fixe les droits des
autres utilisateurs.
le droit de lecture , afficher son contenu --> "r" si permis , "-" si refusé
le droit d'écriture , modifier son contenu --> "w" si permis , "-" si refusé
le droit d'exécution , pour un fichier script ou binaire --> "x" si permis , "-" si refusé
Exemples :
Afficher toutes les infos sur un fichier: La commande stat permet d'obtenir une information plus poussée
sur un fichier. Exemple : stat /etc/passwd
Exemples :
Passer les commandes cd / puis ls -l, pour lister les répertoires situés à la racine.
Attention ! on voit que le droit w est très étendu, et même dangereux quand il est accordé à un groupe, car
un membre du groupe peut supprimer des fichiers dont il n'est pas propriétaire et sur lesquels il n'a même
pas de droit d'écriture !
Remarque: Le droit x sur un répertoire est un préalable indispensable pour qu'un utilisateur (de la catégorie
correspondante au positionnement du x), puisse exercer d'éventuels droits sur les fichiers contenus dans le
répertoire.
Exercice 1
1. Quels sont les droits sur les répertoires personnels (par exemple stagex) ?
2. Un utilisateur différent stagey peut-il y pénétrer ou seulement lister ses fichiers ? et totox, le
pourrait-il s'il faisait partie du groupe de stagex ?
3. Quelles commandes devrait écrire stagex pour accorder le droit de visite de son rép. perso seulement
à totox ?
Remarques préalables
√ Mais les droits accordés au propriétaire, au groupe et aux autres dépendent du processus qui a créé
le fichier et du masque des droits.
√ D'autre part l'administrateur peut être amené à effectuer des changement de propriété (par exemple
pour permettre un travail en groupe) et des changements de droits sur des ensembles de fichiers et
de répertoires , les étendre ou les restreindre.
√ Et root n'est pas soumis à ces restrictions, il a le pouvoir absolu sur ... le système de fichiers. En
contre-partie il peut être considéré comme responsable de tout dysfonctionnement !
Les droits d'accès peuvent être modifiés par le propriétaire des fichiers ou par root (ou équivalent,
d'uid 0).
La commande chmod (change mode, change le "mode" des fichiers) peut s'écrire de plusieurs
façons équivalentes, sur le modèle : chmod droits fichiers
Le paramètre droits permet de calculer les nouveaux droits d'accès.
Ceux-ci peuvent s'obtenir de façon relative, par ajout (symbole +) ou retrait (-) par rapport aux
droits existants, ou bien de façon absolue, en fixant les nouveaux droits qui remplacent les anciens
(symbole =).
u, g et o les 3 catégories d'utilisateurs (user, group, other) et de plus par a (=all) tous les utilisateurs.
r,w,x les 3 attributs de chaque fichier, pour chaque catégorie d'utilisateur.
+ - = l'action d'ajouter, de retirer ou de fixer un droit, qui s'applique à chaque catégorie séparément.
les changements, sur le modèle "à quelle(s) catégorie(s), quelle action, quel(s) droit(s)" sont alors
notés symboliquement :
[u g o a] [+ - =] [r w x]
par exemple chmod u+x fichier signifie "ajouter le droit d'exécution au propriétaire du fichier"
on peut regrouper les catégories si on veut exercer la même action :
chmod ug+w fichier "ajouter le droit d'exécution au propriétaire et au groupe"
chmod go-rwx fichier "enlever tous droits d'accès à tous les utilisateurs, sauf au propriétaire"
Notation absolue
Pour chaque groupe, elle permet de fixer les nouveaux droits qui remplacent les anciens. Si une
catégorie n'est pas présente, ses anciens droits s'appliquent.
chmod u=rwx,g=rw,o=r fichiers remplace les permissions précédentes des fichiers, en les fixant
à -rwxrw-r--
Attention : aucun espace dans la liste des droits, pas même autour des éventuelles virgules
chmod u=rwx,g=r fichiers fixe les permissions à -rwxr--??? en ne changeant pas les permissions
précédentes du groupe other
chmod u=rwx,g=r,o= fichiers fixe les permissions à -rwxr-----
iv. Exercices
Exercice 2
Exercice 3
1. En tant que stagex, pouvez vous créer le rép. temporaire /home/temp ? essayez ! pourquoi ?
2. Effectuez cette création comme root (pensez à la commande su ).
3. Accorder les permissions maximales sur /home/temp; vérifiez.
4. totox, toujours lui, tout content d'avoir enfin un droit d'écriture, dans /home/temp essaie de copier
les 2 fichiers système /etc/hosts et /etc/passwd dans /home/temp ? y parviendra t-il ? pourquoi ? que
donne [totox@p0x ] ll /home/temp ?
5. totox, essaie maintenant de supprimer ces 2 fichiers de /etc. Réussit-il ?
6. Effrayé à l'idée de se faire pincer par le (ou la) redoutable root, totox veut masquer sa faute tout en
faisant punir stagex à sa place ! Pour cela, il veut que stagex devienne propriétaire du fichier
copié passwd. Comment s'y prend t-il ? Réussit-il ? Et vous comment auriez vous fait ?
Il existe une autre facon d'indiquer les permissions de chaque catégorie, plus simple en utilisant la
numération octale
Voici la table de correspondance entre les 8 chiffres en numérotation octale (base 8) et les 8 valeurs de
droits fichiers.
Par convention la présence d'un droit est noté 1, l'absence 0.
Pour obtenir les permissions exprimées en octal, il suffit d'ajouter en octal les nombres de la table de
correspondance ci-dessus, pour lesquels les droits sont positionnés.
Exemples
Dans les systèmes Linux, tout est fichier, donc, contrairement aux systèmes Windows un fichier Linux
peut être : Un fichier, un périphérique, une partition, un programme en cours d’exécution, un répertoire …
Pour structurer ces fichier, Linux ne dispose pas d’unités C: , D: , E: Linux utilise le standard FHS pour
définir son arborescence. Ce standard propose une structure de répertoires dont chacun possède un rôle
spécifique définit dans FHS (Filesystem Hierarchy Standard)
Chaque utilisateur connecté au système d’exploitation est capable de diriger la machine en exécutant une
commande dans un terminal : la syntaxe d’une commande est de la forme suivante : COMMANDE
OPTIONS ARGUMENTS
La commande étant la commande elle-même, suivie d’une ou plusieurs options facultatives qui servent à
modifier le comportement de la commande tandis que les arguments ,facultatifs aussi, représentent les
objets sur lesquels la commande agit. Un exemple concret peut être : ls -a /home ou ls est la commande qui
permet de lister l’ensemble des fichiers d’un répertoire, en l’occurrence, le répertoire /home et l’option -a
permet d’inclure les fichiers cachés dans le résultat. Voici une liste des commandes les plus populaires et
que vous devriez connaitre lors de la manipulation d’un système Linux :
Synthese
cat f Affiche le contenu d’un fichier
cat f1 f2 >f3 opère une concaténation entre f1(fichier 1) & f2(fichier 2) dans f3(fichier 3)
cd Retour vers le dossier principal
cd / Ramène à la racine, aussi haut que possible
cd + /filename aller vers un dossier
clear permet de nettoyer l’écran (utile quand votre putty est rempli de lignes de code!)
compress Compresse un fichier
cp f1 f2 Copie le fichier f1 dans le fichier f2
cp -r D1D2 Copie le dossier D1 et le renomme en D2
ctrl-c Permet de tuer un process
ctrl-d Permet de fermer une fenêtre ouverte
df donne l’utilisation du disque
diff f1 f2 liste les différences entre les fichiers f1 et f2
dig host nom de domaine, IP addresse et alias pour le domaine déterminé.
du montre tous les sous dossiers et leur taille
du -a lists all files and their sizes (in blocks?) in present directory and total directory size (in blocks?)
(takes a long time)
du -s lists overall directory size (in blocks?) (long but clean)
env Montre le réglage de l’environnement courant
find permet de trouver un document dans l’arborescence
ftp pour établir une connexion avec le protocole ftp entre deux machines
gzip permet de zipper un fichier/dossier
gunzip decompress files created by gzip, compress or pack.
ispell f permet de vérifier l’orthographe dans un fichier