1 Cours Système
1 Cours Système
PLAN DU COURS
2.1 Installation de GNU/linux
2.2 Les mécanismes de résolution des problèmes
2.3 Le Shell BASH
2.4 Les commandes de base
2.5 Les éditeurs de textes
2.6 Les redirections
2.7 Les filtres et utilitaires
2.8 La gestion des processus
2.9 Travaux Pratiques
2.10 Travaux Dirigés
2.1 Installation de GNU/linux
Commande --help
Figure : résultat de la commande date –help
Le Shell dispose de commandes et des programmes internes pour obtenir la liste de ces commandes on
renseigne sur le Shell la commande help
Figure : résultat de la commande help
Pour obtenir l’aide d’une commande interne au Shell on tape la commande suivante :
$ help commande
Le manuel est commun à tous les systèmes UNIX, c’est un standard POSIX (Portable
Operating System Interface) il est accessible par la commande man
La capture précédente nous présente le résultat de la commande man date pour le quitter on
tape le lettre q. Le manuelle possède neuf (9) sections, la commande man man permet de
connaitre les différentes sections du manuel
Figure : les différentes sections du manuel GNU/Linux.
Par défaut le manuel recherche les pages correspondantes à une commande à la première section
de celui-ci.
Figure : passwd(1)
Figure : ifconfig(8)
Pour obtenir le manuel de ifconfig il faut appeler la huitième section du manuel man 8 ifconfig
On quitte le manuel d’une commande avec la touche q, on y recherche des mots clés avec la touche
slash (/) et n recherche l’occurrence suivante du mot tandis que Shift n recherche l’occurrence
précédente.
$ man –k commande
E- La commande info
Permet de lire les pages de manuel au format info, le manuel info est similaire au manuel
mais les pages sont structurés, organisés et hiérarchisés avec des index.
Un système d’exploitation permet d’offrir aux utilisateurs une abstraction leurs permettant
d’utiliser les ressources matérielles de l’ordinateur et d’exécuter des tâches.
Pour pouvoir travailler un utilisateur possède une interface utilisateur qui peut être une interface
en ligne de commande où une interface graphique. La théorie des interfaces graphiques n’est
pas traitée dans les livres des systèmes d’exploitation, elle n’en fait pas partie.
Unix est un système d’exploitation en ligne de commande possédant un terminal qui reçoit des
commandes saisies au clavier et renvoie les résultats à l’écran.
Il existe plusieurs Shells chacun disposants des spécificités qui lui sont propres.
Sh : Thompson SHell ;
Sh : Bourne SHell ;
Csh : C SHell ;
Le Shell par défaut des distribution GNU/Linux est le Shell BASH ( Bourne Again SHell) de
son créateur Bourne il est une amélioration du Bourne Shell de Ken Thompson, il est un
mélange du C Shell et du Korn Shell, c’est le Shell du projet GNU, il a été créé le 08 juin 1989,
c’est aussi le Shell par défaut des MAC OS X, il existe aussi une version pour le système
d’exploitation Windows.
Le Shell fonctionne au sein d’un terminal, il attend des commandes saisit au clavier. Il existe deux
types de terminaux dans le monde de GNU/Linux :
Les terminaux graphiques, comme xterm, eterm, konsole, gnome-terminal ;
Les consoles virtuelles textes, qui est le mode par défaut des distributions Gnu/Linux.
Le Shell attend des commandes sur une ligne appelé invite de commande ou prompt.
Cette ligne a pour signification ceci, l’utilisateur abanda sur la machine ubuntu-server sans privilège
particulier se trouve dans le répertoire tilde (/home/abanda/)
Il existe deux types de privilège : le mode super utilisateur (#), et le mode utilisateur simple marqué
par le symbole ($).
A- La programmation Shell
Le hell est aussi un langage de programmation permettant d’écrire des scripts et de les faire
interpréter par le système. Un script est un ensemble de commande regroupées dans un fichier
pour être exécuter simultanément.
Par convention un script se termine avec l’extension du shell qui va exécuter le script :
Pour qu’un script s’exécute, il doit avoir le droit d’exécution. Pour l’attribuer à un fichier on exécute
la commande suivante :
# ./[Link]
Elaboration du script
Pour élaborer un script la première ligne renseignée doit être la ligne shabang, elle permet de
renseigner le Shell sur lequel va s’exécuter le script.
# ! /bin/bash
# ! /bin/dash
On peut commenter un script pour une meilleur édification lors de la lecture de celui-ci, on fait cela
avec un (#) devant le texte.
Un chemin est la liste des répertoires et sous répertoires empruntés pour atteindre un fichier ou
un endroit dans le système de fichier.
Point clé
Un chemin absolu est celui commençant par la racine du système de fichier jusqu’à la destination il
commence par un / (/home/abanda/desktop).
Un chemin relatif décrit une position relative à la position courante de l’utilisateur ; la notion de
chemin relatif implique deux notions :
Les opérations suivantes sont faites sur un répertoire : création, suppression, navigation, modification.
Les crochets veulent dire ici que les paramètres et les arguments ne sont pas obligatoires,
une commande peut avoir ni paramètres ni arguments.
Un paramètre est une option de la commande les deux mots sont synonymes, c’est
souvent une simple lettre précédée d’un tiret ( -l , -p , -s ,-i, -h), une commande peut accepter
plusieurs paramètres les un à la suite des autres (-l –p –h) ou en écrivant avec un seul tiret et en
mettant tous les paramètres à la suite de ce tiret (-lph), les deux syntaxes sont équivalentes.
Il est possible dans GNU/Linux de chainer les commandes les unes à la suite des autres en utilisant le
séparateur (;) :
Point cl é
Il existe deux types de commandes les commandes externes et les commandes internes :
Les commandes externes : ce sont des fichiers binaires présent en tant que programme
dans votre disque dur ;
Les commandes internes : ce sont des programmes internes au Shell exécutés au sein de
celui-ci, on obtient la liste de ces commandes en exécutant la commande help.
Ici on exécute la commande type avec pour paramètre date programme qui affiche la date et pwd
programme qui affiche le répertoire de travail, nous voyons les résultats.
C- Sensibilité à la casse
Point cl é
Linux est un système d’exploitation sensible à la casse, cela veut dire qu’il existe une différence entre
les minuscules et les majuscules ; fichier est différent de Fichier.
Dans les GNU/Linux tout ou presque est fichier ; il existe trois types de fichiers GNU/Linux :
Les fichiers spéciaux : il s’agit ici des périphériques, Ram, disque dur, Bus, souris,
clavier…
Les fichiers simples : il s’agit des fichiers ASCII, musique, vidéo, logiciel… Les fichiers
1- file
Cette commande permet de déterminer le type d’un fichier ; les fichiers GNU/Linux ne possède
pas d’extension il n’existe pas de .mp3, .mp4. Pour connaître le type d’un fichier, on utilise un
modèle possédant les types de fichiers se trouvant dans le fichier /usr/share/file/magic.
La commande man 5 magic permet de consulter ces différents types d’extensions de fichier.
2- touch
Permet de créer un fichier vide et de changer la date de dernière modification d’un fichier.
3- rm
4- cp
-i : demande de confirmation.
-r : copie un répertoire.
-f : force la copie.
5- mv
Permet de déplacer un ou plusieurs fichiers d’une source vers une destination, permet aussi de
renommer un fichier.
-f : force la copie.
Le système de fichier GNU/Linux se présente sous forme d’arbre avec pour début le répertoire racine
ou root directory (/). L’architecture du système de fichier Unix est présenté comme suit :
1- pwd
Print Working Directory est une commande GNU/Linux interne au Shell qui permet de connaitre
la position de l’utilisateur dans l’arborescence du système de fichier.
2- mkdir
Le paramètre -p permet de créer des répertoires imbriqués les un à la suite des autres..
3- rmdir
On peut supprimer également des répertoires imbriqués vides avec le paramètre -p.
4- ls
5- cd
a- cd ou cd
b- cd ..
a. -name
Permet une sélection par nom, il est possible d’utiliser les wildcards le nom ici est entre guillemet.
Ici on recherche tous les fichiers qui ont pour extension .h à partir de la racine du système de fichier.
b. -type
Permet une sélection par type de fichier les types de fichier sont listés dans le tableau suivant. Point
cl é
-mtime : recherche sur la date de dernière modification du fichier (modification time), il s’agit du
changement effectué dans un fichier.
-ctime : recherche sur la date de dernier changement (change time, il s’agit de la date de dernière
modification du numéro d’inode).
Les jours sont utilisés comme paramètres, 0 représente le jour même, 1 représente hier, 2 avanthier
ainsi de suite.
d. -size
Permet de rechercher les fichiers par leur taille. Les valeurs situées après le critère sont les suivantes.
Point cl é
Caractère Signification
b Par défaut si non précisé, il s’agit d’un bloc de 512 octets.
c C’est un caractère, au sens ASCII, donc 1octet.
w C’est un mot de 2 octets.
k 1 ko
Tableau : différentes valeurs de recherche.
Permettent de rechercher sur le propriétaire et le groupe d’appartenance des fichiers. On peut préciser
le nom ou l’uid et/ou gid.
On recherche tous les fichiers appartenant à root qui sont des fichiers ordinaires.
1- Rechercher tous les fichiers qui sont des fichier socket et afficher les détails ?
2- Recherchez tous les fichiers qui sont des fichier mp3 puis supprimez-les ?
3- Recherchez tous les fichiers qui sont des fichier mp3 puis supprimez-les en demandant
confirmation pour chacun d’eux ?
2- whereis
Cette commande permet d’effectuer des recherches dans les chemins des binaires, du manuel et
des sources.
DEVOIR : à l’aide du manuel de whereis trouver les entrées de la commande date pour : a.
b. Le chemin du manuel ?
3- which
Permet de rechercher les fichiers dans le chemin des exécutables. Cette commande n’affiche que la
première occurrence trouvée, pour continuer la recherche, il faut ajouter (-a).
L’utilisation de vi nécessite de la part de l’administrateur une certaine maîtrise des raccourcis clavier.
1- Fonctionnement
Le mode commande : les saisies ici représente des commandes. On y accède en appuyant sur
[Echap] ;
Le mode ligne de commande : une ligne en bas de l’écran permet la saisie des commandes
spéciale, validée par la touche [Entrée] on y accède en appuyant en mode commande sur la
touche « : »
Vim par défaut est en mode commande pour saisir du texte il faut appuyer sur la touche :a ou i
Les actions suivantes sont à effectuer en mode commande. Elles doivent être précédées d’un appui
d’un [Echap] : [Echap] a, [Echap] i, etc.
Commande Action
a Ajout après le caractère actuel.
A Ajout de texte en fin de ligne.
i Insertion devant le caractère actuel, comme dans un traitement de texte.
I Insertion de texte en début de ligne.
o Ajout d’une ligne sous la ligne actuelle.
O Insertion d’une ligne au-dessus de la ligne actuelle.
Tableau : commande vim
3- Quitter et sauver
Point cl é
Commande Action
ZZ Sauve le fichier et quitte.
:q ! Quitte sans sauver.
:q Quitte si le fichier n’a pas été modifié.
:w Sauve le fichier, vous pouvez préciser un nom à la suite.
:wq ou :x Sauve et quitte.
1, 10 fic Sauve les lignes de 1 à 10 dans fic.
Tableau : combinaison de touche pour quitter vim
B- Nano
Pour éditer du texte on utilise nano nom du fichier.
C- Gedit
Gedit (Gnome Editor) est l’éditeur de texte de l’interface graphique du projet GNU appelé
GNOME (Gnu Network Object Model Environnement) il permet d’écrire des textes en mode
graphique. Sa syntaxe est la suivante :
$ gedit nom_fichier
Point clé
Les flux de données en entrées peuvent provenir non d’un clavier, mais d’un fichier.
Point cl é
A- Redirection en sortie
Pour rediriger les fichiers en sortie on utilise le caractère (>) suivi du fichier sur lequel va
aller la sortie. Si le fichier n’existe pas il sera créé automatiquement. Si le fichier existe, son
contenu sera écrasé.
Pour pouvoir rajouter les fichiers à la suite on utilise le caractère suivant (>>).
B- En Entrées
Les programmes qui attendent des données depuis le clavier peuvent aussi les recevoir depuis un
fichier.
Un filtre est un programma sachant écrire et lire des données par les canaux standards
d’entrée et de sortie il en modifie ou traite le contenu.
Les redirections permettent de rediriger les résultats d’une commande dans un fichier pour
le traiter par une autre commande à la place, nous pouvons utiliser les filtres, ils s’obtiennent
avec le caractère (|), [AltGr]+6.
+-
A- Quelques Commandes
1- grep
Permet de rechercher du texte dans un fichier, sa syntaxe est la suivante : grep
[Options] modèle [fichier1…]
Options Interprétation
-c Ne retourne que le nombre de lignes trouvée sans les afficher.
-i Ne différencie pas les majuscules et minuscules.
-n Indique le numéro de ligne pour chaque ligne trouvée
-v Effectue la recherche inverse : toutes les lignes ne correspondant pas aux
critères sont affichées
C’est un éditeur de flux, il permet de filtrer et de transformer du texte. Sa syntaxe de base est : sed
-e ‘<cmd>’ fic
s/<ancien>/nouveau/ [g]
Le g final permet de faire un remplacement sur toute la lignz en cas de présence de plusieurs
occurrences du même élément.
3- cut
Permet de sélectionner des colonnes et des champs dans un fichier. Sa syntaxe est la suivante :
La commande permet également de sélectionner les champs avec son paramètre -fchamps le paramètre
-d permet de mettre le séparateur.
4- wc
Permet de compter les lignes, les mots et les caractères. Sa syntaxe est la suivante : wc
[-l][-c][-m][-w] fic1
Options Signification
-l Compte le nombre de ligne
-c Compte le nombre d’octets
-m Compte le nombre de caractères.
-w Compte le nombre de mots
Tableau : option de wc
5- sort
Permet de trier les lignes. Par défaut le tri s’effectue sur tout le tableau et par ordre croissant. Le
tri est possible sur un ou plusieurs champs. Sa syntaxe est la suivante : sort [options] [-k pos1
[,pos2]] [fic1…]
Option Signification
-d Tri dictionnaire
-n Tri numérique, pour les colonnes de
chiffre
GNU/linux possède une hiérarchie de processus, le premier processus Linux s’appelle init
son PID vaut 1 il est le père de tous les autres processus, il est le premier à être lancé par le
système d’exploitation. Tout comme son système de fichier, GNU/linux possède une hiérarchie
de processus en arborescence constituée de processus parent et de processus enfant qui peuvent
eux même créer des processus ainsi de suite, formant un arbre.
Un processus est un programme encours d’exécution et son environnement les éléments d’un
processus sont les suivants :
Point clé
Un numéro de processus unique PID : chaque processus Unix est numéroté afin d’être
différencié des autres.
Répertoire de travail actif : représente le répertoire depuis lequel a été lancé le processus.
Fichiers ouverts : il s’agit ici de la table des descripteurs de fichiers ouverts par défaut
il s’agit du canal 0,1 et 2.
Le terminal d’attachement.
L’état du processus.
Tous dans un système d’exploitation est processus, le Shell lui-même est un processus, il
permet de lancer d’autre processus. Chaque processus crée au sein du Shell est fils du processus
Shell il hérite donc des données du père.
La création d’un processus linux se fait avec l’appel système fork() qui crée une copie
conforme du processus qui l’invoque avec les même information et la même image mémoire.
Lors de la création du fils un nouveau descripteur de processus et un contexte mémoire sont
créés. Le code de retour de l’appel système fork vaut 0 pour le fils et un entier non nul pour le
père. L’appel système getpid permet au processus de onnaitre son PID.
Quand un processus fils est créé il subit un vidage des données du père à l’aide de l’appel système
execve, exec, execv.
B- Communication interprocessus
Point cl é
Envoi de message : cela est effectuer par un canal créé entre les deux processus tube ou
pipes.
Les signaux auxquels les processus réagissent sont visible avec la commande kill -l
C- Ordonnancement des système GNU/Linux.
2- Combien de niveau de priorité pour les algorithmes pour les threads temps réél ?
Point clé
L’ordonnancement dans les système linux est basé sur les threads et non sur les processus, linux
possède des threads noyau. On distingue ici trois classes de threads pour l’ordonnancement :
Les FIFO (First In First Out, ou premier entré premier sorti) temps réel.
Les threads temps réel ont des priorités allant de 0 à 99 ; 0 correspond au niveau de priorité le
plus élevé et 99 au niveau le plus faible.
Les threads non temps réel ont des niveaux de priorités de 100 à 139, Linux distingue donc 140
niveau de priorités pour les threads temps réel et non temps réel.
En ce qui concerne les threads tourniquet temps réel un quantum de temps est attribué en fonction
du niveau de priorité de chaque thread.
Un quantum correspond au nombre de tic d’horloge pendant lequel le thread continu son
exécution. Dans la version courante de linux l’horloge est cadencée à 1000 Hz et chaque tic fait
1ms, ce qu’on appelle jiffy
Point clé
Il existe plusieurs appels systèmes pour la gestion des processus, lorsqu’un appel système est
invoqué il renvoi un code de retour qui est -1 quand l’opération rate.
Durant le cycle de vie d’un processus linux, il peut passer par différent états ou process state :
Endormi (sleeping).
Nouveau processus.
Nous constatons l’apparition de deux nombres le premier est le numéro de jobs et le second est
le PID du processus.
2- jobs
Cette commande permet d’obtenir le numéro de job d’un processus qui s’exécute.
3- fg
Pour stopper un processus en exécution on utilise la combinaison ctrl + z, le signal SIGSTOP est
envoyé au noyau. Pour relancer son exécution on utilise la commande fg (foreground).
4- bg
5- ps
La commande process status permet d’avoir les informations sur les processus en cours d’exécution.
Les paramètres suivants sont à retenir :
6- pidof
7- pgrep
9- kill
De façon standard l’utilisation de kill consiste à préciser le numéro du signal comme paramètre.
Pour tuer un processus on utilise le signal de terminaison normal SIGTERM ou on utilise la méthode
brutale avec le signal SIGKILL.
10- pkill
Cette commande permet de tuer un processus en utilisant son nom et nom son PID.
11- nice
Cette commande permet de lancer un processus avec une priorité plus faible afin de permettre à
d’autre processus de fonctionner normalement.
Les priorités sont de 0 à 20 pour un utilisateur simple et peuvent pour le super utilisateur aller jusqu’à
-20 qui est la priorité la plus élevée.
12- renice
Cette commande fait la même chose que nice mais permet de modifier la priorité en fonction des
utilisateurs. La commande visée doit donc déjà tourner. Sa syntaxe est la suivante :
La priorité est comprise entre -20 et 20. Les option sont les suivantes :
-p : précise le PID.
-g : précise un GID.
-u : précise un UID.
2.9 Travaux Pratiques
1- A partir de votre répertoire personnel créer à partir d’une même commande les dossier suivant
/dossier1/dossier3 dossier4/dossier2 ?
5- Supprimer fichier2 ?
6- Avec rmdir supprimer dossier2 puis supprimer dossier1 avec tout son contenu ?
7- Affichez tous les fichiers ayant une taille inférieure à 600 octets et ayant les droits de 644 ?
8- Affichez dans votre répertoire de travail tous ls fichiers du système vous appartenant
9- Lister de façon détaillée les fichiers qui ont pour propriétaire guest ou qui ont une taille entre
512 et 1024 octets, inclus ?
10- Rechercher tous les fichiers vides du système n’appartenant pas à root et supprimer les ?
11- Donnez la commande permettant de rediriger les erreurs vers le trou noir
12- Le fichier /etc/passwd possède la base de données des utilisateurs linux, donne la commande
permettant de récupérer la ligne root ?
17- Lancer le processus sleep 1000 en arrière-plan puis récupérer son PID ?
18- Replacer le processus en avant-plan puis stoppez-le (ne le tuez pas) et replacez-le en arrière-
plan ?
19- Modifiez la priorité de ce processus ; passez-le à un facteur -10 ?
3- Quel est l’avantage d’une interface en ligne de commande sur une interface graphique ?
4- Quel est le shell par défaut des distributions Linux ? où se trouve la liste des shells ?
5- Vous avez tapé une commande qui ne s’arrête plus. Que faire pour terminer le programme ?
~/Documents ;
/usr/local/bin ;
/opt/kde3/bin/../lib ;
/home/seb/Documents.
10- Comment lister de manière récursive tous les fichiers sans exception présents dans /etc, quelle
est la commande à taper ?
11- Comment afficher la liste détaillée des fichiers, mais les derniers modifiés apparaissant en
dernier dans la liste ?
12- Vous voulez créer le plus simplement possible dans votre répertoire personnel le chemin
couts/D/reper, sachant qu’aucun de ces répertoires n’existe comment vous faites ?
13- Vous voulez supprimer le répertoire C ci-dessus ainsi : rmdir C cela va-t-il fonctionner ?
19- Dans vim comment rentrer en mode saisie pour insérer du texte à l’endroit actuel, quel que soit
le mode précédent ?
20- Quels sont les moyens permettant de quitter vim en sauvant son fichier ?