SlideShare une entreprise Scribd logo
1  sur  196
Télécharger pour lire hors ligne
Université Hassan II -Casablanca
Faculté des sciences Ben M’sick
Département de Mathématiques et Informatique
ž Introduction
ž Système de Gestion de Fichiers
ž Droit d’Accès
ž Les filtres UNIX
ž Gestion de Processus
ž Le langage Shell
2
ž Un système d’exploitation est un ensemble de procédures
manuelles et automatiques qui permet à un groupe
d’utilisateurs de partager efficacement un ordinateur. Brinch
Hansen.
ž Un système d'exploitation est un ensemble de programmes
chargé de faire l'interface entre l'utilisateur et le matériel.
ž C'est à dire quand un utilisateur tape une commande au
niveau d'un logiciel , le logiciel interprète la commande, la
transmet au système d'exploitation qui la transmet au matériel
dans un format compréhensible
3
ž Un exemple:
Ø quand on ouvre un fichier dans un éditeur de texte
§ le traitement de texte interprète l'action d'ouverture de fichier
§ transmet l'ordre au système d'exploitation
§ ce dernier va alors commander au contrôleur du disque dur
de chercher les pistes correspondantes sur le disque qui
correspondent au fichier en question.
ž Normalement un logiciel ne devrait jamais " discuter "
avec le matériel, les systèmes d'exploitation se place
entre les deux pour transmettre et éventuellement
rejeter des commandes illicites.
4
ž Le premier système «Unix» a été mis au point par Ken Thompson
dans les laboratoires Bell AT&T à partir de 1965.
ž
ž Le but de Ken Thompson était de mettre au point un système
d'exploitation interactif simple, nommé "Multics" (Multiplexed
Information and Computing System)
ž Deux branches de développement des sources voient le jour :
Ø La branche d'AT&T qui allait devenir System V de UNIX System
Labs (USL)
Ø BSD (Berkeley Software Developpement) développé par
l'Université de Californie
ž En 1977 AT&T mit les sources d'UNIX à la disposition des autres
entreprises, si bien qu'un grand nombre d'UNIX-like furent
développés .
5
ž Système ouvert : pas de code propriétaire ; seules certaines
implémentations sont propriétaires.
ž Multitâches :plusieurs programmes peuvent s'exécuter en même
temps, sans blocage, communication entre tâches
multiprocesseurs.
ž Mémoire protégée : pas d'interaction entre les programmes
ž Mémoire virtuelle : le système peut utiliser plus de mémoire que la
mémoire physique disponible.
ž Multi-utilisateurs : plusieurs utilisateurs travaillent sur la même
machine en même temps . Chaque utilisateur du système dispose
de ses fichiers, UNIX lui donne le moyen de protéger ses fichiers, et
d'accorder le droit ou non à d'autres utilisateurs d'accéder à ses
fichiers.
ž Interactif et batch : Le traitement par lot.
ž Interface : graphique X et shell (interpréteur de commande).
ž Stable : les plantages du système par lui-même sont rares
6
ž Système né dans le monde de la
recherche
Øintégration de concepts avancés
ž Diffusion ouverte
Øaccès aux sources, plusieurs distributions
ž Communautés d’utilisateurs
ž Interfaces graphiques sous linux Gnome
et KDE en particulier
ž Plus résistant aux virus
7
ž Partage des ressources équitables
Ø UNIX veille à ce que toutes les ressources de
l'ordinateur (processeur, mémoire, ...) soient
partagées équitablement entre tous les processus.
Ø Par exemple si on travaille sur une application du
genre base de données, on lance une requête
coûteuse en temps, pour patienter rien n’ empêche
de lancer une autre application.
§ On se trouve donc avec deux processus lancés en même
temps
§ C'est le système d'exploitation qui est chargé de faire en sorte
que les deux processus puissent utiliser les ressources de
manière équitable et que le deuxième processus lancé
n'attende pas la terminaison du premier pour se lancer. 8
ž Interface avec le matériel
ØLe système d'exploitation unix fait en sorte
qu'aucun processus n’accède directement à
une ressource matérielle (disque dur, lecteur de
disquette, ...)
ØPour accéder à ces ressources on passe par
l'intermédiaire de fichiers spéciaux
Ø un fichier spécial est vu pour un utilisateur
comme un fichier classique, pour écrire sur une
disquette dans le lecteur de disquette, on n'a
qu'à écrire dans le fichier spécial du lecteur de
disquette.
ØDe même pour lire dans un disque dur, on va lire
le fichier spécial du disque dur.
9
ž Gestion de la mémoire
Ø Tout programme qui s'exécute, ou processus, a
besoin de mémoire pour y stocker notamment les
données qui manipulent.
Ø Un ordinateur dispose d'une quantité de mémoire
limitée et non extensible.
Ø UNIX doit donc faire en sorte que la mémoire soit
bien partagée entre tous les processus, un
processus ne doit pas s'accaparer toute la
mémoire, sans quoi les autres processus ne
pourraient plus fonctionner.
Ø La mémoire est vue comme une ressource
matérielle, UNIX doit donc vérifier qu'aucun
processus n’accède à la mémoire directement 10
ž Gestion de la mémoire
ØIl existe deux types de mémoire, la mémoire
volatile et la mémoire statique
Ø quand on éteint et on rallume l'ordinateur,
toutes les données présentes dans la
mémoire volatile ont disparu, et les données
dans la mémoire statique sont toujours
présentes.
Ø Concrètement la mémoire volatile se
trouve dans la RAM, la mémoire statique
dans le disque dur. 11
ž Gestion des fichiers
Ø UNIX fournit les outils nécessaires pour stocker les données
et pour pouvoir les récupérer rapidement et facilement.
Ø Il fournit les outils pour pouvoir visualiser l'ensemble des
fichiers de manière simple.
Ø Ces fichiers se trouvent sur le disque dur, on nomme cela
un système de fichiers ou File System en anglais.
Ø UNIX fournit, en outre, un mécanisme de protection des
fichiers.
Ø Chaque utilisateur du système dispose de ses fichiers, UNIX
lui donne le moyen de protéger ses fichiers, et d'accorder
le droit ou non à d'autres utilisateurs d'accéder à ses
fichiers.
12
ž L’architecture globale d’UNIX est une
architecture par couches successives comme
le montre la figure:
13
ž Les utilisateurs ordinaires communiquent avec
la couche la plus évoluée celle des
applications.
ž Le programmeur lui va en fonction de ses
besoins utiliser des couches de plus en plus
profondes, plus précises mais plus difficiles à
utiliser.
ž Chaque couche est construite pour pouvoir
être utilisée sans connaitre le fonctionnement
les couches inférieures
14
ž Le système d'exploitation est un ensemble de
programme et de sous programmes qui sont
regroupés dans ce qu'on appelle un noyau
(kernel en anglais)
ž Les processus ne pouvant pas accéder
directement aux ressources matériels, les
processus passent par le noyau pour y accéder
ž Pour cela ils disposent d'un ensemble de
commandes appelées " appels système " UNIX .
15
ž Ces appels systèmes commandent les composantes
principales du noyau:
Ø le gestionnaire de processus: a pour rôle de faire en sorte que
les processus s'exécutent et accèdent à la mémoire de manière
équitable, on le nomme aussi scheduler.
Ø le système de gestion de fichiers: a pour rôle la gestion du
système de fichiers, notamment pour ce qui concerne les droits
d'accès.
Ø et le gestionnaire de la mémoire..
ž Ce sont ces composants du noyau qui accèdent
directement au matériel.
16
17
ž Sur un système UNIX, on trouve deux types de personnes:
Ø l'utilisateur UNIX, on peut trouver dans cette catégorie, le
programmeur, l'utilisateur de base de données, etc.
Ø les administrateurs (appelé ROOT ou super utilisateur)
systèmes UNIX.
ž Sur un système UNIX, les utilisateurs UNIX ont des droits
limités, c'est à dire que certaines commandes leurs sont
interdites et ils n'ont pas accès à certaines parties du
système.
ž Les administrateurs systèmes ont par contre tous les droits
sur le système.
ž Le prompt «$» indique qu'il s'agit d'un utilisateur normal
ž Le prompt «#» indique qu'il s'agit de l'administrateur,
18
ž Ouverture de session
Ø Avant de tenter une connexion, il faut d'abord posséder
un compte utilisateur caractérisé par un nom ou login et
un mot de passe associé.
Ø A la mise sous tension, on peut aussi disposer d'une
interface graphique de connexion, qui nous invite à saisir
notre login et notre mot de passe.
Ø Une fois le login et le mot de passe saisi deux possibilités
peuvent s'offrir :
§ Retrouver un écran noir, avec tout simplement un caractère du
genre $ ou > (appelé prompt) suivi du curseur qui clignote
apparaît.
§ C’est le shell qui permet de taper des commandes.
§ Par exemple, sous Linux le prompt par défaut est le suivant:
§ Retrouver un environnement fenêtré avec utilisation de la souris,
où il vous sera possible de lancer un shell pour pouvoir taper des
commandes UNIX (terminal).
19
ž Pour communiquer avec l'ordinateur, l'utilisateur dispose du Shell
(coquille en français). : c’est un programme qui permet la saisie
directe de commandes.
ž Son rôle est d'interpréter les commandes de l'utilisateur avant leur
transmission au noyau, c'est pourquoi on parle aussi d'interpréteur
de commandes.
ž Il existe plusieurs types de shell, ils se différencient par la syntaxe et
la richesse des commandes:
Ø les plus commun est le Bourne-Shell,
Ø on trouve aussi le C-Shell qui s'apparente au langage de
programmation C
Ø le Korn Shell, le Posix Shell,
Ø et sous Linux le bash-shell
20
ž Le Shell permet d'exécuter :
Ø des commandes internes,
Ø des commandes externes,
Ø des commandes complexes,
Ø des fichiers de commandes.
ž La syntaxe standard d'une commande UNIX est
la suivante :
21
ž Commandes internes
Ø Les commandes internes au Shell font partie intégrante
du Shell
Ø Le shell ne crée pas un nouveau processus
Ø Exemples :
§ cd .. Permet de changer de répertoire
§ ls permet de lister le contenu d’un répertoire
ž Commandes externes
Ø Ce sont des programmes binaires généralement situés
dans le répertoire /bin que le Shell va exécuter sous la
forme d'un nouveau processus
§ gzip permet de compresser des donner
22
ž Commandes complexes
Ø Les commandes complexes résultent de la
combinaison de plusieurs commandes par
l'intermédiaires de tubes.
Ø Exemple :
ls -1 | head -n5
Le résultat de l’exécution de la commande ls –l est
fournie à la deuxième commande comme entrée 23
ž Fichiers de commandes
Ø Appelés aussi scripts Shell, ces fichiers textes
regroupent une succession ordonnée de commandes
et de structures de contrôles.
Ø Ecrire un script revient à faire de la programmation
(voir plus loin).
24
ž Commande ls
Ø ls liste les fichiers et répertoires de votre répertoire courant.
ž Commande cp
Ø Avec la commande cp (copy) copie un répertoire (option R) vers
un autre répertoire, on a ici deux arguments.
ž Cat: catalogue, permet d'éditer le contenu d'un fichier
ž Commande mv
Ø mv permet de changer le nom d'un fichier ou de le déplacer vers
un autre répertoire.
$mv fic1 fic2 #(fic1 n'existe plus)
$mv fic1 rep #(fic1 existe, mais sous rep)
25
ž Commande rm
Ø rm permet de supprimer un fichier, ou un répertoire si l'option -r est
précisée.
Ø Pour éviter les confirmations multiples l'option -f sera très utile.
$rm -f fic*
$rm -r rep
Ø Attention rm, supprime réellement le fichier, il n'y a pas de
restauration possible après un rm.
ž Commande cd
Ø cd permet de changer de répertoire.
$cd bin
$cd bin/new
$cd .././src
26
ž Commande pwd
Ø Affiche le chemin du répertoire où on se trouve
ž Commande logname
Ø Cette commande affiche le login de l’utilisateur, en principe celui utilisé
lors de la connexion.
ž Commande who
Ø Affiche les utilisateurs connectés
27
ž Commande sudo
Ø La commande "sudo" (Switch User) appelée plus
communément (à tort )"Super Utilisateur" , permet
d'ouvrir une session avec l'ID (IDentifiant) qui est du
root
$sudo su
Ø En entrant le mot de passe, on se connecte en tant
qu'utilisateur root
Ø On bénéficie des réglages par défaut du root (shell de
connexion, variables d'environnement, permissions
diverses...)
28
ž Il y a trois sortes d'entrées sorties ou flux de données :
Ø le premier est l'entrée standard, c'est à dire ce qu’on saisi au
clavier
Ø le deuxième est la sortie standard, c'est à dire l'écran, plus
précisément le shell,
Ø le troisième est la sortie standard des messages d'erreurs suite à
une commande, qui est généralement l'écran.
ž Chacun de ces flux de données est identifié par un
numéro descripteur:
Ø 0 pour l'entrée standard
Ø 1 pour la sortie standard
Ø et 2 pour la sortie standard des messages d'erreur.
29
ž Redirection des entrées sorties
Ø Quand on lance une commande dans un shell, il peut
y avoir du texte qui s'affiche suite à l'exécution de la
commande, ce texte par défaut, s'affiche dans le
shell.
Ø On dit que le shell (ou terminal) est la sortie standard,
c'est là où va s'afficher le résultat d'une commande.
Ø On peut changer ce comportement, en tapant :
ls> toto
ØDans ce cas le résultat va s’écrire dans le fichier
toto
Ø> toto crée un fichier toto
30
ž Redirection des entrées sorties
Ø Cela peut être utile:
§ si on a une commande qui génère énormément de commentaire, et
qu’on veuille les récupérer, pour les exploiter par la suite, à la
terminaison de la commande.
Ø La redirection > a pour effet de créer le fichier toto, si ce fichier
existait déjà, il est tout simplement écrasé (supprimé et recréé),
ce qui peut être gênant
Ø si nous ne voulons pas perdre ce qu'il contient, on peut disposer
donc de la redirection >>.
Ø exemple :
ls >> toto
§ Le fichier toto n'est pas écrasé, mais la sortie standard (les
commentaires de la commande) sont ajoutés en fin de
fichier, à la suite du texte qui était déjà dans le fichier.
31
ž Redirection des entrées sorties
Ø De manière analogue, le caractère «<» indique une
redirection de l'entrée standard.
Ø La commande suivante envoie le contenu du fichier
toto.txt en entrée de la commande cat, dont le seul
but est d'afficher le contenu sur la sortie standard :
cat < toto
sort < mon-fichier
Ø Le contenu du fichier mon-fichier sera envoyé vers la
commande sort (trie), celle-ci va donc trier le
contenu du fichier, par défaut le résultat sort sur la
sortie standard, c'est à dire à l'écran
32
ž Redirection des entrées sorties
ØAvec la commande suivante :
$sort < mon-fichier > fichier-trie
ØLa commande sort < mon-fichier a pour effet
de trier le fichier mon-fichier
Ø l'expression >fichier-trie a pour effet d'envoyer
le résultat (le fichier trié) dans un fichier fichier-
trie,
Øle résultat n'apparaît plus à l'écran, mais est
sauvegardé dans un fichier.
33
ž Redirection des entrées sorties
Ø Avec la redirection << la commande va lire les
caractères jusqu'à la rencontre d'une certaine chaîne
de caractères.
Ø Exemple avec la commande cat
Cat << fin ici je tape le texte puis je termine par fin
Ø cat va lire (et éditer) les caractères que nous nous
avons saisi jusqu'à qu'il rencontre la chaîne fin, à ce
moment là, le prompt apparaît à nouveau.
Ø Si on veut créer un fichier avec un peu de texte à
l'intérieur, on procède de cette façon :
Cat << fin > toto ici je tape le texte puis je termine par
fin
34
ž Redirection des erreurs
Ø Par défaut les messages d'erreur s'affichent à l'écran et la sortie
d'erreur a pour code 2.
Ø On peut sauvegarder dans un fichier les messages d'erreur, pour
l’analyser ultérieure, en tapant :
$cat mon-fichier 2> fichier-erreur
Ø Si on rencontre une erreur pendant l'exécution de la
commande d'édition cat de mon-fichier (absence du fichier par
exemple), le message d'erreur sera sauvegardé dans le fichier
fichier-erreur.
Ø Par défaut les messages d'erreur s'affichent dans le shell, nous
pouvons faire en sorte qu'ils s'affichent dans le fichier fichier-er,
en tapant :
$cat mon-fichier > fichier-trie 2>&1
Ø Avec la syntaxe >& indique que les messages d'erreurs seront
redirigés vers la sortie standard qui est le fichier fichier-trie.
35
ž Le système de gestion de fichiers est un outil de manipulation des
fichiers et de la structure d’arborescence des fichiers sur disque
ž Il a le rôle sous UNIX de conserver toutes les informations dont la
pérennité est importante pour le système (et pour les utilisateurs
bien sûr).
ž Ainsi tous les objets importants du système sont référencés dans le
système de fichiers
Ø mémoire, terminaux, périphériques variés, etc.
ž Le système de gestion de fichier permet une manipulation simple
des fichiers et gère de façon transparente les différents problèmes
d’accès aux supports de masse :
Ø partage : utilisation d’un même fichier/disque par plusieurs
utilisateurs
Ø efficacité : utilisation de cache
Ø droits : protection des éléments important du système et
protection inter-utilisateurs
36
ž L’unité logique de base de l’interface du
Système de Gestion de Fichiers : le fichier.
ž Un fichier Unix est une suite finie de bytes
(octets) Matérialisée par des blocs disques, et
une inode qui contient les propriétés du fichier .
ž Le contenu est entièrement défini par le
créateur, la gestion de l’allocation des
ressources nécessaires est à la responsabilité du
système.
37
ž Un fichier, est caractérisé par les
informations :
Ø la localisation sur disque,
Ø le propriétaire et le groupe propriétaire,
Ø les droits d’accès des différents utilisateurs,
Ø la taille du fichier,
Ø la date de création.
38
ž Il existe trois types de fichier:
Ø le fichier qu'on pourrait qualifier de normal
Øle répertoire ou catalogue (en anglais
directory)
Ø les fichiers spéciaux
39
ž Un fichier normal contient des données, ce fichier peut
être lisible (contient des informations compréhensibles),
ou totalement illisible.
ž Exemple : fichier texte, fichier exécutable (fichier
binaire).
ž Un répertoire peut être considéré comme un classeur,
dans lequel on met des fichiers, c'est un élément
d'organisation de l'espace du disque dur.
40
ž Un exemple de fichiers spéciaux à usage
physique se trouvent dans le répertoire /dev
(dev comme devices dispositifs matériels)
ž Chacun des fichier est associé à un
périphérique physique, il y en a deux types:
Ø périphériques où la communication se fait octets par
octets : Character devices
§ les terminaux (claviers, écrans)
§ les imprimantes, port série
§ la mémoire, etc
Ø périphériques ou la communication se fait par groupe
d’octet appelés blocs: Block devices
§ les disques
§ les bandes magnétiques, etc
41
ž Exemples de fichiers à usages logiques et non
physiques
Ø liens symboliques
Ø pseudo-terminaux
Ø sockets
Ø tubes nommés
ž Ce dernier type de fichiers spéciaux est utilisé
pour servir d’interface de communication entre
disques, entre machines…..
42
ž Pour certains fichiers le système utilise une
structure interne spéciale (d’ou le nom) qui ne
doit pas être modifié sous peine de
comportement indéfini.
ž Pour se protéger le système ne permet pas
l’accès direct aux informations
ž c’est lui qui fait toutes les entrées sortie sur les
fichiers spéciaux de façon a en assurer
l’intégrité.
43
ž Le système de fichiers sur Linux est similaire à ce que l'on
retrouve dans Windows, i.e. une structure hiérarchique
dont une racine et des répertoires qui s'y rattachent.
ž Exemples de Système de Fichier
44
ext2 Second Extended Filesystem, le plus utilisé par
défaut
sysv filesystem AT&T System V et Xenix
minix le premier filesystem utilisé à l'origine par Minix et
Linux
iso9660 aussi cdfs et udf, filesystem lecteurs cd et dvd
reiserfs filesystem journalisé le plus utilisé
etx3 Third Extended Filesystem, journalisé
smbfs Filesystem basé sur le protocole SMB de Windows
ž Voici un exemple d'un système Linux:
45
ž Voici un résumé de ce que contiennent ces répertoires.
ž /bin
Ø Ce répertoire contient les commandes de base du système,
comme les coquilles ("shells") et les commandes de base d'Unix,
i.e. cat, date, grep, mv, ....
ž /etc
Ø Ce répertoire contient l'ensemble des fichiers de configuration
et de démarrage d'un système Linux.
Ø Exemple: le fichier contenant la liste des usagers Unix
(/etc/passwd), les "scripts" de démarrage du système, les fichiers
de configuration pour certains logiciels, etc.
ž /dev
Ø Ce répertoire contient les dispositifs ("devices") du système. On y
retrouve des dispositifs de type bloc (disque) et ceux de type
caractère (unité de ruban, port série, ...).
46
ž /home
Ø Ce répertoire contient généralement l'espace disque nécessaire
pour les comptes d'usager.
ž /lib
Ø Ce répertoire contient les librairies de système pour le
fonctionnement d'un système Linux.
Ø Si l'on veut comparer à Windows, elles sont comme les DLL.
ž /proc
Ø Ce répertoire contient tous les renseignements qui se rattachent
aux processus actifs d'un système Linux.
Ø On y retrouve des répertoires qui contiennent des
renseignements sur les processus qui s'exécutent ainsi que ceux
concernant le type de processeur, les dispositifs actifs
("devices"), l'utilisation de la mémoire, etc.
Ø si on veut savoir quel type de processeur une machine Linux
possède, il suffit de regarder le contenu du fichier cpuinfo. 47
ž /sbin
Ø Ce répertoire contient l'ensemble des commandes pour
l'administration d'un système Linux.
Ø On y retrouve des commandes pour redémarrer le système
(reboot), vérifier l'intégrité d'une partition (fsck), créer un système
de fichier (mkfs) , etc.
ž /tmp
Ø Utilisé par l'ensemble du système autant pour l'usager root que
pour les usagers Linux.
Ø Plusieurs applications l'utilisent pour y mettre des fichiers et
répertoires temporaires.
Ø Cependant, lorsque le système est redémarré, certains fichiers
seront effacés.
48
49
ž On accède aux
partitions par des
pointeurs stockés dans
/dev.
ž Ces pointeurs sont de la
forme « /dev/PPLN»
Ø avec « PP » le type de
bus
§ hd pour les disques IDE,
§ sc pour les disques
SCSI,
§ fd pour les disquettes,
§ sd pour USB
Ø « L » la lettre du
périphérique concerné
Ø et « N » le numéro de partition concernée (1 à 4 pour une partition principale
ou étendue, > 4 pour les partitions logiques).
50
ž Comment Linux identifie et organise les disques durs ?
Ø Pour les disques SCSI ou SATA, la numérotation se fait avec un préfixe
sd, suivi par une lettre, « a » pour premier disque SCSI (selon l'ID), « b »
pour le deuxième disque, etc.
Ø Prenons par exemple 3 disques SCSI d'id 0,1 et 3 on va avoir :
§ sda Disque d'ID 0
§ sdb Disque d'ID 1
§ sdd Disque d'ID 3
Ø CD-ROM SCSI , les périphériques de stockage USB (appareils photo,
clefs USB...) apparaissent comme un disque dur SCSI ; ils se nomment
aussi sdx suivant leur ID.
Ø Pour les disques IDE, la numérotation se fait avec un préfixe hd, suivi
par une lettre, « a » pour le premier IDE maître, « b » pour le premier
esclave, etc.
§ hda Disque maître correspond au premier disque dur IDE
– hda1 à la première partition du disque dur IDE
§ hdb Disque esclave, correspond au second disque dur I sur le 1er
contrôleur IDE
51
52
53
ž Tout fichier, qu'elle que soit son type, doit pouvoir
être identifié, c'est pourquoi on les nomme avec un
nom en rapport avec le fichier.
ž Ce nom comporte au maximum 255 caractères,
sachant qu'il existe une distinction entre les lettres
minuscules et majuscules, et que certains caractères
sont interdits, ce sont par exemple le /, les
parenthèses (), l'espace ou *.
54
ž Un nom de chemin peut aussi être relatif à sa position courante
dans le répertoire
ž Pour cela souvent utiliser deux entrées particulières de
répertoires :
Ø Le point . représente le répertoire courant actif
Ø Les doubles points .. représentent le répertoire de niveau inférieur
./Documents/Photos est un chemin relatif
/usr/local/../bin est un chemin relatif : les .. sont relatifs à /usr/local
ž Le tilde ~
Ø Le bash interprète le caractère tilde ~ comme un alias du répertoire
personnel
Ø Les chemins peuvent être relatifs au tilde, mais le tilde ne doit être précédé
d’aucun caractère.
Ø Pour se déplacer dans le répertoire tmp du dossier personnel de n'importe
où
$ cd ~/tmp
ž ls –l
La signification des champs est la suivante:
Ø -rw-rw-rw- type de fichier et ses caractéristiques de
protection
Ø 1 le nombre de lien
Ø olivier le nom du propriétaire
Ø users le groupe d'utilisateurs auquel appartient le
propriétaire
Ø 17356 la taille du fichier (en octets)
Ø Dec 3 le jour de dernière modification
Ø 12 :11 l'heure de dernière modification
Ø HOW-TOppp le nom du fichier
ž $ls –l nom-du-fichier 55
ž Pour gérer les répertoires, on dispose des
commandes suivantes :
Ømkdir nom-de-répertoire Création d'un répertoire
Ørmdir nom-de-répertoire Suppression d'un
répertoire vide
Ømv répertoire répertoire-d'accueil déplacement
d'un répertoire
Ømv répertoire nouveau-nom Changement de
nom d'un répertoire
56
ž Pour gérer les fichiers on dispose des
commandes suivantes:
Øtouch mon-fichier création d'un fichier vide,
Ømore mon-fichier visualisation d'un fichier page à
page,
Øfile mon-fichier pour savoir si on a un fichier
binaire (exécutable) ou un fichier texte. On
obtient pour un fichier texte, comme sortie mon-
fichier : ascii text.
57
ž Dans l'arborescence UNIX en tapant la commande ls -l on peut
rencontrer cette syntaxe un peu particulière.
ž Cela signifie que le fichier Mail pointe vers le fichier mail qui se
trouve dans le répertoire /bin, en d'autres termes Mail est un
lien vers le fichier mail.
ž Un lien est créé pour pouvoir accéder au même fichier à
différents endroits de l'arborescence. Sous Windows on
retrouve à peu près l'équivalent avec la notion de raccourci.
ž La commande ln (pour link) sert à créer des liens. Par exemple:
ž Deux types de liens : symbolique et hard
58
ž L’inode est la structure qui contient toutes les informations sur un
fichier donné à l’exception de sa référence dans l’arborescence
(son nom), l’arborescence n’étant qu’un outil de référencement
des fichiers.
ž Les informations stockées dans une inode disque sont :
Ø utilisateur propriétaire
Ø groupe propriétaire
Ø type de fichier
Ø fichiers ordinaires
§ d répertoire (directory)
§ b mode bloc
§ c mode caractère
§ l lien symbolique
§ p pour une fifo (named pipe)
§ s pour une socket
Ø droits d’accès (ugo*rwx), date de dernier accès, date de dernière
modification, date de dernière modification de l’inode
Ø taille du fichier
Ø adresses des blocs-disque contenant le fichier. 59
ž Un répertoire n'est qu'un fichier, identifié aussi par un
inode, contenant une liste d'inode représentant chacun
un fichier.
ž La différence entre un lien hard et symbolique se trouve
au niveau de l'inode, un lien hard n'a pas d'inode
propre, il a l'inode du fichier vers lequel il pointe.
ž Par contre un lien symbolique possède sa propre inode.
ž Pour connaître le numéro d'inode d'un fichier, on tape:
$ ls –i mon-fichier
60
ž Le but des métacaractères, est de pouvoir faire
une sélection de fichiers suivant certains critères.
ž Le métacaractère le plus fréquemment utilisé est
*, il remplace une chaîne de longueur non
définie.
Ø Avec le critère * on sélectionne tous les fichiers.
Ø Par le critère a*, on sélectionne tous les fichiers
commençant par a.
ž $ls a*
ž Va lister que les fichiers commençant par a. De
même *a opère une sélection des noms de
fichiers se terminant par a.
ž Le critère *a* va faire une sélection sur les noms
de fichiers qui ont le caractère a dans leur nom,
quelque soit sa place. 61
ž Le métacaractère ? remplace un caractère
unique.
Ø Avec le critère a??, on sélectionne les fichiers dont le nom
commence par a, mais qui contiennent au total trois
caractères, exactement.
ž Les métacaractères [ ] représente une série de
caractères.
Ø Le critère [aA]* permet la sélection des fichiers dont le
nom commence par un a ou A (minuscule ou majuscule).
Ø Le critère [a-d]* fait la sélection des fichiers dont le nom
commence par a jusqu'à d.
Ø Le critère *[de] fait la sélection des fichiers dont le nom se
termine par d ou e.
ž On voit bien que les caractères [],* et ? sont des
caractères spéciaux, qu'on ne peut utiliser comme
des simples caractères, parce qu'ils sont interprétés
par le shell, comme des métacaractères.
62
ž Cependant on peut inhiber leur
fonctionnement
ž En tapant :
$ls mon-fichier?
Ø Le shell va interpréter le ? comme un
métacaractère et afficher tous les fichiers qui
commencent par mon-fichier et qui se termine
par un caractère unique quelconque.
ž Si on ne veut pas que le ? soit interprété on
tape :
$ls mon-fichier?
63
ž Trois principales suites bureautiques libres sont disponibles pour
Linux.
ž La première des trois, historiquement parlant, n’est pas à
proprement parler une véritable suite, mais plutôt un assemblage
de plusieurs programmes indépendants du projet GNOME
(Abiword, Gnumeric, etc.).
ž Face à cette situation, l’équipe des développeurs de KDE décida
en 1998 de lancer le projet Koffice, avec la volonté affichée d’en
faire une alternative crédible à la suite MS-Office.
ž Sur ces entrefaites, la société Sun Microsystems, qui avait pour des
raisons stratégiques racheté la suite Star Office à son créateur Star
Divisions, décida d’en ouvrir le code.
ž La suite Star Office se décline donc dorénavant en deux versions,
propriétaire et libre. La version libre, OpenOffice.org, est
dorénavant livrée pour quasiment toutes les distributions.
ž Tous ces modules sont compatibles avec leur équivalent Microsoft.
64
ž Les éditeurs de texte sont des traitements de
texte un peu particuliers.
ž À l’inverse des outils bureautiques un éditeur
est clairement conçu pour écrire des
programmes, des fichiers de configuration,
ou d’autres fichiers similaires.
ž Ils ne manipulent que du texte brut. Par
conséquent, ils ne permettent pas
d’enrichissement typographique (texte en
gras, italique, réglage des interlignes, titres,
etc.), mais offrent généralement des
fonctionnalités supplémentaires en rapport
avec leur utilisation, telle la coloration
syntaxique ou l’auto-complétion des
commandes. 65
ž Vi est un éditeur datant d'Unix, et il est encore présent
sur toutes les plateformes GNU/Linux.
ž C'est un éditeur plein écran, il n'y a donc pas
d'interface graphique, ni même de menu.
ž Mais il est interactif, car il communique avec
l'utilisateur, grâce à la ligne d'état, qui affiche des
messages.
ž Vi possède deux modes différents :
Ø Le premier, celui qui est actif par défaut à son lancement,
est le mode commande. Toutes frappes de l'utilisateur sont
interprétées comme des commandes.
Ø Le mode insertion, lui, interprète chaque frappe comme du
texte à ajouter dans le fichier ouvert. Pour passer du mode
commande au mode insertion, il faut taper a (pour ajout)
ou i (pour insertion). Inversement, pour quitter le mode
insertion, taper esc.
ž Lorsque l'on démarre Vi, en tapant simplement vi dans
une console, ou vi fichier, les lignes vides apparaissent
avec un ~ (tilde) en début.
66
ž Les commandes de base : dernière ligne
67
Commande Description
:q Quitte l'éditeur (sans sauvegarder)
:q!
Force l'éditeur à quitter sans sauvegarder
(même si des modifications ont été apportées
au document)
:wq Sauvegarde le document et quitte l'éditeur
:filenom Sauvegarde le document sous le nom spécifié
ž Les commandes : Mode de commande
(déplacement)
68
ž Kate (KDE Advanced Text Editor)
Ø Kate est l’un des éditeurs du projet KDE. Les deux
autres, moins puissants, sont KEdit et KErite. Kate
est un éditeur multi-document, les différents
fichiers étant facilement accessibles grâce au
navigateur situé dans la partie gauche.
Ø Ses principales fonctionnalités sont :
§ Il permet d’éditer tous les types de fichiers texte,
même s’ils sont très volumineux.
§ Il ouvre par exemple un fichier de 50 Mo en
quelques secondes.
§ C’est un moteur de coloration syntaxique puissant.
Le choix de la coloration est soit manuel, soit
automatique en fonction de l’extension.
ž Gedit
Ø Gedit est le pendant de Kate pour GNOME. 69
70
ž Définition
Ø Chaque fichier a plusieurs propriétés associées : le propriétaire,
le groupe propriétaire, la date de dernière modification, et les
droits d'accès.
Ø On peut examiner ces propriétés grâce à l'option -l de ls.
Ø Dans cet exemple, nous voyons les permissions standard d'un
répertoire et de deux fichiers :
$ ls -l
total 205
drwxr-xr-x 2 toto phy03 512 Jan 16 10:02 fiches/
-rw-r--r-- 1 toto phy03 72008 Oct 2 2003 article.dvi
-rw-r--r-- 1 toto phy03 145905 Oct 2 2003 article.pdf
Ø Les permissions sont indiquées dans la colonne de gauche,
suivant un format bien particulier :
71
ž Type
Ø Le premier caractère du bloc de permissions indique le type du fichier :
- pour un fichier normal,
d pour un répertoire.
On trouve également parfois l pour les liens symboliques
ž Droits du propriétaire
Ø r ou - : droit de lire (r pour read) le fichier (r pour oui, - pour non)
Ø w ou - : droit d'écrire (w pour write) dans le fichier
Ø x ou - : droit d'exécuter (x pour execute) le fichier.
72
ž Droits du propriétaire u
Ø dans le groupe propriétaire, pour un répertoire, les choses sont
un peu différentes.
§ Le couple rx donne le droit d'examiner le répertoire et son contenu.
§ Le bit w donne le droit d'ajouter ou de supprimer des fichiers dans le
répertoire.
ž Droits du groupe g
Ø Comme les droits du propriétaire, mais s'applique aux gens qui
sont dans le groupe propriétaire.
ž Droits des autres o
Ø Comme les droits du propriétaire, mais s'applique aux gens qui
sont ni le propriétaire, ni dans le groupe propriétaire.
ž Droits de tout le monde a
73
ž Il existe 4 commandes liées aux droits d'accès :
Ø chmod (change mode), la plus utile, qui modifie les permissions
Ø chgrp (change group) qui modifie le groupe d'un fichier ou
répertoire
Ø chown (change owner) qui modifie le propriétaire d'un fichier
ou répertoire
Ø umask, qui définit les droits par défaut
ž Les commandes chgrp et chown servent surtout à
l'administrateur du système
ž En revanche, chmod est une commande très pratique
dans une utilisation courante.
74
ž Chmod :
Ø La commande chmod permet de modifier les droits
d'accès d'un fichier (ou répertoire).
Ø Pour pouvoir l'utiliser sur un fichier ou un répertoire, il
faut en être le propriétaire.
Ø La syntaxe est la suivante : chmod u+x fichier
75
ž Exemple on veut donner un droit en écriture pour le
groupe du fichier mon-fichier
ž Pour supprimer le droit d'accès du répertoire mon-
répertoire aux autres utilisateurs (autres que propriétaire
et utilisateurs du groupe)
ž Pour ajouter le droit en exécution pour le propriétaire,
et on enlève le droit en écriture pour le groupe du
fichier
76
ž Nous avons une autre méthode pour se servir de la
commande chmod : l'association de valeurs
numériques aux différentes permissions :
Ø lecture : 4,
Ø écriture : 2,
Ø exécution : 1,
Ø pas de permission : 0.
ž Chaque triplet se code par l'addition de 4, 2, 1, ou 0.
Ø Pour un rwx il faudra ajouter 4+2+1=7, pour r-x 4+0+1=5 etc.
ž Donc les combinaisons vont de 0 ( aucun droit) à 7 (rwx
tous les droits).
ž Cela s'applique à chaque groupe triplet (propriétaire,
groupe et autres).
77
ž Les commandes suivantes sont
identiques :
Ø rwxr-x--- è 750
ž On considère que r=4, w=2 et x=1, si
on a un fichier avec les droits
suivants -rw-rw-rw-, pour les droits
utilisateurs on a (r=)4+(w=)2=6, de
même pour le groupe et les autres.
Ø Donc -rw-rw-rw- est équivalent à 666.
Ø De même rwxrw-r-- est équivalent à 754.
ž Pour mettre un fichier avec les droits-
r--r--r-- on tape : chmod 444 fichier
droits
valeur
octale
valeur
binaire
--- 0 000
--x 1 001
-w- 2 010
-wx 3 011
r-- 4 100
r-x 5 101
rw- 6 110
rwx 7 111
ž Le tableau suivant donne les droits en valeur octale
et valeur binaire
78
ž Quand on crée un fichier, par exemple avec la commande touch,
ce fichier par défaut possède certains droits.
Ø Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un répertoire (-
rwxrwxrwx), ce sont les droits maximum.
ž On peut faire en sorte de changer ces paramètres par défaut par
la commande umask.
ž Pour un fichier :
Ø Si on tape umask 022, on part de 666 et on retranche 022, on obtient
donc 644, par défaut les fichiers auront comme droit 644 (-rw-r-r--).
Ø Si on tape umask 244, on part de 666 et on retranche 244, on obtient
donc 422, par défaut les fichiers auront comme droit 422 (-rw--w--w-).
ž Pour un répertoire :
Ø Si on tape umask 022, on part de 777 et on retranche 022, on obtient
donc 755, par défaut les fichiers auront comme droit 644 (-rwxr-xr-x).
Ø Si on tape umask 244, on parte de 777 et on retranche 244, on obtient
donc 533, par défaut les répertoires auront comme droit 422 (-rwx-wx-
wx).
79
ž On peut " donner " un fichier nous appartenant à un
autre utilisateur, c'est à dire qu'il deviendra propriétaire
du fichier, et que nous n'aurons plus que les droits que le
nouveau propriétaire voudra bien nous donner sur le
fichier.
ž Dans le même ordre d'idée on peut changer le groupe.
ž Ces deux commandes ne sont utilisables que si on est
propriétaire du fichier.
80
ž Quand un utilisateur se connecte, il fournit un
nom de connexion (login name) et un mot de
passe (password).
ž Si la connexion réussit, un shell est lancé et
l'utilisateur se retrouve dans son répertoire de
travail (working directory) qui est initialement
son répertoire de connexion (login directory).
ž Ces informations sont placées dans les fichiers
/etc/passwd et /etc/group.
ž Le fichier /etc/passwd
Ø Les utilisateurs sont définis au sein du fichier
/etc/passwd.
Ø En voici sa structure.
user:passwd:UID:GID:commentaire:homedir:cmd
81
82
ž Les groupes sont définis au sein du fichier
/etc/group.
ž Voici sa structure.
group: passwd: GID:liste_utilisateurs
83
84
ž En général, la liste des utilisateurs est
segmentée ainsi :
Ø l'utilisateur dont l'UID est 0 est le root
Ø les utilisateurs dont l'UID est inférieur à une
certaine valeur (500) sont des utilisateurs
systèmes
Ø les utilisateurs dont l'UID est compris entre
cette valeur et 65533 sont des utilisateurs réels,
cette plage peut quelquefois être elle-même
subdivisée
85
ž À l'origine d'Unix, les mots de passe étaient stockés dans le
fichier /etc/passwd (deuxième champs) cryptés avec
l'algorithme traditionnel crypt.
ž Comme ce fichier doit être accessible en lecture pour tout les
utilisateurs, le stockage des mots de passe à été déplacé vers
le fichier /etc/shadow dont l'accès en lecture est restreint
ž De plus, l'algorithme d'encodage D5 est de plus en plus utilisé.
ž Des champs supplémentaires ont été ajoutés à ce fichier afin
de permettre la gestion de l'expiration des mots de passe.
ž Le champ du fichier /etc/passwd destiné à contenir le mot de
passe, est généralement positionné à la valeur « x ».
86
root:$1$15CyWuRM$g72U2o58j67LUW1oPtDS7/:13669:0:99999:7:::
daemon:*:13669:0:99999:7:::
bin:*:13669:0:99999:7:::
sys:*:13669:0:99999:7:::
sync:*:13669:0:99999:7:::
games:*:13669:0:99999:7:::
man:*:13669:0:99999:7:::
nobody:*:13669:0:99999:7:::
sander:$1$Qqn0p2NN$L7W9uL3mweqBa2ggrBhTB0:13669:0:99999:7:::
linda:!:13671:0:99999:7:::
zeina:!:13722:0:99999:7:::
87
ž Le premier champ indique le login de l’utilisateur
ž le deuxième le mot de pass crypté
Ø on peut avoir les caractère * et !.
§ Le caractère ! indique que la connexion est actuellement désactivée
§ le * désigne un compte système qui peut être utilisé pour démarrer les services
ž Nombre de jours entre Janvier 1, 1970, et la date à laquelle le mot de
passe a été dernièrement changé
ž Nombre de jours au minimum avant que le mot de passe peut être
changé
ž Nombre de jours maximum après quoi le mot de passe doit être
changé
ž Nombre de jours avant l'expiration de mot de passe à cette date
l'utilisateur est averti
ž Nombre de jours après l'expiration du mot de passe de ce compte est
le mot de pass est désactivé (si cela se produit, l'administrateur
intervient pour déverrouiller le mot de passe)
ž Nombre de jours entre Janvier 1, 1970, et la date à laquelle le compte
a été désactivé
88
ž La commande passwd permet de changer le mot de passe, et
dispose de plusieurs options.
passwd [-k][-l][-u [-f]] [-d] [-S][nom_user]
nom_user: changement du mot de passe de l'utilisateur donné
passwd nom_user
-f : force le changement de mot de passe à la prochaine connexion
passwd -f nom_user
-d : C'est une façon rapide pour désactiver un mot de passe pour un compte.
passwd -d nom_user
-k : est utilisée pour indiquer que la mise à jour ne devrait être effectuée que
pour le mots de passe.
-l : utilisé pour verrouiller le compte spécifié (en le préfixant par un !)
passwd -l nom_user
-u : déverrouille le mot de passe du compte en supprimant le préfixe !
-S: Cela affiche une information courte sur le statut du mot de passe pour un
compte donné.
89
ž La syntaxe de la commande useradd est la suivante :
useradd [-c comment] [-d homedir] [-g initial_group] [-
G group2,group3,...] [-m] [-s shell] [-u UID] [-o] [-r]
[-e YYYY-MM-DD] [-f inactive_days]
-c : saisie du commentaire.
-d : le répertoire personnel
-g : le groupe de base
-G : groupes supplémentaires pour utilisation avec la
commande newgrp
-m : recopie du /etc/skel dans le répertoire personnel
-s : le shell
-u : choix d'un UID spécifique > val-distribution
-o : l'UID n'est pas unique
-r : UID privilégié système <= val-distribution
-e : date d'expiration du login
-f : délai avant verrouillage si mot de passe non changé
90
ž Exemples:
useradd -m user
useradd -c "login de test" -d
/home/logtest -s /bin/bash -g users -u
123 -m logtest
91
ž La commande usermod modifie les paramètres d’un
compte et permet aussi de le verrouiller
ž Les options sont:
-d rép_perso :
Le nouveau répertoire de connexion de l'utilisateur.
Si l'option -m est fournie, le contenu du répertoire personnel actuel sera
déplacé dans le nouveau répertoire personnel, qui sera créé si
nécessaire
-l login login_name :
Le nom de l'utilisateur passera de login à login_name
92
ž -L :
Verrouiller le mot de passe d'un utilisateur. Cette option ajoute un `!'
devant le mot de passe crypté, ce qui désactive le mot de passe
ž -p mot_de_passe :
changer le mot de passe
ž -s shell :
Le nom du nouveau shell de connexion de l'utilisateur
ž -u uid :
La valeur numérique de l'ID de l'utilisateur.
ž -U:
Déverrouiller le mot de passe d'un utilisateur. Cela supprime le `!' situé
devant le mot de passe crypté.
93
Exemple:
usermod -l ahmed newlogin
usermod –L linda
usermod -g 101 linda
usermod -G groupname username
ž Il faut s’assurer avant d’exécuter cette commande
que l'utilisateur nommé n'est pas en train d'exécuter
un quelconque programme quand cette
commande est exécutée
94
ž La commande userdel supprime le
compte spécifié
userdel -r login
ž Avec l’option –r, les fichiers présents dans
le répertoire personnel de l'utilisateur
seront supprimés en même temps que le
répertoire lui-même
ž Les fichiers situés dans d'autres systèmes
de fichiers devront être recherchés et
éliminés manuellement
95
ž La commande groupadd crée un groupe :
groupadd [-g GID [-o]] [-f] groupe
ž Les options :
-f envoie un message d’erreur si le groupe indiqué existe déjà
-g GID : Cette valeur doit être unique, à moins que l’option -o
ne soit utilisée.
Avec l’option -g, si le groupe indiqué existe déjà, un autre
gid (non utilisé) sera choisi
-r ajoute un groupe système
96
ž La commande groupdel supprime le groupe.
groupdel nom_groupe
ž La commande groupdel modifie les fichiers systèmes, et cause
la suppression de toutes les entrées qui se réfèrent à un groupe.
ž Mais attention, il ne faut pas oublier de changer dans le fichier
/etc/passwd les numéros (GID) du groupe supprimé, si des
utilisateurs y appartenaient.
ž Il est également essentiel de chercher les fichiers et répertoires
de ce groupe pour le changer (dans le cas contraire les fichiers
et répertoires risquent d'être inaccessibles).
ž Il faut vérifier manuellement les systèmes de fichiers pour
s'assurer qu'aucun des fichiers ne reste avec le groupe désigné
97
ž La commande groupmod modifie le
groupe, -n renomme le groupe.
groupmod [-g gid [-o ]] [-n new_group_name]
group
Ø-g gid : La valeur numérique de l'identifiant
du groupe.
§ Tous les fichiers qui ont l'ID de l’ancien groupe
doit être modifiés manuellement pour leur
associer le nouveau groupe
Ø -n new_group group: Le nom du groupe
sera modifié de group en new_group
98
ž Il existe plusieurs commandes qui
permettent de modifier les données d'un
fichier très facilement et avec un temps de
réponse minime malgré la taille des fichiers
traités.
ž Ce sont des commandes très utiles pour les
administrateurs systèmes.
99
ž Modifier les données d'un fichier
ØCoupe un fichier en morceau : split
§ La commande split permet de couper un fichier en
morceau (en plusieurs fichiers), en tapant :
§ Comme exercice vous allez créer les fichiers
fichieraa, fichierab, fichierac, ...
– qui contiendront tous 10 lignes. Le premier fichieraa
contient les 10 premières lignes, ainsi de suite.
100
ž La commande sort permet de trier les
lignes d'un fichier.
§ Soit le fichier carnet-adresse suivant :
§ le premier champ est noté 0, le deuxième 1, ainsi
de suite.
101
ž Les options de sort sont les suivantes :
§ -b ignore les espaces et les tabulations en début
de champ
§ -d tri sur les caractères alphanumériques
(caractères, chiffres et espace) uniquement
§ -r inverse l'ordre de tri
§ -f pas de différence entre minuscule et majuscule
§ -tx Le caractère x est considéré comme
séparateur de champ
§ -u supprime les lignes doublons
§ -n trie sur des chiffres
102
ž En faisant sort sans argument :
Ø Par défaut le trie se fait sur le premier caractère donc dans l'ordre
alphabétique
Ø Si nous voulons trier sur le deuxième champ:
§ nous devons d'abord indiquer que le « : » est le caractère qui sépare deux champs (par
défaut c'est l'espace), avec l'option -t :
§ nous devons ensuite indiquer qu’on veut trier un chiffre avec l'option -n (numérique).
§ il faut marquer qu'on veut trier à partir du second champ (+1) jusqu'au troisième (-2).
§ Soit le résultat suivant :
§ On obtient :
Avant
103
ž Pour trier suivant le 4ème champ (numéro 3, tri
par ordre alphabétique sur le premier
caractère):
Ø en mettant +0, il va effectuer un deuxième tri sur le
premier champ pour les villes qui commencent par
le même caractère
Ø En cas d'égalité du premier tri, on fait un dernier tri
sur le premier caractère du prénom.
ž On peut spécifier la recherche sur un caractère situé
à une position particulière, par exemple à la 2eme
position du 6eme champ :
sort -t: +5.1 /etc/passwd
ž Pour plusieurs critères de tri, il faut spécifier derrière
chaque champ le type de tri à mettre en œuvre
pour ce critère. Par exemple :
sort -t: +0d -1 +2nr -3
Ø triera le 1er champ par ordre dictionnaire, et compléter si
égalité par un tri sur le 3eme champ par ordre numérique
inverse,
sort -t: +4.3n -4.5 +4.0n -4.2
Ø triera du 4eme au 6eme caractère du 5eme champ par ordre
numérique, et du 1er au 3eme caractère du 5eme champ par
ordre numérique, si le premier tri s'est avéré insuffisant.
104
105
ž La commande tr permet de convertir une
chaîne de caractère en une autre de taille
égale.
ž Les options sont les suivantes :
§ -c Les caractères qui ne sont pas dans la chaîne d'origine
sont convertis selon les caractères de la chaîne de
destination
§ -d destruction des caractères appartenant à la chaîne
d'origine
§ -s si la chaîne de destination contient une suite contiguë de
caractères identiques, cette suite est réduite à un caractère
unique
106
ž La commande tr a besoin qu'on lui redirige en entrée
un fichier, le résultat de la conversion s'affichant sur la
sortie standard.
Ø Pour remplacer le : par un # dans le fichier carnet-
adresse, nous taperons :
Ø Pour faire la même chose on peut aussi bien éditer le
fichier avec cat et rediriger par pipe vers tr, en
tapant :
107
ž Pour faire la même chose on peut aussi bien éditer le fichier avec
cat et rediriger par pipe vers tr, en tapant :
ž On peut utiliser des métacaractères. En tapant :
ž Nous allons remplacer les caractères de a à f de minuscule en
majuscule. Soit:
108
ž Soit un fichier très long, et on ne veut visualiser que
la fin, on dispose de la commande tail.
ž La syntaxe est la suivante :
$tail +10 mon-fichier
ž On obtient toutes les lignes du fichier de la 10eme
jusqu'à la fin.
$tail -10 mon-fichier
ž On obtient les 10 dernières lignes à partir de la fin.
On peut indiquer si notre unité est la ligne (par
défaut), le bloc ou le caractère avec l'option –t :
$tail -10 –c mon-fichier
ž On obtient les 10 derniers caractères du fichier.
109
Ø Editer un fichier par le début : head
§ Si on a un fichier très long, et qu’on ne veuille visualiser
que le début, on dispose de la commande head. La
syntaxe est la suivante, si on tape :
$head +10 mon-fichier
§ On obtient toutes les lignes du fichier de la 10eme
jusqu'au début.
$head -10 mon-fichier
§ On obtient les 10 premières lignes à partir du début. On
peut indiquer si l’unité est la ligne (par défaut), le bloc
ou le caractère avec l'option -t
$head -10 mon-fichier
§ On obtient les 10 premiers caractères du fichier.
110
Ø Compter les lignes d'un fichier : wc
§ La commande wc permet de compter le nombre de
ligne d'un fichier, mais aussi le nombre de mot ou de
caractères.
$wc –l mon fichier
§ La commande wc sans option donne à la fois le
nombre de ligne, le nombre de caractères(l'option –c)
et le nombre de mots(l'option -w).
§ Si on veut connaître le nombre de fichier dans un
répertoire, la commande sera donc :
$ls –l | wc -l
111
ØLa commande cut permet d'extraire certains
champs d'un fichier.
Ø Les options sont les suivantes :
§ -c extrait suivant le nombre de caractères
§ -f extrait suivant le nombre de champs
§ -dx Le caractère x est le séparateur de champ
ØAvec la commande cut, contrairement à
sort, le premier champ a comme numéro 1, le
deuxième 2 est ainsi de suite.
112
ž Exemple:
Ø Va extraire les 10 premiers caractères de chaque
ligne, on obtient :
113
ØLa commande :
§ Va extraire les deuxième au 5ème caractère de
chaque ligne.
ØLa commande :
§ Va extraire du 25ème caractère jusqu'à la fin de
chaque ligne.
ØLa commande :
§ Va extraire le premier et 4ème champ, le : fixant le
séparateur de champ.
ØLa commande :
§ Va extraire du 3ème champ jusqu'au dernier
champs
114
ž La commande paste permet la fusion de lignes
de fichiers.
ž Les options sont les suivantes :
Ø -dx Le caractère x définit le séparateur de champ
Ø -s Les lignes sont remplacées par des colonnes
ž Exemple:
Ø Soit le fichier carnet-adresse :
Ø Et le fichier travail :
Ø En tapant la commande :
Ø On obtient:
115
ØCette commande permet d'extraire les lignes
communes à deux fichiers
ØSoit le fichier carnet adresse1 et carnet-adresse2
ØLa commande :
$comm carnet-adresse1 carnet-adresse2
ØNous donnera :
116
ž La commande cmp indique si deux fichiers
sont identiques.
ž En tapant :
$cmp fichier1 fichier2
ž Si les deux sont identiques, la commande ne
génère aucune sortie
ž s'ils sont différents la commande indique la
position de la première différence (ligne et
caractère), avec une sortie du genre :
$fichier1 fichier2 differ :bytes 34, line 2
117
ž Cette commande permet de rechercher les
différences entre deux fichiers.
ž La syntaxe est la suivante :
Ødiff fichier1 fichier2
ž diff fait en sorte de donner des indications
pour que le fichier1 soit identique au fichier2.
ž Soit le fichier carnet-adresse et carnet-
adresse2
ž La commande :
ž Génère comme sortie :
118
ž Ce qui nous indique que pour carnet-adresse
soit identique à carnet-adresse2,:
Ø il faut que la deuxième ligne du premier fichier soit
échangée (c pour change) contre la ligne du
second.
Ø Il faut aussi supprimer (d pour delete) la cinquième
ligne du premier fichier.
ž Dans d'autres exemples, on pourrait avoir aussi
une sortie du genre : 10,15c 12,17
Ø ce qui signifie que pour que le premier fichier soit
identique au second, les lignes 10 à 15 doivent
intégralement échangées contre les lignes 12 à17 du
second fichier.
119
ž Les expressions régulières sont aussi des suites de
caractères permettant de faire des sélections. Elles sont
utilisé avec certaines commandes comme grep.
ž Les différentes expressions régulières sont :
Ø ^ début de ligne
Ø . un caractère quelconque
Ø $ fin de ligne
Ø x* zéro ou plus d'occurrences du caractère x
Ø x+ une ou plus occurrences du caractère x
Ø x? une occurrence unique du caractère x
Ø [...] plage de caractères permis
Ø [^...] plage de caractères interdits
Ø  {n} pour définir le nombre de répétition n du caractère
placé devant
Ø (définition d'une sous-expression )
§ (accessible ensuite par 1, 2, …)
120
ž l'expression [a-z][a-z] * cherche les lignes contenant au
minimum un caractère en minuscule. [a-z] caractère permis,
[a-z]* recherche d'occurrence des lettres permises.
ž L'expression ^[0-9] {4}$ a pour signification, du début à la
fin du fichier $, recherche les nombres [0-9] de 4 chiffres 
{4}.
ž /[a2m]/ a, 2 ou m
ž /[a-z]/ une lettre minuscule
ž /[02-57]/ 0, 2, 3, 4, 5 ou 7
ž /[a-d5-8X-Z]/ a, b, c, d, 5, 6, 7, 8, X, Y ou Z
ž /[0-5-]/ 0, 1, 2, 3, 4, 5 ou -
ž /[^0-9]/ pas un chiffre
ž /[^a-zA-Z]/ pas une lettre
ž /[012^]/ 0, 1, 2 ou ^
ž /^abc/ ligne commençant par abc
ž /[a-z0-9]$/ ligne finissant par une lettre minuscule ouun
chiffre
ž /^$/ ligne vide
121
ž La commande grep
Ø La commande grep permet de rechercher une chaîne
de caractères dans un fichier. Les options sont les
suivantes :
§ -v affiche les lignes ne contenant pas la chaîne
§ -c compte le nombre de lignes contenant la chaîne
§ -n chaque ligne contenant la chaîne est numérotée
§ -x ligne correspondant exactement à la chaîne
§ -l affiche le nom des fichiers qui contiennent la chaîne
Ø Exemple avec le fichier carnet-adresse :
Ø La commande :
$grep ^[g-n] carnet-adresse
Permet d’obtenir toutes les lignes commençant par les caractères
compris entre a et d.
$grep Brest carnet-adresse
Permet d’obtenir les lignes contenant la chaîne de caractère Brest.
122
ž Recherche de fichiers: La commande find
§ La commande find permet de retrouver des fichiers à
partir de certains critères.
§ La syntaxe est la suivante :
§ Les critères de recherche sont les suivants :
– -name recherche sur le nom du fichier,
– -perm recherche sur les droits d'accès du fichier,
– -links recherche sur le nombre de liens du fichier,
– -user recherche sur le propriétaire du fichier,
– -group recherche sur le groupe auquel appartient le fichier,
– -type recherche sur le type (d=répertoire, c=caractère, f=fichier
normal),
– -size recherche sur la taille du fichier en nombre de blocs (1
bloc=512octets),
– -atime recherche par date de dernier accès en lecture du fichier,
– -mtime recherche par date de dernière modification du fichier,
– -ctime recherche par date de création du fichier.
123
ž La commande find doit être utilisé avec
l'option -print.
ž Sans l'utilisation de cette option, même en
cas de réussite dans la recherche, find
n'affiche rien à la sortie standard
ž La commande find est récursive, c'est à dire
où qu’on tape, il va aller scruter dans les
répertoires, et les sous répertoires qu'il
contient, et ainsi de suite.
124
ØPour chercher un fichier dont le nom contient la
chaîne de caractères theme à partir du
répertoire /usr, on doit taper :
$find /usr –name "theme" –print
ØPour rechercher tous les fichiers se terminant par
.c dans le répertoire /usr, on tape :
$find /usr –name " *.c " –print
§ On obtient toute la liste des fichiers se terminant
par .c sous les répertoires contenus dans /usr (et
dans /usr lui même).
125
Ø Recherche suivant la date de dernière modification
§ Pour connaître les derniers fichiers modifiés dans les 3
derniers jours dans toute l'arborescence (/), on tape :
Ø Recherche suivant la taille
§ Pour connaître dans toute l'arborescence, les fichiers
dont la taille dépasse 1Mo (2000 blocs de 512Ko), on
tape :
Ø Recherche combinée
§ On peut chercher dans toute l'arborescence, les fichiers
ordinaires appartenant à olivier, dont la permission est
fixée à 755, on obtient :
find / -size 1M -print
126
ž On peut combiner les critères avec des opérateurs
logiques :
Ø (critère1 -a critère2) correspond au et logique,
Ø !critère non logique,
Ø  (critère1 -o critère2) ou logique,
127
ž Recherche en utilisant les opérateurs logiques
Ø Si on veut connaître les fichiers n'appartenant pas à
l'utilisateur olivier, on tape :
§ ! -user olivier, est la négation de -user olivier, c'est à dire c'est
tous les utilisateurs sauf olivier.
Ø Recherche des fichiers qui ont pour nom a.out et des
fichiers se terminant par .c. On tape :
§ On recherche donc les fichiers dont le nom est a.out ou les
fichiers se terminant par *.c, une condition ou l'autre.
Ø Recherche des fichiers qui obéissent à la fois à la
condition a pour nom core et à la condition b une
taille supérieure à 1Mo.
128
ž Une fonction intéressante de find est de pouvoir
être utilisé avec d'autres commandes UNIX.
ž Par exemple:
Find . –type f –print | grep ¢*.conf¢
ž En tapant cette commande on rechercher
dans le répertoire courant tous les fichiers se
terminant par .conf
129
ž Bien que la liste ne soit pas exhaustive, vous
pouvez constater la précision avec laquelle find
permet de trouver et afficher les informations.
Mais cela ne s'arrête pas là ! Si nous avons
déployé tous ces efforts pour trouver nos fichiers
et/ou nos répertoires, c'est pour en faire
quelque chose.
Ø les copier, les déplacer, les supprimer, changer leurs
droits d'accès, etc
ž En plus de nous aider dans la recherche de nos
précieux fichiers, find nous permet d'enchaîner
notre recherche avec une action permettant
d'exploiter les éléments trouvés.
130
ž Le paramètre -exec nous permet cet
enchaînement en exécutant n'importe quelle
commande du shell sur les fichiers issus de la
recherche.
ž Supposons par exemple que nous souhaitions
supprimer tous les fichiers objets (*.o) d'un projet.
Nous n'aurions qu'à taper cette commande :
ž find projet/src/ -name "*.o" -exec rm -f {} ;
Ø Nous utilisons ici la commande rm avec son
paramètre -f pour ne pas avoir de confirmation à
donner.
Ø les accolades représentent l'occurence de chaque
fichier trouvé et l'antislash et le point virgule sont là
pour clôturer la commande.
131
ž Introduction
Ø Un système Unix est multitâche.
Ø Cela signifie qu’à tout instant, plusieurs programmes
différents peuvent fonctionner en même temps sur la
machine.
Ø Évidemment, cela est physiquement impossible sur
les machines dotées d’un seul processeur.
Ø Le noyau (cœur du système) consacre alors
quelques fractions de seconde tour à tour à tous les
programmes actifs, ce qui à l’échelle de temps d’un
utilisateur humain donne une illusion de parallélisme,
de simultanéité
132
ž On appelle « processus » une instanciation d’un
programme en cours de fonctionnement.
ž À chaque processus est attaché un « code » (le code
du programme) et des données (sur lesquelles il
travaille).
ž Chaque processus reçoit une portion de mémoire
dédiée, à laquelle aucun autre processus ne peut
accéder.
ž Il la rend au système à l’issue de son exécution.
ž Il s’exécute avec les droits de l’utilisateur qui l’a
invoqué, sauf exceptions.
ž Le processeur physique commute entre les processus,
sous la direction d’un ordonnanceur.
133
Ø Dans le cas d’un système à temps partagé, tous les
processus progressent dans le temps mais un seul
s’exécute à la fois.
Ø La vitesse d’exécution des processus ainsi que
l’ordonnancement peut changer si on exécute les
processus à nouveau dû à l’état du système.
134
Ø Un numéro de processus unique PID (Process ID) :
chaque processus Unix est numéroté afin d’être
identifié par rapport aux autres processus.
§ Le premier processus lancé sur le système est le processus
init qui n'a pas de père et qui a pour PID 1.
§ Lancer plusieurs fois le même programme donne
différents PID.
135
Ø Un numéro de processus parent PPID (Parent Process
ID) : identité du processus père (créateur).
§ Un processus peut lui même créer un autre processus, il
devient donc un processus parent ou père, et le
nouveau processus, un processus enfant.
§ Ce dernier est identifié par son PID, et le processus père
par son numéro de processus appelé PPID (Parent
Process Identification).
§ Le premier processus est le seul qui ne suit pas cette
règle.
136
ž Un numéro d’utilisateur UID et numéro de
groupe et GID :
Ø C’est utile pour que le système sache si le
processus a le droit d’accéder à certaines
ressources ou non.
Ø Les processus fils héritent de ces informations.
ž Priorité :
Ødans un environnement multitâche, les processus
ne possèdent pas la même priorité.
ØLes processus de haute priorité sont traités en
premier (c’est la plus petite valeur).
137
ž Durée de traitement
ØCette durée correspond au temps d’exécution
écoulé depuis le dernier réveil du processus.
ØC’est l’ordonnanceur du système qui gère les
priorités et le temps d’exécution.
ž Répertoire de travail actif
Øà son lancement, le répertoire courant (celui
depuis lequel le processus a été lancé) est
transmis au processus.
138
ž Fichiers ouverts
Øcorrespond à la table des descripteurs des
fichiers ouverts.
ØPar défaut au début seuls trois sont présents : 0,
1 et 2 (les canaux standards).
ØA chaque ouverture de fichier ou de nouveau
canal, la table est mise à jour.
ØA la fermeture du processus, les descripteurs
sont fermés.
139
Ø Terminal d’attache TTY :
§ le terminal auquel est attaché le processus.
Ø État du processus STATE :
§ endormi, en attente, en exécution, etc.
Ø Date de lancement STIME :
§ date de lancement du processus
Ø Un processus maintient deux propriétaires :
§ un propriétaire réel, qui représente l’utilisateur qui a créé ce
processus,
§ et un propriétaire effectif, qui code les privilèges dont dispose
ce processus (=réel sauf si le propriétaire a été changé par
setuid).
§ On trouve d’autres informations comme l’UID effectif et réel
ainsi que le GID effectif et réel.
140
ž Durant son temps de vie le processus peut changer d’états et passer par
divers états, certains états de ces états existent dans la plupart des
systèmes d'exploitation :
Ø Initialisation (created ou new) :
§ C'est le premier état d'un processus. Il y attend que l'ordonnanceur
le place dans l'état prêt, ce qui peut prendre plus ou moins
longtemps.
Ø Prêt ou Exécutable (ready, waiting ou runnable) :
§ Dans cet état, le processus a été chargé en mémoire centrale et
attend son exécution sur le processeur.
§ Les processus disponibles sont rangés dans une file ; les autres, ceux
qui attendent quelques chose (données provenant du disque dur,
une connexion internet, etc.) ne sont pas pris en compte.
§ Cette file d'attente (ready queue) est gérée par l'ordonnanceur.
§ le processus est en exécution mais il est en attente de libération du
processeur qui est utilisé par un processus actif.
§ Pour l'utilisateur, ceci est invisible car l'opération est très rapide.
141
ž Élu ou Actif (running) :
Ø Le processus est en cours d'exécution par le processeur le
processus dispose de toutes les ressources dont il a besoin.
Ø le processus utilise le processeur et est donc en train de réaliser
des actions pour lequel il a été conçu.
ž Endormi ou Bloqué (blocked) :
Ø Le processus a été interrompu ou attend un événement (la fin
d'une opération d'entrée/sortie, un signal, ...).
Ø Par exemple, un processus peut attendre un événement pour
redevenir Actif, comme par exemple, que l'on appuie sur une
touche lors de l'affichage d'un message.
ž Terminé (terminated) :
Ø Le processus est terminé, c'est-à-dire soit le résultat est connu,
soit le programme a été forcé de s'arrêter.
142
ž D’autres états peuvent aussi être possible :
Ø Swappé : Lorsque qu'un processus est transféré de la mémoire
centrale dans la mémoire virtuelle, il est dit « swappé ».
§ Un processus swappé peut être dans un état endormi ou prêt.
Ø Préempté : L'ordonnanceur a décidé de suspendre l'activité
d'un processus.
§ Par exemple, un processus qui consomme trop de temps CPU finira
par être préempté.
Ø Zombie : le processus vient de réaliser un exit, il apparaît
uniquement dans la table des processus où il est conservé le
temps pour son processus père de récupérer le code de retour
§ un processus zombi est un processus terminé mais le système ou le
processus parent n'en a pas été informé
143
ž Exécution en espace utilisateur (user mode):
Øle processus n’accède qu’à son espace
d’adressage et exécute des instructions du
programme correspondant.
Ø Seul certaines instructions sont disponibles
ž Exécution en espace noyau (kernel mode):
ØLe processus exécute des instructions du noyau
et non pas du programme en cours et
l'exécution du processus n'est pas limité.
Ø Il peut accéder à des données externes à son
espace d’adressage
144
ž Un processus peut donc avoir les états suivants :
Ø – R, « Running » en train de s’exécuter ;
Ø – r, « runnable », prêt à s’exécuter ;
Ø – W, «Waiting », en attente d’un événement ;
Ø – Z, « Zombie », mort.
145
ž Lorsqu’un processus est dans l’état « en train de
s’exécuter » R, il peut exécuter des instructions du
processeur
ž Parfois, le noyau peut satisfaire l’appel système
immédiatement par exemple, un appel à gettimeofday
calcule l’heure actuelle et retourne immédiatement au
code utilisateur.
ž Souvent, cependant, un appel système demande une
interaction prolongée avec le monde réel; un processus
exécutant un tel appel système est mis en attente d’un
événement (état W), et ne sera réveillé (passé à l’état «
prêt à s’exécuter » r) que lorsque l’appel système sera
prêt à retourner.
ž Un tel appel système est dit bloquant.
146
ž Considérons par exemple le cas d’un appel système read
demandant des données stockées sur le disque.
ž Au moment ou le processus effectue l’appel système, le contrôleur
de disque est programmé pour lire les données, et le processus
appelant est mis en attente de l’événement une « requête de
lecture terminée ».
ž Quelques millisecondes plus tard, lorsque la requête aura abouti, le
processus sera réveillé et remis dans l’état «prêt à s’exécuter ».
147
ž Les processus p1 et p2 sont lancés depuis deux agences
différentes :
ž À noter que :
Ø les variables courant et nouveau sont locales à chaque processus
Ø les deux processus se déroulent en parallèle.
Ø L’exécution des opérations peut être entrelacée dans un ordre
quelconque, à condition de respecter l’ordre local pour chacun
des processus
processus p1 processus p2
1. courant = lire_compte (1867A)
2. nouveau = courant + 1000
3. ecrire_compte (1867A, nouveau)
1. courant = lire_compte (1867A)
2. nouveau = courant + 3000
3. ecrire_compte (1867A, nouveau)
148
ž Exemples d’exécution
Ø exécution 1 : p2.1 ; p2.2 ; p2.3 ; p1.1 ; p1.2 ; p1.3
Ø exécution 2 : p1.1 ; p1.2 ; p2.1 ; p2.2 ; p2.3 ; p1.3
Ø quels sont les résultats ? que peut-on en conclure ?
2.1. courant = lire_compte (1867A)
2.2. nouveau = courant + 3000
2.3. ecrire_compte (1867A, nouveau)
1.1. courant = lire_compte (1867A)
1.2. nouveau = courant + 1000
1.3. ecrire_compte (1867A, nouveau)
1.1. courant = lire_compte (1867A)
1.2. nouveau = courant + 1000
2.1. courant = lire_compte (1867A)
2.2. nouveau = courant + 3000
2.3. ecrire_compte (1867A, nouveau)
1.3. ecrire_compte (1867A, nouveau)
149
ž Accès concurrent aux variables partagées ?
ž Pour cela il faut :
Ø Assurer que l’ensemble des opérations (consultation
+ mise à jour) est exécutée de manière indivisible
(atomique)
Ø pas d’interférences possibles de la part d’autres
opérations exécutées en parallèle
Ø Si A1 et A2 sont atomiques, le résultat de l’exécution parallèle
de A1 et A2 ne peut être que celui de A1 ; A2 ou de A2 ; A1.
Ø On dit aussi que la séquence d’actions 1; 2; 3 (dans p1 et dans
p2) est une section critique : elle doit être exécutée en exclusion
mutuelle (un seul processus au plus peut être dans sa section
critique à un instant donné).
150
ž Déclaration et initialisation de variables communes
ž Les opérations “entrée en section critique”, ”sortie de
section critique” doivent garantir l’exclusion mutuelle.
ž Il existe plusieurs modes de réalisation d’une section
critique : par attente active, en utilisant des primitives
spéciales
processus p1
...
entrée en section critique
section critique
sortie de section critique
...
processus p2
...
entrée en section critique
section critique
sortie de section critique
...
151
ž On peut visualiser les processus qui tournent sur une
machine avec la commande : ps (options) : -e
(affichage de tous les processus) et -f (affichage
détaillée).
ž ps -ef donne :
Ø C : facteur de priorité (-20 plus élevée à +19 la plus petite, défaut 0)
Ø STIME : correspond à l'heure de lancement du processus
Ø TTY :correspond au nom du terminal
Ø TIME : correspond à la durée de traitement du processus
Ø COMMAND correspond au nom du processus.
152
ž liste des processus BSD
-a : processus détenus par les autres utilisateurs
-u : nom du propriétaire du processus
-x : processus sans terminal associé
-l : description complète
-t : terminal particulier
ž liste des processus Système V
-f : ou l : description plus ou moins longue
-e : liste tous les processus
-p : processus dont le numéro suit l'option p
-t : processus attachés au terminal spécifié
-u : processus appartenant au propriétaire dont le
nom ou l'UID est donné
153
ž $ ps axu :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 1104 464 ? S 00:39 0:03 init
root 2 1.1 0.0 0 0 ? SW 00:39 10:14 [kapmd]
root 3 0.0 0.0 0 0 ? SW 00:39 0:00 [kswapd]
root 4 0.0 0.0 0 0 ? SW 00:39 0:00 [kflushd]
bin 157 0.0 0.2 1200 396 ? S 00:40 0:00 portmap
ž STAT : indique l'état du processus :
§ R : actif ( running)
§ S : non activé depuis moins de 20 secondes (sleeping)
§ I : non activé depuis plus de 20 secondes (idle)
§ T : arrêté (suspendu)
§ Z : zombie
ž %CPU: Taux de temps CPU utilisé par le processus.
ž %MEM: Taux de mémoire utilisé par le processus.
ž VSZ: total de mémoire utilisé par le process (en taille de bloc 1K
contrairement au pourcentage utilisé %MEM)
ž RSS: Real Set Size, total de mémoire physique utilisé par le processus.
154
ž Processus permanents
Ø Certains processus sont permanents, c'est à dire qu'ils sont lancés au
démarrage du système et arrêtés uniquement à l'arrêt du système.
Ø On appelle ces processus des daemons
ž Changer la priorité d'un processus
Ø Les processus tournent avec un certain degré de priorité, un processus
plus prioritaire aura tendance à s'accaparer plus souvent les ressources
du système pour arriver le plus vite possible au terme de son exécution.
Ø C'est le rôle du système d'exploitation de gérer ces priorités.
Ø On dispose de la commande nice pour modifier la priorité d'un
processus. La syntaxe est la suivante :
$nice –valeur commande
Ø Plus le nombre est grand, plus la priorité est faible.
Ø Par exemple une valeur de 0 donne, la priorité la plus haute 20 donne
la priorité la plus faible.
Ø La fourchette de valeur dépend de l'UNIX qu'on utilise.
155
$nice -5 ps –ef
Ø Généralement on utilise nice sur des commandes qui prennent du
temps, sur des commandes courantes l'effet de nice est imperceptible.
Ø On l'utilisera par exemple pour compiler un programme.
ž Arrêter un processus
Ø Un utilisateur ne peut arrêter que les processus qui lui appartiennent
Ø Seul l'administrateur système a le droit d'arrêter un processus ne lui
appartenant pas.
Ø On peut interrompre aussi un processus depuis un terminal père par:
§ <CTRL><C>: stoppe le processus
§ <CTRL><Z>: suspend le processus
§ <CTRL><D>: fin du terminal (et donc du processus)
156
ž Pour lancer une commande quelconque, il faut saisir le nom après
le prompt du shell, tant que la commande n'est pas terminée, on
n’a plus la main au niveau du shell, on ne dispose plus du prompt.
ž Si la commande prend un certain temps, le shell ne donnera pas la
main tant que la commande n'est pas terminée, on est obligé de
lancer un autre shell, pour taper une autre commande.
ž On dispose d'une technique simple qui permet de lancer une
commande à partir d'un shell, et de reprendre aussitôt la main.
ž Il suffit de rajouter un & à la fin de commande.
ž Celle-ci se lancera en " tâche de fond ", et on revient directement
au prompt du shell.
ž En tapant une commande en tâche de fond, on aura à
l'affichage:
157
ž A la suite de la saisie de la commande suivie d'un &, le shell donne
immédiatement la main, et affiche le numéro du PID du processus
lancé.
ž En lançant une commande à partir du shell sans le & à la fin, et si
celle-ci prend du temps à rendre la main, on peut faire en sorte
qu'elle bascule en tâche de fond, pour reprendre la main.
ž $progexec
Ø On peut basculer le programme progexec en tâche de fond en tapant,
CTRL+Z, il va afficher :
311 Stopped
Ø 311 étant le PID du processus progexec . On Tape ensuite bg (pour
background), ce qui s'affiche c’est :
[311]
Ø Ca y est le processus progexec est en tâche de fond et le shell rend la main.
158
ž La commande sleep(n) :
Ø bloque le processus pendant n secondes
ž La commande pause :
Ø bloque le processus jusqu’à la réception d’un signal par un autre processus
ž Créer un Processus
Ø L’appel système fork permet de créer un processus
Ø Le processus créé (fils) est un clone (copie conforme) du processus
créateur (père)
Ø Le père et le fils ne se distinguent que par le résultat rendu par fork
§ pour le père : le numéro du fils (ou -1 si création impossible)
§ pour le fils : 0
ž Exemple:
if (fork() != 0) {
Printf(" je suis le pèren");}
else {
Printf(" je suis le filsn");}
159
ž Un signal est un événement envoyé à un processus par
un autre processus.
ž Vis-à-vis du processus destinataire, il est asynchrone(non
lié aux étapes de son exécution).
ž Il existe un certain nombre de signaux prédéfinis
correspondant à différentes actions requises de la part
du destinataire
ž Exemple :
Ø kill (pid, sig) : envoie le signal sig au processus pid l’envoi d’un signal
cause la terminaison du processus récepteur (d’où le nom)
Ø On dispose de la commande kill pour arrêter un processus.
Ø Pour arrêter un processus, il faut connaître son PID (commande ps),
puis écrire :
$Kill -9 PID
160
ž Les 3 plus importants:
Ø SIGHUP –valeur 1 –Fin de session
Ø SIGINT –valeur 2 –Interruption du processus
Ø SIGKILL –valeur 9 –Interruption brutale du processus
Ø Émission d’un signal par «kill -<n°> <processus»
§ Exemple : kill –9 PID
ž Synchronisation entre un processus père et ses
fils
Ø Wait(statut) suspend l'exécution du processus courant jusqu'à ce
qu'un enfant se termine, ou jusqu'à ce qu'un signal à intercepter
arrive.
Ø wait renvoie le pid du fils.
Ø Exemple : le père attend la fin d’un fils spécifié (dont le numéro
est dans childpid) :
while (childpid != wait(status));
161
ž Nous allons étudier dans ce chapitre nous allons
comprendre les mécanismes de base de
l’interprétation des commandes par le shell.
ž Les variables
Ø variables définies par l’utilisateur
Ø variables d’environnement,
Ø variables spéciales et réservées par le shell lui-même.
162
ž Nous appellerons variable simple toute variable définie
par l’utilisateur pour ses propres besoins.
ž Mécanismes d’affectation:
Ø On peut affecter une chaîne de caractères , ou un entier aux
variables, toute affectation répond à la syntaxe suivante:
variable=valeur
Ø Attention, il n’y a pas d’espace de part et d’autre du signe «=».
ž Règle de base
Ø Pour définir le contenu d'une variable, on écrit
simplement son nom, sans le signe $ ;
Ø Tandis que pour utiliser le contenu d'une variable, on
fait précéder son nom du signe $.
163
ž Pour désigner une variable, il suffit d’utiliser la syntaxe suivante:
$variable
Ø Si la variable doit être suivie d’une valeur autorisée (exemple de
nom de variable auquel on ajoute séquentiellement un
nombre), la notation est alors la suivante:
${variable}nombre -> jour1
ž Affichage d’une variable:
Ø La commande:
$echo [-n] [texte] $variable
Ø permet d’afficher la valeur de la variable.
Ø On peut aussi l’intégrer dans du texte.
Ø L’option –n permet d’éviter le passage à la ligne après
l’affichage.
164
Ø Il est parfois utile de laisser l’utilisateur entrer la valeur
de ses variables.
Ø La commande:
read variable
Ø lit les valeurs sur l’entrée standard.
Ø Le premier mot est affecté la première variable et
ainsi de suite.
Ø S’il y a plus de variables que de mot saisis, le shell
affecte aux dernières variables la chaîne vide.
read nom prenom age
165
ž D’ordinaire, une variable n’est utilisée que dans le shell-
script où elle reçoit son affectation, si on souhaite
l’utiliser pour les programmes appelés ultérieurement,
on doit l’exporter.
ž La commande:
export variable
ž Permet de rendre global (visible pour des shells
secondaires) des variables qui, par défaut, sont locales
au shell courant.
ž Exemple:
$ var=“127.0.0.1”
$ export var
$ echo $var
$127.0.0.1
166
ž Visualisation des variables disponibles
Ø La commande: printenv
§ affiche les valeurs des variables de l’environnement du processus en
cours, c’est à dire celles qu’il a reçues et celles qu’il a envoyées.
Ø Dans un script la commande: set affiche les valeurs des
variables disponibles, c’est à dire toutes les variables
ž Supprimer une variable:
ž La commande: unset variable
ž supprime la variable de la liste des variables disponibles.
167
ž Substitutions: pouvoir effectuer un certain nombre de
substitutions lors de l’affichage:
Ø $paramètre ® affiche la valeur courante de paramètre
Ø ${paramètre} ® affiche la valeur courante de paramètre et
autorise la concaténation,
Ø ${paramètre:-valeur} ® affiche la valeur courante de
paramètre si elle est non nulle, sinon affiche valeur,
Ø ${paramètre:=valeur} ® affiche la valeur courante de
paramètre si elle est non nulle, sinon affiche valeur et affecte à
paramètre valeur,
Ø ${paramètre:?valeur} ® affiche la valeur courante de
paramètre si elle est non nulle, sinon on écrit valeur sur la sortie
standard et on sort.
Ø Si valeur est omise, alors, on écrit sur la sortie standard le
message: «paramètre : parameter null or not set»,
168
ž Les valeurs des variables sont accessibles aux
commandes lancées par le shell.
ž L'ensemble de ces valeurs constitue
l'environnement.
ž Quelques variables d'environnement:
Ø SHELL : contient le nom de votre shell.
Ø HOME : contient le nom de votre répertoire personnel.
Ø USER : contient votre nom de login.
Ø LOGNAME : la même chose que USER.
Ø PATH : contient une liste de répertoires dans lesquels le shell va
chercher les commandes.
ž On accède à leur valeur en les faisant précéder d’un «$»
ž Pour visualiser toutes les variables d’environnement: «env»
169
ž Un certain nombre de variables sont utilisées
dans les scripts afin de déterminer et de séparer
les paramètres:
Ø $#: donne le nombre d’arguments passés au script,
Ø $*: donne la liste des paramètres passés au script=« $1 $2
…$n"
Ø $n: valeur du n-ième argument du script,
Ø $@: équivalent à $*, mais «$@» signifie: "$1", "$2",..., "$n"
Ø $$: le numéro de processus du script,
Ø $!: le numéro de processus du dernier programme lancé
en background,
Ø $?: le code de retour du dernier programme lancé.
170
ž La commande Test est utilisée dans de nombreux cas par les
structures de contrôle du shell.:
test condition && code1 || code2
ou
[ condition ] && code1 || code2
ž Cette commande renvoie 0 si la condition est vérifiée et une
valeur différente de 0 sinon.
ž Dans la deuxième syntaxe, il faut faire attention à mettre des
espaces entre les crochets et la condition.
ž code1 && code2: exécute code1, si le code de retour est OK alors
on exécute code2,
ž code1 || code2 : exécute code1, si le code de retour est mauvais
alors on exécute code2.
171
ž Options de teste
Ø test -w fichier : vrai si l’utilisateur a le droit d’accès en écriture sur
fichier (s’il existe),
Ø test -x fichier: vrai si l’utilisateur a le droit d’accès en exécution
sur le fichier (s’il existe),
Ø test -c fichier: vrai si le fichier est un fichier caractère spécial (et
s’il existe),
Ø test -b fichier: vrai si le fichier est un fichier bloc (et si il existe),
Ø test -s fichier: vrai si fichier n’est pas vide,
Ø test -L fichier: vrai si fichier est un lien symbolique,
Ø test fichier1 -nt fichier2: si fichier a été modifié plus récemment
que fichier2,
Ø test -n chaîne: vrai si chaîne n’est pas vide,
Ø test -z chaîne: vrai si chaîne est vide,
172
ž Options de teste
Ø [ nb1 -eq nb2 ]: vrai si les deux nombres entiers nb1 et nb2 sont
égaux, on peut remplacer eq par -ne (différent), -gt (supérieur),
-ge (supérieur ou égal), -lt (inférieur), -le (inférieur ou égal).
Ø [ chaine1 = chaine2 ]: vrai si les deux chaînes sont identiques,
Ø [ chaine1 != chaine2 ]: vrai si les deux chaînes ne sont pas
identiques,
Ø -a: opérateur logique et,
Ø -o: opérateur logique ou,
Ø !: négation logique
ž Exemple:
test -f fichier && echo "fichier "|| echo "pas fichier"
test ( -d rep -o -f fic ) -a $variable=“2“ && echo “ok” || echo “non ok”
173
ž On appelle script shell est un fichier qui contient des
noms de commandes et des instructions internes au
shell.
ž Les commandes contenues dans le script sont alors
lancées comme si l’utilisateur les tapait sur la ligne de
commande.
ž Comment écrire un script:
Ø Ouvrir un éditeur (kate)
Ø Écrire en première ligne:
§ #/bin/bash (shell utilisé: bourne shell)
Ø Écrire les autres instructions
Ø Sauvegarder dans un fichier avec extension .sh
174
ž Lancement par le nom du shellscript (votre script)
Ø Si l’utilisateur a le droit de lecture et d’exécution sur le shellscript,
il peut le lancer en tapant simplement son nom.
Ø Il se comporte alors comme n’importe quelle commande.
Ø il est bon de lancer le script comme suit: ./shellscript
ž Lancement par appel explicite du shell
Ø Si le script porte un attribut de lecture, on peut le lancer par
appel explicite du shell :
Ø /bin/ksh nom_script Ou /bin/sh nom_script
Ø Dans ce cas, un nouveau shell est lancé, celui-ci lit les
commandes du script et les fait exécuter comme si elles avaient
été tapées au clavier.
ž Lancement par appel de la commande interne «.»
Ø La dernière solution consiste à faire précéder le nom du fichier
par un «.»: . shellscript
175
ž if..then..else..fi:
ž Syntaxe:
if test
then liste_de_commandes
else liste_de_commandes
fi
ž teste la valeur renvoyée par le test après le mot
if et en fonction de ce code, lance la liste de
commande appropriée (si le code=0 alors on
exécute les commandes après le mot then
sinon les commandes après le mot else).
176
ž if..then..else..fi:
ž Exemple:
if [ -r $1 ] ; then echo "vous avez le droit de
lire le fichier $1 "
else
echo "vous n'avez pas le droit de lire le fichier
$1"
fi
ž il est fréquent de remplacer le saut de ligne qui
se trouve après la condition par un caractère
point-virgule
ž $1 est le premier argument passé au script lors
de son exécution
177
ž if..then..else..fi:
ž Exemple:
Ø Voici donc un exemple implémentant la commande
"let" pour déterminer si une variable est bien de type
"entier" :
#!/bin/sh
var=$1
if let $var 2>/dev/null
then
echo "$var numérique"
else
echo "$var non numérique"
fi
178
ž if..then..else..fi:
ž Syntaxe:
ØIl existe une variante pratique de if:
if condition
then liste_commandes
[elif liste_coonditions
then
liste_commandes]
[else liste_commandes]
fi
179
ž if..then..else..fi:
ž Exemple:
¤ if test -f $1
then file $1
else
echo " le fichier n'existe pas "
fi
¤
180
ž Exemple: programme qui supprime
interactivement selon la réponse
echo -n "Suppression interactive ?"
read reponse
if test $reponse=" oui "
then rm -i $1
else rm $1
fi
181
ž case..esac:
Ø Nous avons aussi besoin de structures permettant de
faire des chois multiples:
case mot in
modèle 1) liste_commande;;
..
modèle n) liste_commande;;
*) liste_commande;;
esac
Ø Le premier modèle rencontré qui répond à la valeur
de mot indique la liste de commandes à exécuter.
Ø Si mot ne correspond à aucun modèle, l’instruction
se poursuit jusqu’à la condition *) et si celle-ci n’existe
pas, jusqu’au esac.
182
ž case..esac:
Ø Les modèles sont de la forme:
§ valeur1 | valeur2 | ... | valeurn
§ Dans les modèles, on peut utiliser les caractères
spéciaux *, ?, [] comme dans le cas de la recherche
d’un fichier.
§ Exemple: programme qui supprime interactivement
selon la réponse
echo -n "Suppression interactive ?"
read reponse
case $reponse in
o|O|oui|OUI) rm -i $1;;
n|N|non|NON) rm $ 1;;
*) echo "Réponse non valide";;
esac
183
ž for..do..done:
Ø Certains traitement sont répétitifs, une commande
doit être lancée pour un grand nombre de
paramètres du shellscript.
Ø La syntaxe :
for variable [in mots...]
do
liste_commandes
done
Ø variable prend tour à tour toutes les valeurs de la liste
des mots (qui suivent in).
Ø Pour chacune de ces valeurs, la liste de commandes
est exécutée.
184
ž si la liste est omise, variable prend alors les
valeurs $1, $2,…
ž Exemple: programme qui recopie tous les
fichiers du répertoire courant dans une autre :
for i in ` *.c `
do
cp $i rep/ //il faut créer le répertoire avant
Done
for i in `ls`
do
cp $i dir/
echo "$i copie "
done //N'oublier pas les ` qui force l'exécution du ls.
185
for i in 1 3 4 6
do
echo $i
done
ž for ((i=0 ; $i<=10 ; i++)); do echo $i; done
186
ž while..do..done:
While liste_de_conditions
do
liste_de_commandes
done
ž exécute la liste de commandes tant que
le code retour de les conditions sont
vraies ( 0).
187
ž while..do..done:
ØExemple: programme qui affiche tous les
paramètres d’un script (un par ligne)
while test $1
do
echo $1
shift
done
188
ž until..do..done:
ØCette commande est semblable à la
précédente à la différence près que la sortie
de la boucle s’effectue si la liste de
conditions qui suit until renvoie 0.
until liste_de_conditions
do
liste_de_commandes
done
189
ž until..do..done:
ØExemple:
echo "Tapez le mot de passe : "
read password
until test $password = "mot de passe correct"
do
echo "Mot de passe incorrect."
echo "Tapez le mot de passe"
read password
done
190
ž Instructions liées aux boucles:
Ø A l’intérieur de ces différentes structures, il est important
que l’utilisateur puisse fixer lui-même et selon ses propres
critères la sortie de boucles.
Ø La commande: continue [n] permet de sauter à la fin
de la boucle et de recommencer une nouvelle boucle.
Ø La commande: break [n] provoque, quand à elle la
sortie de la boucle en cours et passe à l’instruction qui
suit la boucle.
ž Dans les deux cas, l’entier n permet d’indiquer que
l’action se porte sur une boucle externe.
ž Par exemple, break 2 sortira de la boucle qui englobe
la boucle dans laquelle cette instruction est écrite.
191
ž expr arguments...
ž Exemple: programme qui incrémente la valeur d’une variable de
1:
Echo "affichage des nombres entiers <10:"
a=1
while [ $a -lt 10 ]
do
echo $a;
a=$((a+=1));
done
ž function nom_fct
ž {
ž suite_de_commandes
ž }
ž nom_fct () {
commande...
}
192
ž fonct()
{ echo Je suis appelé avec $1 }
ž fonct 4 # affiche 4
ž fonct coucou
# affiche coucou
193
#!/bin/bash
function decrement
{
if (( i > 0 ))
then
((i--))
fi
}
194
#!/bin/bash
function min(){
if [ -n "$1" ] && [ -n "$2" ]
then
if [ "$1" -lt "$2" ]
then VAL=$1
else VAL=$2
fi
fi
echo "$VAL est la plus petite valeur "}
195
#!/bin/bash
recursion=$1 # Nombre fournit en argument.
count=1
recurse ()
{
var=$1
while [ $var -gt 1 ]
do
# echo "Recursion count = "$count" +-+ $var = $var"
((count=count * var));(( var-- ))
recurse $var
done
}
recurse $recursion
echo "le factoriel est $count" 196

Contenu connexe

Similaire à système d'exploitation Linux commande et shell.pdf

Résumé sur l’utilisation du système unix
Résumé sur l’utilisation du système unixRésumé sur l’utilisation du système unix
Résumé sur l’utilisation du système unixMohamed Ferchichi
 
resume-theorique-m104-2203-6246fb9f3e558 (2).pdf
resume-theorique-m104-2203-6246fb9f3e558 (2).pdfresume-theorique-m104-2203-6246fb9f3e558 (2).pdf
resume-theorique-m104-2203-6246fb9f3e558 (2).pdfFootballLovers9
 
Administration linux
Administration linuxAdministration linux
Administration linuxLys Lopy
 
Cours SE Principes et fonctionnement de système d’exploitation - IPSET.pdf
Cours SE Principes et fonctionnement de système d’exploitation - IPSET.pdfCours SE Principes et fonctionnement de système d’exploitation - IPSET.pdf
Cours SE Principes et fonctionnement de système d’exploitation - IPSET.pdfMedBechir
 
System d\'exploitation
System d\'exploitationSystem d\'exploitation
System d\'exploitationThắng Thao
 
Chapitre i généralités et notions de base
Chapitre i généralités et notions de base Chapitre i généralités et notions de base
Chapitre i généralités et notions de base Wajdi Ben Helal
 
Le Système Linux (1992)
Le Système Linux (1992)Le Système Linux (1992)
Le Système Linux (1992)Julien SIMON
 
Cours SE IAG Système d'exploitation Windows - IPSET.pdf
Cours SE IAG Système d'exploitation Windows - IPSET.pdfCours SE IAG Système d'exploitation Windows - IPSET.pdf
Cours SE IAG Système d'exploitation Windows - IPSET.pdfMedBechir
 
Logiciel système
Logiciel systèmeLogiciel système
Logiciel systèmebenaaa
 
Cours SE linux
Cours SE linuxCours SE linux
Cours SE linuxIdriss22
 
Chapitre 1- Fiche de Cour.pdf
Chapitre 1- Fiche de Cour.pdfChapitre 1- Fiche de Cour.pdf
Chapitre 1- Fiche de Cour.pdfYounesAziz3
 

Similaire à système d'exploitation Linux commande et shell.pdf (20)

Résumé sur l’utilisation du système unix
Résumé sur l’utilisation du système unixRésumé sur l’utilisation du système unix
Résumé sur l’utilisation du système unix
 
resume-theorique-m104-2203-6246fb9f3e558 (2).pdf
resume-theorique-m104-2203-6246fb9f3e558 (2).pdfresume-theorique-m104-2203-6246fb9f3e558 (2).pdf
resume-theorique-m104-2203-6246fb9f3e558 (2).pdf
 
Administration linux
Administration linuxAdministration linux
Administration linux
 
Cour1
Cour1Cour1
Cour1
 
Cours SE Principes et fonctionnement de système d’exploitation - IPSET.pdf
Cours SE Principes et fonctionnement de système d’exploitation - IPSET.pdfCours SE Principes et fonctionnement de système d’exploitation - IPSET.pdf
Cours SE Principes et fonctionnement de système d’exploitation - IPSET.pdf
 
Sistema operativo frances
Sistema operativo francesSistema operativo frances
Sistema operativo frances
 
Cours linux
Cours linuxCours linux
Cours linux
 
System d\'exploitation
System d\'exploitationSystem d\'exploitation
System d\'exploitation
 
Les systemes-dexploitation
Les systemes-dexploitationLes systemes-dexploitation
Les systemes-dexploitation
 
Ch1 p1
Ch1 p1Ch1 p1
Ch1 p1
 
Chapitre i généralités et notions de base
Chapitre i généralités et notions de base Chapitre i généralités et notions de base
Chapitre i généralités et notions de base
 
Le Système Linux (1992)
Le Système Linux (1992)Le Système Linux (1992)
Le Système Linux (1992)
 
Introduction.ppt
Introduction.pptIntroduction.ppt
Introduction.ppt
 
Cours SE IAG Système d'exploitation Windows - IPSET.pdf
Cours SE IAG Système d'exploitation Windows - IPSET.pdfCours SE IAG Système d'exploitation Windows - IPSET.pdf
Cours SE IAG Système d'exploitation Windows - IPSET.pdf
 
Logiciel système
Logiciel systèmeLogiciel système
Logiciel système
 
Cours SE linux
Cours SE linuxCours SE linux
Cours SE linux
 
Cours_OS 1.pptx
Cours_OS 1.pptxCours_OS 1.pptx
Cours_OS 1.pptx
 
Chapitre 1- Fiche de Cour.pdf
Chapitre 1- Fiche de Cour.pdfChapitre 1- Fiche de Cour.pdf
Chapitre 1- Fiche de Cour.pdf
 
Historique
HistoriqueHistorique
Historique
 
Install party
Install partyInstall party
Install party
 

système d'exploitation Linux commande et shell.pdf

  • 1. Université Hassan II -Casablanca Faculté des sciences Ben M’sick Département de Mathématiques et Informatique
  • 2. ž Introduction ž Système de Gestion de Fichiers ž Droit d’Accès ž Les filtres UNIX ž Gestion de Processus ž Le langage Shell 2
  • 3. ž Un système d’exploitation est un ensemble de procédures manuelles et automatiques qui permet à un groupe d’utilisateurs de partager efficacement un ordinateur. Brinch Hansen. ž Un système d'exploitation est un ensemble de programmes chargé de faire l'interface entre l'utilisateur et le matériel. ž C'est à dire quand un utilisateur tape une commande au niveau d'un logiciel , le logiciel interprète la commande, la transmet au système d'exploitation qui la transmet au matériel dans un format compréhensible 3
  • 4. ž Un exemple: Ø quand on ouvre un fichier dans un éditeur de texte § le traitement de texte interprète l'action d'ouverture de fichier § transmet l'ordre au système d'exploitation § ce dernier va alors commander au contrôleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent au fichier en question. ž Normalement un logiciel ne devrait jamais " discuter " avec le matériel, les systèmes d'exploitation se place entre les deux pour transmettre et éventuellement rejeter des commandes illicites. 4
  • 5. ž Le premier système «Unix» a été mis au point par Ken Thompson dans les laboratoires Bell AT&T à partir de 1965. ž ž Le but de Ken Thompson était de mettre au point un système d'exploitation interactif simple, nommé "Multics" (Multiplexed Information and Computing System) ž Deux branches de développement des sources voient le jour : Ø La branche d'AT&T qui allait devenir System V de UNIX System Labs (USL) Ø BSD (Berkeley Software Developpement) développé par l'Université de Californie ž En 1977 AT&T mit les sources d'UNIX à la disposition des autres entreprises, si bien qu'un grand nombre d'UNIX-like furent développés . 5
  • 6. ž Système ouvert : pas de code propriétaire ; seules certaines implémentations sont propriétaires. ž Multitâches :plusieurs programmes peuvent s'exécuter en même temps, sans blocage, communication entre tâches multiprocesseurs. ž Mémoire protégée : pas d'interaction entre les programmes ž Mémoire virtuelle : le système peut utiliser plus de mémoire que la mémoire physique disponible. ž Multi-utilisateurs : plusieurs utilisateurs travaillent sur la même machine en même temps . Chaque utilisateur du système dispose de ses fichiers, UNIX lui donne le moyen de protéger ses fichiers, et d'accorder le droit ou non à d'autres utilisateurs d'accéder à ses fichiers. ž Interactif et batch : Le traitement par lot. ž Interface : graphique X et shell (interpréteur de commande). ž Stable : les plantages du système par lui-même sont rares 6
  • 7. ž Système né dans le monde de la recherche Øintégration de concepts avancés ž Diffusion ouverte Øaccès aux sources, plusieurs distributions ž Communautés d’utilisateurs ž Interfaces graphiques sous linux Gnome et KDE en particulier ž Plus résistant aux virus 7
  • 8. ž Partage des ressources équitables Ø UNIX veille à ce que toutes les ressources de l'ordinateur (processeur, mémoire, ...) soient partagées équitablement entre tous les processus. Ø Par exemple si on travaille sur une application du genre base de données, on lance une requête coûteuse en temps, pour patienter rien n’ empêche de lancer une autre application. § On se trouve donc avec deux processus lancés en même temps § C'est le système d'exploitation qui est chargé de faire en sorte que les deux processus puissent utiliser les ressources de manière équitable et que le deuxième processus lancé n'attende pas la terminaison du premier pour se lancer. 8
  • 9. ž Interface avec le matériel ØLe système d'exploitation unix fait en sorte qu'aucun processus n’accède directement à une ressource matérielle (disque dur, lecteur de disquette, ...) ØPour accéder à ces ressources on passe par l'intermédiaire de fichiers spéciaux Ø un fichier spécial est vu pour un utilisateur comme un fichier classique, pour écrire sur une disquette dans le lecteur de disquette, on n'a qu'à écrire dans le fichier spécial du lecteur de disquette. ØDe même pour lire dans un disque dur, on va lire le fichier spécial du disque dur. 9
  • 10. ž Gestion de la mémoire Ø Tout programme qui s'exécute, ou processus, a besoin de mémoire pour y stocker notamment les données qui manipulent. Ø Un ordinateur dispose d'une quantité de mémoire limitée et non extensible. Ø UNIX doit donc faire en sorte que la mémoire soit bien partagée entre tous les processus, un processus ne doit pas s'accaparer toute la mémoire, sans quoi les autres processus ne pourraient plus fonctionner. Ø La mémoire est vue comme une ressource matérielle, UNIX doit donc vérifier qu'aucun processus n’accède à la mémoire directement 10
  • 11. ž Gestion de la mémoire ØIl existe deux types de mémoire, la mémoire volatile et la mémoire statique Ø quand on éteint et on rallume l'ordinateur, toutes les données présentes dans la mémoire volatile ont disparu, et les données dans la mémoire statique sont toujours présentes. Ø Concrètement la mémoire volatile se trouve dans la RAM, la mémoire statique dans le disque dur. 11
  • 12. ž Gestion des fichiers Ø UNIX fournit les outils nécessaires pour stocker les données et pour pouvoir les récupérer rapidement et facilement. Ø Il fournit les outils pour pouvoir visualiser l'ensemble des fichiers de manière simple. Ø Ces fichiers se trouvent sur le disque dur, on nomme cela un système de fichiers ou File System en anglais. Ø UNIX fournit, en outre, un mécanisme de protection des fichiers. Ø Chaque utilisateur du système dispose de ses fichiers, UNIX lui donne le moyen de protéger ses fichiers, et d'accorder le droit ou non à d'autres utilisateurs d'accéder à ses fichiers. 12
  • 13. ž L’architecture globale d’UNIX est une architecture par couches successives comme le montre la figure: 13
  • 14. ž Les utilisateurs ordinaires communiquent avec la couche la plus évoluée celle des applications. ž Le programmeur lui va en fonction de ses besoins utiliser des couches de plus en plus profondes, plus précises mais plus difficiles à utiliser. ž Chaque couche est construite pour pouvoir être utilisée sans connaitre le fonctionnement les couches inférieures 14
  • 15. ž Le système d'exploitation est un ensemble de programme et de sous programmes qui sont regroupés dans ce qu'on appelle un noyau (kernel en anglais) ž Les processus ne pouvant pas accéder directement aux ressources matériels, les processus passent par le noyau pour y accéder ž Pour cela ils disposent d'un ensemble de commandes appelées " appels système " UNIX . 15
  • 16. ž Ces appels systèmes commandent les composantes principales du noyau: Ø le gestionnaire de processus: a pour rôle de faire en sorte que les processus s'exécutent et accèdent à la mémoire de manière équitable, on le nomme aussi scheduler. Ø le système de gestion de fichiers: a pour rôle la gestion du système de fichiers, notamment pour ce qui concerne les droits d'accès. Ø et le gestionnaire de la mémoire.. ž Ce sont ces composants du noyau qui accèdent directement au matériel. 16
  • 17. 17
  • 18. ž Sur un système UNIX, on trouve deux types de personnes: Ø l'utilisateur UNIX, on peut trouver dans cette catégorie, le programmeur, l'utilisateur de base de données, etc. Ø les administrateurs (appelé ROOT ou super utilisateur) systèmes UNIX. ž Sur un système UNIX, les utilisateurs UNIX ont des droits limités, c'est à dire que certaines commandes leurs sont interdites et ils n'ont pas accès à certaines parties du système. ž Les administrateurs systèmes ont par contre tous les droits sur le système. ž Le prompt «$» indique qu'il s'agit d'un utilisateur normal ž Le prompt «#» indique qu'il s'agit de l'administrateur, 18
  • 19. ž Ouverture de session Ø Avant de tenter une connexion, il faut d'abord posséder un compte utilisateur caractérisé par un nom ou login et un mot de passe associé. Ø A la mise sous tension, on peut aussi disposer d'une interface graphique de connexion, qui nous invite à saisir notre login et notre mot de passe. Ø Une fois le login et le mot de passe saisi deux possibilités peuvent s'offrir : § Retrouver un écran noir, avec tout simplement un caractère du genre $ ou > (appelé prompt) suivi du curseur qui clignote apparaît. § C’est le shell qui permet de taper des commandes. § Par exemple, sous Linux le prompt par défaut est le suivant: § Retrouver un environnement fenêtré avec utilisation de la souris, où il vous sera possible de lancer un shell pour pouvoir taper des commandes UNIX (terminal). 19
  • 20. ž Pour communiquer avec l'ordinateur, l'utilisateur dispose du Shell (coquille en français). : c’est un programme qui permet la saisie directe de commandes. ž Son rôle est d'interpréter les commandes de l'utilisateur avant leur transmission au noyau, c'est pourquoi on parle aussi d'interpréteur de commandes. ž Il existe plusieurs types de shell, ils se différencient par la syntaxe et la richesse des commandes: Ø les plus commun est le Bourne-Shell, Ø on trouve aussi le C-Shell qui s'apparente au langage de programmation C Ø le Korn Shell, le Posix Shell, Ø et sous Linux le bash-shell 20
  • 21. ž Le Shell permet d'exécuter : Ø des commandes internes, Ø des commandes externes, Ø des commandes complexes, Ø des fichiers de commandes. ž La syntaxe standard d'une commande UNIX est la suivante : 21
  • 22. ž Commandes internes Ø Les commandes internes au Shell font partie intégrante du Shell Ø Le shell ne crée pas un nouveau processus Ø Exemples : § cd .. Permet de changer de répertoire § ls permet de lister le contenu d’un répertoire ž Commandes externes Ø Ce sont des programmes binaires généralement situés dans le répertoire /bin que le Shell va exécuter sous la forme d'un nouveau processus § gzip permet de compresser des donner 22
  • 23. ž Commandes complexes Ø Les commandes complexes résultent de la combinaison de plusieurs commandes par l'intermédiaires de tubes. Ø Exemple : ls -1 | head -n5 Le résultat de l’exécution de la commande ls –l est fournie à la deuxième commande comme entrée 23
  • 24. ž Fichiers de commandes Ø Appelés aussi scripts Shell, ces fichiers textes regroupent une succession ordonnée de commandes et de structures de contrôles. Ø Ecrire un script revient à faire de la programmation (voir plus loin). 24
  • 25. ž Commande ls Ø ls liste les fichiers et répertoires de votre répertoire courant. ž Commande cp Ø Avec la commande cp (copy) copie un répertoire (option R) vers un autre répertoire, on a ici deux arguments. ž Cat: catalogue, permet d'éditer le contenu d'un fichier ž Commande mv Ø mv permet de changer le nom d'un fichier ou de le déplacer vers un autre répertoire. $mv fic1 fic2 #(fic1 n'existe plus) $mv fic1 rep #(fic1 existe, mais sous rep) 25
  • 26. ž Commande rm Ø rm permet de supprimer un fichier, ou un répertoire si l'option -r est précisée. Ø Pour éviter les confirmations multiples l'option -f sera très utile. $rm -f fic* $rm -r rep Ø Attention rm, supprime réellement le fichier, il n'y a pas de restauration possible après un rm. ž Commande cd Ø cd permet de changer de répertoire. $cd bin $cd bin/new $cd .././src 26
  • 27. ž Commande pwd Ø Affiche le chemin du répertoire où on se trouve ž Commande logname Ø Cette commande affiche le login de l’utilisateur, en principe celui utilisé lors de la connexion. ž Commande who Ø Affiche les utilisateurs connectés 27
  • 28. ž Commande sudo Ø La commande "sudo" (Switch User) appelée plus communément (à tort )"Super Utilisateur" , permet d'ouvrir une session avec l'ID (IDentifiant) qui est du root $sudo su Ø En entrant le mot de passe, on se connecte en tant qu'utilisateur root Ø On bénéficie des réglages par défaut du root (shell de connexion, variables d'environnement, permissions diverses...) 28
  • 29. ž Il y a trois sortes d'entrées sorties ou flux de données : Ø le premier est l'entrée standard, c'est à dire ce qu’on saisi au clavier Ø le deuxième est la sortie standard, c'est à dire l'écran, plus précisément le shell, Ø le troisième est la sortie standard des messages d'erreurs suite à une commande, qui est généralement l'écran. ž Chacun de ces flux de données est identifié par un numéro descripteur: Ø 0 pour l'entrée standard Ø 1 pour la sortie standard Ø et 2 pour la sortie standard des messages d'erreur. 29
  • 30. ž Redirection des entrées sorties Ø Quand on lance une commande dans un shell, il peut y avoir du texte qui s'affiche suite à l'exécution de la commande, ce texte par défaut, s'affiche dans le shell. Ø On dit que le shell (ou terminal) est la sortie standard, c'est là où va s'afficher le résultat d'une commande. Ø On peut changer ce comportement, en tapant : ls> toto ØDans ce cas le résultat va s’écrire dans le fichier toto Ø> toto crée un fichier toto 30
  • 31. ž Redirection des entrées sorties Ø Cela peut être utile: § si on a une commande qui génère énormément de commentaire, et qu’on veuille les récupérer, pour les exploiter par la suite, à la terminaison de la commande. Ø La redirection > a pour effet de créer le fichier toto, si ce fichier existait déjà, il est tout simplement écrasé (supprimé et recréé), ce qui peut être gênant Ø si nous ne voulons pas perdre ce qu'il contient, on peut disposer donc de la redirection >>. Ø exemple : ls >> toto § Le fichier toto n'est pas écrasé, mais la sortie standard (les commentaires de la commande) sont ajoutés en fin de fichier, à la suite du texte qui était déjà dans le fichier. 31
  • 32. ž Redirection des entrées sorties Ø De manière analogue, le caractère «<» indique une redirection de l'entrée standard. Ø La commande suivante envoie le contenu du fichier toto.txt en entrée de la commande cat, dont le seul but est d'afficher le contenu sur la sortie standard : cat < toto sort < mon-fichier Ø Le contenu du fichier mon-fichier sera envoyé vers la commande sort (trie), celle-ci va donc trier le contenu du fichier, par défaut le résultat sort sur la sortie standard, c'est à dire à l'écran 32
  • 33. ž Redirection des entrées sorties ØAvec la commande suivante : $sort < mon-fichier > fichier-trie ØLa commande sort < mon-fichier a pour effet de trier le fichier mon-fichier Ø l'expression >fichier-trie a pour effet d'envoyer le résultat (le fichier trié) dans un fichier fichier- trie, Øle résultat n'apparaît plus à l'écran, mais est sauvegardé dans un fichier. 33
  • 34. ž Redirection des entrées sorties Ø Avec la redirection << la commande va lire les caractères jusqu'à la rencontre d'une certaine chaîne de caractères. Ø Exemple avec la commande cat Cat << fin ici je tape le texte puis je termine par fin Ø cat va lire (et éditer) les caractères que nous nous avons saisi jusqu'à qu'il rencontre la chaîne fin, à ce moment là, le prompt apparaît à nouveau. Ø Si on veut créer un fichier avec un peu de texte à l'intérieur, on procède de cette façon : Cat << fin > toto ici je tape le texte puis je termine par fin 34
  • 35. ž Redirection des erreurs Ø Par défaut les messages d'erreur s'affichent à l'écran et la sortie d'erreur a pour code 2. Ø On peut sauvegarder dans un fichier les messages d'erreur, pour l’analyser ultérieure, en tapant : $cat mon-fichier 2> fichier-erreur Ø Si on rencontre une erreur pendant l'exécution de la commande d'édition cat de mon-fichier (absence du fichier par exemple), le message d'erreur sera sauvegardé dans le fichier fichier-erreur. Ø Par défaut les messages d'erreur s'affichent dans le shell, nous pouvons faire en sorte qu'ils s'affichent dans le fichier fichier-er, en tapant : $cat mon-fichier > fichier-trie 2>&1 Ø Avec la syntaxe >& indique que les messages d'erreurs seront redirigés vers la sortie standard qui est le fichier fichier-trie. 35
  • 36. ž Le système de gestion de fichiers est un outil de manipulation des fichiers et de la structure d’arborescence des fichiers sur disque ž Il a le rôle sous UNIX de conserver toutes les informations dont la pérennité est importante pour le système (et pour les utilisateurs bien sûr). ž Ainsi tous les objets importants du système sont référencés dans le système de fichiers Ø mémoire, terminaux, périphériques variés, etc. ž Le système de gestion de fichier permet une manipulation simple des fichiers et gère de façon transparente les différents problèmes d’accès aux supports de masse : Ø partage : utilisation d’un même fichier/disque par plusieurs utilisateurs Ø efficacité : utilisation de cache Ø droits : protection des éléments important du système et protection inter-utilisateurs 36
  • 37. ž L’unité logique de base de l’interface du Système de Gestion de Fichiers : le fichier. ž Un fichier Unix est une suite finie de bytes (octets) Matérialisée par des blocs disques, et une inode qui contient les propriétés du fichier . ž Le contenu est entièrement défini par le créateur, la gestion de l’allocation des ressources nécessaires est à la responsabilité du système. 37
  • 38. ž Un fichier, est caractérisé par les informations : Ø la localisation sur disque, Ø le propriétaire et le groupe propriétaire, Ø les droits d’accès des différents utilisateurs, Ø la taille du fichier, Ø la date de création. 38
  • 39. ž Il existe trois types de fichier: Ø le fichier qu'on pourrait qualifier de normal Øle répertoire ou catalogue (en anglais directory) Ø les fichiers spéciaux 39
  • 40. ž Un fichier normal contient des données, ce fichier peut être lisible (contient des informations compréhensibles), ou totalement illisible. ž Exemple : fichier texte, fichier exécutable (fichier binaire). ž Un répertoire peut être considéré comme un classeur, dans lequel on met des fichiers, c'est un élément d'organisation de l'espace du disque dur. 40
  • 41. ž Un exemple de fichiers spéciaux à usage physique se trouvent dans le répertoire /dev (dev comme devices dispositifs matériels) ž Chacun des fichier est associé à un périphérique physique, il y en a deux types: Ø périphériques où la communication se fait octets par octets : Character devices § les terminaux (claviers, écrans) § les imprimantes, port série § la mémoire, etc Ø périphériques ou la communication se fait par groupe d’octet appelés blocs: Block devices § les disques § les bandes magnétiques, etc 41
  • 42. ž Exemples de fichiers à usages logiques et non physiques Ø liens symboliques Ø pseudo-terminaux Ø sockets Ø tubes nommés ž Ce dernier type de fichiers spéciaux est utilisé pour servir d’interface de communication entre disques, entre machines….. 42
  • 43. ž Pour certains fichiers le système utilise une structure interne spéciale (d’ou le nom) qui ne doit pas être modifié sous peine de comportement indéfini. ž Pour se protéger le système ne permet pas l’accès direct aux informations ž c’est lui qui fait toutes les entrées sortie sur les fichiers spéciaux de façon a en assurer l’intégrité. 43
  • 44. ž Le système de fichiers sur Linux est similaire à ce que l'on retrouve dans Windows, i.e. une structure hiérarchique dont une racine et des répertoires qui s'y rattachent. ž Exemples de Système de Fichier 44 ext2 Second Extended Filesystem, le plus utilisé par défaut sysv filesystem AT&T System V et Xenix minix le premier filesystem utilisé à l'origine par Minix et Linux iso9660 aussi cdfs et udf, filesystem lecteurs cd et dvd reiserfs filesystem journalisé le plus utilisé etx3 Third Extended Filesystem, journalisé smbfs Filesystem basé sur le protocole SMB de Windows
  • 45. ž Voici un exemple d'un système Linux: 45
  • 46. ž Voici un résumé de ce que contiennent ces répertoires. ž /bin Ø Ce répertoire contient les commandes de base du système, comme les coquilles ("shells") et les commandes de base d'Unix, i.e. cat, date, grep, mv, .... ž /etc Ø Ce répertoire contient l'ensemble des fichiers de configuration et de démarrage d'un système Linux. Ø Exemple: le fichier contenant la liste des usagers Unix (/etc/passwd), les "scripts" de démarrage du système, les fichiers de configuration pour certains logiciels, etc. ž /dev Ø Ce répertoire contient les dispositifs ("devices") du système. On y retrouve des dispositifs de type bloc (disque) et ceux de type caractère (unité de ruban, port série, ...). 46
  • 47. ž /home Ø Ce répertoire contient généralement l'espace disque nécessaire pour les comptes d'usager. ž /lib Ø Ce répertoire contient les librairies de système pour le fonctionnement d'un système Linux. Ø Si l'on veut comparer à Windows, elles sont comme les DLL. ž /proc Ø Ce répertoire contient tous les renseignements qui se rattachent aux processus actifs d'un système Linux. Ø On y retrouve des répertoires qui contiennent des renseignements sur les processus qui s'exécutent ainsi que ceux concernant le type de processeur, les dispositifs actifs ("devices"), l'utilisation de la mémoire, etc. Ø si on veut savoir quel type de processeur une machine Linux possède, il suffit de regarder le contenu du fichier cpuinfo. 47
  • 48. ž /sbin Ø Ce répertoire contient l'ensemble des commandes pour l'administration d'un système Linux. Ø On y retrouve des commandes pour redémarrer le système (reboot), vérifier l'intégrité d'une partition (fsck), créer un système de fichier (mkfs) , etc. ž /tmp Ø Utilisé par l'ensemble du système autant pour l'usager root que pour les usagers Linux. Ø Plusieurs applications l'utilisent pour y mettre des fichiers et répertoires temporaires. Ø Cependant, lorsque le système est redémarré, certains fichiers seront effacés. 48
  • 49. 49 ž On accède aux partitions par des pointeurs stockés dans /dev. ž Ces pointeurs sont de la forme « /dev/PPLN» Ø avec « PP » le type de bus § hd pour les disques IDE, § sc pour les disques SCSI, § fd pour les disquettes, § sd pour USB Ø « L » la lettre du périphérique concerné Ø et « N » le numéro de partition concernée (1 à 4 pour une partition principale ou étendue, > 4 pour les partitions logiques).
  • 50. 50 ž Comment Linux identifie et organise les disques durs ? Ø Pour les disques SCSI ou SATA, la numérotation se fait avec un préfixe sd, suivi par une lettre, « a » pour premier disque SCSI (selon l'ID), « b » pour le deuxième disque, etc. Ø Prenons par exemple 3 disques SCSI d'id 0,1 et 3 on va avoir : § sda Disque d'ID 0 § sdb Disque d'ID 1 § sdd Disque d'ID 3 Ø CD-ROM SCSI , les périphériques de stockage USB (appareils photo, clefs USB...) apparaissent comme un disque dur SCSI ; ils se nomment aussi sdx suivant leur ID. Ø Pour les disques IDE, la numérotation se fait avec un préfixe hd, suivi par une lettre, « a » pour le premier IDE maître, « b » pour le premier esclave, etc. § hda Disque maître correspond au premier disque dur IDE – hda1 à la première partition du disque dur IDE § hdb Disque esclave, correspond au second disque dur I sur le 1er contrôleur IDE
  • 51. 51
  • 52. 52
  • 53. 53 ž Tout fichier, qu'elle que soit son type, doit pouvoir être identifié, c'est pourquoi on les nomme avec un nom en rapport avec le fichier. ž Ce nom comporte au maximum 255 caractères, sachant qu'il existe une distinction entre les lettres minuscules et majuscules, et que certains caractères sont interdits, ce sont par exemple le /, les parenthèses (), l'espace ou *.
  • 54. 54 ž Un nom de chemin peut aussi être relatif à sa position courante dans le répertoire ž Pour cela souvent utiliser deux entrées particulières de répertoires : Ø Le point . représente le répertoire courant actif Ø Les doubles points .. représentent le répertoire de niveau inférieur ./Documents/Photos est un chemin relatif /usr/local/../bin est un chemin relatif : les .. sont relatifs à /usr/local ž Le tilde ~ Ø Le bash interprète le caractère tilde ~ comme un alias du répertoire personnel Ø Les chemins peuvent être relatifs au tilde, mais le tilde ne doit être précédé d’aucun caractère. Ø Pour se déplacer dans le répertoire tmp du dossier personnel de n'importe où $ cd ~/tmp
  • 55. ž ls –l La signification des champs est la suivante: Ø -rw-rw-rw- type de fichier et ses caractéristiques de protection Ø 1 le nombre de lien Ø olivier le nom du propriétaire Ø users le groupe d'utilisateurs auquel appartient le propriétaire Ø 17356 la taille du fichier (en octets) Ø Dec 3 le jour de dernière modification Ø 12 :11 l'heure de dernière modification Ø HOW-TOppp le nom du fichier ž $ls –l nom-du-fichier 55
  • 56. ž Pour gérer les répertoires, on dispose des commandes suivantes : Ømkdir nom-de-répertoire Création d'un répertoire Ørmdir nom-de-répertoire Suppression d'un répertoire vide Ømv répertoire répertoire-d'accueil déplacement d'un répertoire Ømv répertoire nouveau-nom Changement de nom d'un répertoire 56
  • 57. ž Pour gérer les fichiers on dispose des commandes suivantes: Øtouch mon-fichier création d'un fichier vide, Ømore mon-fichier visualisation d'un fichier page à page, Øfile mon-fichier pour savoir si on a un fichier binaire (exécutable) ou un fichier texte. On obtient pour un fichier texte, comme sortie mon- fichier : ascii text. 57
  • 58. ž Dans l'arborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peu particulière. ž Cela signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le répertoire /bin, en d'autres termes Mail est un lien vers le fichier mail. ž Un lien est créé pour pouvoir accéder au même fichier à différents endroits de l'arborescence. Sous Windows on retrouve à peu près l'équivalent avec la notion de raccourci. ž La commande ln (pour link) sert à créer des liens. Par exemple: ž Deux types de liens : symbolique et hard 58
  • 59. ž L’inode est la structure qui contient toutes les informations sur un fichier donné à l’exception de sa référence dans l’arborescence (son nom), l’arborescence n’étant qu’un outil de référencement des fichiers. ž Les informations stockées dans une inode disque sont : Ø utilisateur propriétaire Ø groupe propriétaire Ø type de fichier Ø fichiers ordinaires § d répertoire (directory) § b mode bloc § c mode caractère § l lien symbolique § p pour une fifo (named pipe) § s pour une socket Ø droits d’accès (ugo*rwx), date de dernier accès, date de dernière modification, date de dernière modification de l’inode Ø taille du fichier Ø adresses des blocs-disque contenant le fichier. 59
  • 60. ž Un répertoire n'est qu'un fichier, identifié aussi par un inode, contenant une liste d'inode représentant chacun un fichier. ž La différence entre un lien hard et symbolique se trouve au niveau de l'inode, un lien hard n'a pas d'inode propre, il a l'inode du fichier vers lequel il pointe. ž Par contre un lien symbolique possède sa propre inode. ž Pour connaître le numéro d'inode d'un fichier, on tape: $ ls –i mon-fichier 60
  • 61. ž Le but des métacaractères, est de pouvoir faire une sélection de fichiers suivant certains critères. ž Le métacaractère le plus fréquemment utilisé est *, il remplace une chaîne de longueur non définie. Ø Avec le critère * on sélectionne tous les fichiers. Ø Par le critère a*, on sélectionne tous les fichiers commençant par a. ž $ls a* ž Va lister que les fichiers commençant par a. De même *a opère une sélection des noms de fichiers se terminant par a. ž Le critère *a* va faire une sélection sur les noms de fichiers qui ont le caractère a dans leur nom, quelque soit sa place. 61
  • 62. ž Le métacaractère ? remplace un caractère unique. Ø Avec le critère a??, on sélectionne les fichiers dont le nom commence par a, mais qui contiennent au total trois caractères, exactement. ž Les métacaractères [ ] représente une série de caractères. Ø Le critère [aA]* permet la sélection des fichiers dont le nom commence par un a ou A (minuscule ou majuscule). Ø Le critère [a-d]* fait la sélection des fichiers dont le nom commence par a jusqu'à d. Ø Le critère *[de] fait la sélection des fichiers dont le nom se termine par d ou e. ž On voit bien que les caractères [],* et ? sont des caractères spéciaux, qu'on ne peut utiliser comme des simples caractères, parce qu'ils sont interprétés par le shell, comme des métacaractères. 62
  • 63. ž Cependant on peut inhiber leur fonctionnement ž En tapant : $ls mon-fichier? Ø Le shell va interpréter le ? comme un métacaractère et afficher tous les fichiers qui commencent par mon-fichier et qui se termine par un caractère unique quelconque. ž Si on ne veut pas que le ? soit interprété on tape : $ls mon-fichier? 63
  • 64. ž Trois principales suites bureautiques libres sont disponibles pour Linux. ž La première des trois, historiquement parlant, n’est pas à proprement parler une véritable suite, mais plutôt un assemblage de plusieurs programmes indépendants du projet GNOME (Abiword, Gnumeric, etc.). ž Face à cette situation, l’équipe des développeurs de KDE décida en 1998 de lancer le projet Koffice, avec la volonté affichée d’en faire une alternative crédible à la suite MS-Office. ž Sur ces entrefaites, la société Sun Microsystems, qui avait pour des raisons stratégiques racheté la suite Star Office à son créateur Star Divisions, décida d’en ouvrir le code. ž La suite Star Office se décline donc dorénavant en deux versions, propriétaire et libre. La version libre, OpenOffice.org, est dorénavant livrée pour quasiment toutes les distributions. ž Tous ces modules sont compatibles avec leur équivalent Microsoft. 64
  • 65. ž Les éditeurs de texte sont des traitements de texte un peu particuliers. ž À l’inverse des outils bureautiques un éditeur est clairement conçu pour écrire des programmes, des fichiers de configuration, ou d’autres fichiers similaires. ž Ils ne manipulent que du texte brut. Par conséquent, ils ne permettent pas d’enrichissement typographique (texte en gras, italique, réglage des interlignes, titres, etc.), mais offrent généralement des fonctionnalités supplémentaires en rapport avec leur utilisation, telle la coloration syntaxique ou l’auto-complétion des commandes. 65
  • 66. ž Vi est un éditeur datant d'Unix, et il est encore présent sur toutes les plateformes GNU/Linux. ž C'est un éditeur plein écran, il n'y a donc pas d'interface graphique, ni même de menu. ž Mais il est interactif, car il communique avec l'utilisateur, grâce à la ligne d'état, qui affiche des messages. ž Vi possède deux modes différents : Ø Le premier, celui qui est actif par défaut à son lancement, est le mode commande. Toutes frappes de l'utilisateur sont interprétées comme des commandes. Ø Le mode insertion, lui, interprète chaque frappe comme du texte à ajouter dans le fichier ouvert. Pour passer du mode commande au mode insertion, il faut taper a (pour ajout) ou i (pour insertion). Inversement, pour quitter le mode insertion, taper esc. ž Lorsque l'on démarre Vi, en tapant simplement vi dans une console, ou vi fichier, les lignes vides apparaissent avec un ~ (tilde) en début. 66
  • 67. ž Les commandes de base : dernière ligne 67 Commande Description :q Quitte l'éditeur (sans sauvegarder) :q! Force l'éditeur à quitter sans sauvegarder (même si des modifications ont été apportées au document) :wq Sauvegarde le document et quitte l'éditeur :filenom Sauvegarde le document sous le nom spécifié
  • 68. ž Les commandes : Mode de commande (déplacement) 68
  • 69. ž Kate (KDE Advanced Text Editor) Ø Kate est l’un des éditeurs du projet KDE. Les deux autres, moins puissants, sont KEdit et KErite. Kate est un éditeur multi-document, les différents fichiers étant facilement accessibles grâce au navigateur situé dans la partie gauche. Ø Ses principales fonctionnalités sont : § Il permet d’éditer tous les types de fichiers texte, même s’ils sont très volumineux. § Il ouvre par exemple un fichier de 50 Mo en quelques secondes. § C’est un moteur de coloration syntaxique puissant. Le choix de la coloration est soit manuel, soit automatique en fonction de l’extension. ž Gedit Ø Gedit est le pendant de Kate pour GNOME. 69
  • 70. 70 ž Définition Ø Chaque fichier a plusieurs propriétés associées : le propriétaire, le groupe propriétaire, la date de dernière modification, et les droits d'accès. Ø On peut examiner ces propriétés grâce à l'option -l de ls. Ø Dans cet exemple, nous voyons les permissions standard d'un répertoire et de deux fichiers : $ ls -l total 205 drwxr-xr-x 2 toto phy03 512 Jan 16 10:02 fiches/ -rw-r--r-- 1 toto phy03 72008 Oct 2 2003 article.dvi -rw-r--r-- 1 toto phy03 145905 Oct 2 2003 article.pdf Ø Les permissions sont indiquées dans la colonne de gauche, suivant un format bien particulier :
  • 71. 71 ž Type Ø Le premier caractère du bloc de permissions indique le type du fichier : - pour un fichier normal, d pour un répertoire. On trouve également parfois l pour les liens symboliques ž Droits du propriétaire Ø r ou - : droit de lire (r pour read) le fichier (r pour oui, - pour non) Ø w ou - : droit d'écrire (w pour write) dans le fichier Ø x ou - : droit d'exécuter (x pour execute) le fichier.
  • 72. 72 ž Droits du propriétaire u Ø dans le groupe propriétaire, pour un répertoire, les choses sont un peu différentes. § Le couple rx donne le droit d'examiner le répertoire et son contenu. § Le bit w donne le droit d'ajouter ou de supprimer des fichiers dans le répertoire. ž Droits du groupe g Ø Comme les droits du propriétaire, mais s'applique aux gens qui sont dans le groupe propriétaire. ž Droits des autres o Ø Comme les droits du propriétaire, mais s'applique aux gens qui sont ni le propriétaire, ni dans le groupe propriétaire. ž Droits de tout le monde a
  • 73. 73 ž Il existe 4 commandes liées aux droits d'accès : Ø chmod (change mode), la plus utile, qui modifie les permissions Ø chgrp (change group) qui modifie le groupe d'un fichier ou répertoire Ø chown (change owner) qui modifie le propriétaire d'un fichier ou répertoire Ø umask, qui définit les droits par défaut ž Les commandes chgrp et chown servent surtout à l'administrateur du système ž En revanche, chmod est une commande très pratique dans une utilisation courante.
  • 74. 74 ž Chmod : Ø La commande chmod permet de modifier les droits d'accès d'un fichier (ou répertoire). Ø Pour pouvoir l'utiliser sur un fichier ou un répertoire, il faut en être le propriétaire. Ø La syntaxe est la suivante : chmod u+x fichier
  • 75. 75 ž Exemple on veut donner un droit en écriture pour le groupe du fichier mon-fichier ž Pour supprimer le droit d'accès du répertoire mon- répertoire aux autres utilisateurs (autres que propriétaire et utilisateurs du groupe) ž Pour ajouter le droit en exécution pour le propriétaire, et on enlève le droit en écriture pour le groupe du fichier
  • 76. 76 ž Nous avons une autre méthode pour se servir de la commande chmod : l'association de valeurs numériques aux différentes permissions : Ø lecture : 4, Ø écriture : 2, Ø exécution : 1, Ø pas de permission : 0. ž Chaque triplet se code par l'addition de 4, 2, 1, ou 0. Ø Pour un rwx il faudra ajouter 4+2+1=7, pour r-x 4+0+1=5 etc. ž Donc les combinaisons vont de 0 ( aucun droit) à 7 (rwx tous les droits). ž Cela s'applique à chaque groupe triplet (propriétaire, groupe et autres).
  • 77. 77 ž Les commandes suivantes sont identiques : Ø rwxr-x--- è 750 ž On considère que r=4, w=2 et x=1, si on a un fichier avec les droits suivants -rw-rw-rw-, pour les droits utilisateurs on a (r=)4+(w=)2=6, de même pour le groupe et les autres. Ø Donc -rw-rw-rw- est équivalent à 666. Ø De même rwxrw-r-- est équivalent à 754. ž Pour mettre un fichier avec les droits- r--r--r-- on tape : chmod 444 fichier droits valeur octale valeur binaire --- 0 000 --x 1 001 -w- 2 010 -wx 3 011 r-- 4 100 r-x 5 101 rw- 6 110 rwx 7 111 ž Le tableau suivant donne les droits en valeur octale et valeur binaire
  • 78. 78 ž Quand on crée un fichier, par exemple avec la commande touch, ce fichier par défaut possède certains droits. Ø Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un répertoire (- rwxrwxrwx), ce sont les droits maximum. ž On peut faire en sorte de changer ces paramètres par défaut par la commande umask. ž Pour un fichier : Ø Si on tape umask 022, on part de 666 et on retranche 022, on obtient donc 644, par défaut les fichiers auront comme droit 644 (-rw-r-r--). Ø Si on tape umask 244, on part de 666 et on retranche 244, on obtient donc 422, par défaut les fichiers auront comme droit 422 (-rw--w--w-). ž Pour un répertoire : Ø Si on tape umask 022, on part de 777 et on retranche 022, on obtient donc 755, par défaut les fichiers auront comme droit 644 (-rwxr-xr-x). Ø Si on tape umask 244, on parte de 777 et on retranche 244, on obtient donc 533, par défaut les répertoires auront comme droit 422 (-rwx-wx- wx).
  • 79. 79 ž On peut " donner " un fichier nous appartenant à un autre utilisateur, c'est à dire qu'il deviendra propriétaire du fichier, et que nous n'aurons plus que les droits que le nouveau propriétaire voudra bien nous donner sur le fichier. ž Dans le même ordre d'idée on peut changer le groupe. ž Ces deux commandes ne sont utilisables que si on est propriétaire du fichier.
  • 80. 80 ž Quand un utilisateur se connecte, il fournit un nom de connexion (login name) et un mot de passe (password). ž Si la connexion réussit, un shell est lancé et l'utilisateur se retrouve dans son répertoire de travail (working directory) qui est initialement son répertoire de connexion (login directory). ž Ces informations sont placées dans les fichiers /etc/passwd et /etc/group. ž Le fichier /etc/passwd Ø Les utilisateurs sont définis au sein du fichier /etc/passwd. Ø En voici sa structure. user:passwd:UID:GID:commentaire:homedir:cmd
  • 81. 81
  • 82. 82 ž Les groupes sont définis au sein du fichier /etc/group. ž Voici sa structure. group: passwd: GID:liste_utilisateurs
  • 83. 83
  • 84. 84 ž En général, la liste des utilisateurs est segmentée ainsi : Ø l'utilisateur dont l'UID est 0 est le root Ø les utilisateurs dont l'UID est inférieur à une certaine valeur (500) sont des utilisateurs systèmes Ø les utilisateurs dont l'UID est compris entre cette valeur et 65533 sont des utilisateurs réels, cette plage peut quelquefois être elle-même subdivisée
  • 85. 85 ž À l'origine d'Unix, les mots de passe étaient stockés dans le fichier /etc/passwd (deuxième champs) cryptés avec l'algorithme traditionnel crypt. ž Comme ce fichier doit être accessible en lecture pour tout les utilisateurs, le stockage des mots de passe à été déplacé vers le fichier /etc/shadow dont l'accès en lecture est restreint ž De plus, l'algorithme d'encodage D5 est de plus en plus utilisé. ž Des champs supplémentaires ont été ajoutés à ce fichier afin de permettre la gestion de l'expiration des mots de passe. ž Le champ du fichier /etc/passwd destiné à contenir le mot de passe, est généralement positionné à la valeur « x ».
  • 87. 87 ž Le premier champ indique le login de l’utilisateur ž le deuxième le mot de pass crypté Ø on peut avoir les caractère * et !. § Le caractère ! indique que la connexion est actuellement désactivée § le * désigne un compte système qui peut être utilisé pour démarrer les services ž Nombre de jours entre Janvier 1, 1970, et la date à laquelle le mot de passe a été dernièrement changé ž Nombre de jours au minimum avant que le mot de passe peut être changé ž Nombre de jours maximum après quoi le mot de passe doit être changé ž Nombre de jours avant l'expiration de mot de passe à cette date l'utilisateur est averti ž Nombre de jours après l'expiration du mot de passe de ce compte est le mot de pass est désactivé (si cela se produit, l'administrateur intervient pour déverrouiller le mot de passe) ž Nombre de jours entre Janvier 1, 1970, et la date à laquelle le compte a été désactivé
  • 88. 88 ž La commande passwd permet de changer le mot de passe, et dispose de plusieurs options. passwd [-k][-l][-u [-f]] [-d] [-S][nom_user] nom_user: changement du mot de passe de l'utilisateur donné passwd nom_user -f : force le changement de mot de passe à la prochaine connexion passwd -f nom_user -d : C'est une façon rapide pour désactiver un mot de passe pour un compte. passwd -d nom_user -k : est utilisée pour indiquer que la mise à jour ne devrait être effectuée que pour le mots de passe. -l : utilisé pour verrouiller le compte spécifié (en le préfixant par un !) passwd -l nom_user -u : déverrouille le mot de passe du compte en supprimant le préfixe ! -S: Cela affiche une information courte sur le statut du mot de passe pour un compte donné.
  • 89. 89 ž La syntaxe de la commande useradd est la suivante : useradd [-c comment] [-d homedir] [-g initial_group] [- G group2,group3,...] [-m] [-s shell] [-u UID] [-o] [-r] [-e YYYY-MM-DD] [-f inactive_days] -c : saisie du commentaire. -d : le répertoire personnel -g : le groupe de base -G : groupes supplémentaires pour utilisation avec la commande newgrp -m : recopie du /etc/skel dans le répertoire personnel -s : le shell -u : choix d'un UID spécifique > val-distribution -o : l'UID n'est pas unique -r : UID privilégié système <= val-distribution -e : date d'expiration du login -f : délai avant verrouillage si mot de passe non changé
  • 90. 90 ž Exemples: useradd -m user useradd -c "login de test" -d /home/logtest -s /bin/bash -g users -u 123 -m logtest
  • 91. 91 ž La commande usermod modifie les paramètres d’un compte et permet aussi de le verrouiller ž Les options sont: -d rép_perso : Le nouveau répertoire de connexion de l'utilisateur. Si l'option -m est fournie, le contenu du répertoire personnel actuel sera déplacé dans le nouveau répertoire personnel, qui sera créé si nécessaire -l login login_name : Le nom de l'utilisateur passera de login à login_name
  • 92. 92 ž -L : Verrouiller le mot de passe d'un utilisateur. Cette option ajoute un `!' devant le mot de passe crypté, ce qui désactive le mot de passe ž -p mot_de_passe : changer le mot de passe ž -s shell : Le nom du nouveau shell de connexion de l'utilisateur ž -u uid : La valeur numérique de l'ID de l'utilisateur. ž -U: Déverrouiller le mot de passe d'un utilisateur. Cela supprime le `!' situé devant le mot de passe crypté.
  • 93. 93 Exemple: usermod -l ahmed newlogin usermod –L linda usermod -g 101 linda usermod -G groupname username ž Il faut s’assurer avant d’exécuter cette commande que l'utilisateur nommé n'est pas en train d'exécuter un quelconque programme quand cette commande est exécutée
  • 94. 94 ž La commande userdel supprime le compte spécifié userdel -r login ž Avec l’option –r, les fichiers présents dans le répertoire personnel de l'utilisateur seront supprimés en même temps que le répertoire lui-même ž Les fichiers situés dans d'autres systèmes de fichiers devront être recherchés et éliminés manuellement
  • 95. 95 ž La commande groupadd crée un groupe : groupadd [-g GID [-o]] [-f] groupe ž Les options : -f envoie un message d’erreur si le groupe indiqué existe déjà -g GID : Cette valeur doit être unique, à moins que l’option -o ne soit utilisée. Avec l’option -g, si le groupe indiqué existe déjà, un autre gid (non utilisé) sera choisi -r ajoute un groupe système
  • 96. 96 ž La commande groupdel supprime le groupe. groupdel nom_groupe ž La commande groupdel modifie les fichiers systèmes, et cause la suppression de toutes les entrées qui se réfèrent à un groupe. ž Mais attention, il ne faut pas oublier de changer dans le fichier /etc/passwd les numéros (GID) du groupe supprimé, si des utilisateurs y appartenaient. ž Il est également essentiel de chercher les fichiers et répertoires de ce groupe pour le changer (dans le cas contraire les fichiers et répertoires risquent d'être inaccessibles). ž Il faut vérifier manuellement les systèmes de fichiers pour s'assurer qu'aucun des fichiers ne reste avec le groupe désigné
  • 97. 97 ž La commande groupmod modifie le groupe, -n renomme le groupe. groupmod [-g gid [-o ]] [-n new_group_name] group Ø-g gid : La valeur numérique de l'identifiant du groupe. § Tous les fichiers qui ont l'ID de l’ancien groupe doit être modifiés manuellement pour leur associer le nouveau groupe Ø -n new_group group: Le nom du groupe sera modifié de group en new_group
  • 98. 98 ž Il existe plusieurs commandes qui permettent de modifier les données d'un fichier très facilement et avec un temps de réponse minime malgré la taille des fichiers traités. ž Ce sont des commandes très utiles pour les administrateurs systèmes.
  • 99. 99 ž Modifier les données d'un fichier ØCoupe un fichier en morceau : split § La commande split permet de couper un fichier en morceau (en plusieurs fichiers), en tapant : § Comme exercice vous allez créer les fichiers fichieraa, fichierab, fichierac, ... – qui contiendront tous 10 lignes. Le premier fichieraa contient les 10 premières lignes, ainsi de suite.
  • 100. 100 ž La commande sort permet de trier les lignes d'un fichier. § Soit le fichier carnet-adresse suivant : § le premier champ est noté 0, le deuxième 1, ainsi de suite.
  • 101. 101 ž Les options de sort sont les suivantes : § -b ignore les espaces et les tabulations en début de champ § -d tri sur les caractères alphanumériques (caractères, chiffres et espace) uniquement § -r inverse l'ordre de tri § -f pas de différence entre minuscule et majuscule § -tx Le caractère x est considéré comme séparateur de champ § -u supprime les lignes doublons § -n trie sur des chiffres
  • 102. 102 ž En faisant sort sans argument : Ø Par défaut le trie se fait sur le premier caractère donc dans l'ordre alphabétique Ø Si nous voulons trier sur le deuxième champ: § nous devons d'abord indiquer que le « : » est le caractère qui sépare deux champs (par défaut c'est l'espace), avec l'option -t : § nous devons ensuite indiquer qu’on veut trier un chiffre avec l'option -n (numérique). § il faut marquer qu'on veut trier à partir du second champ (+1) jusqu'au troisième (-2). § Soit le résultat suivant : § On obtient : Avant
  • 103. 103 ž Pour trier suivant le 4ème champ (numéro 3, tri par ordre alphabétique sur le premier caractère): Ø en mettant +0, il va effectuer un deuxième tri sur le premier champ pour les villes qui commencent par le même caractère Ø En cas d'égalité du premier tri, on fait un dernier tri sur le premier caractère du prénom.
  • 104. ž On peut spécifier la recherche sur un caractère situé à une position particulière, par exemple à la 2eme position du 6eme champ : sort -t: +5.1 /etc/passwd ž Pour plusieurs critères de tri, il faut spécifier derrière chaque champ le type de tri à mettre en œuvre pour ce critère. Par exemple : sort -t: +0d -1 +2nr -3 Ø triera le 1er champ par ordre dictionnaire, et compléter si égalité par un tri sur le 3eme champ par ordre numérique inverse, sort -t: +4.3n -4.5 +4.0n -4.2 Ø triera du 4eme au 6eme caractère du 5eme champ par ordre numérique, et du 1er au 3eme caractère du 5eme champ par ordre numérique, si le premier tri s'est avéré insuffisant. 104
  • 105. 105 ž La commande tr permet de convertir une chaîne de caractère en une autre de taille égale. ž Les options sont les suivantes : § -c Les caractères qui ne sont pas dans la chaîne d'origine sont convertis selon les caractères de la chaîne de destination § -d destruction des caractères appartenant à la chaîne d'origine § -s si la chaîne de destination contient une suite contiguë de caractères identiques, cette suite est réduite à un caractère unique
  • 106. 106 ž La commande tr a besoin qu'on lui redirige en entrée un fichier, le résultat de la conversion s'affichant sur la sortie standard. Ø Pour remplacer le : par un # dans le fichier carnet- adresse, nous taperons : Ø Pour faire la même chose on peut aussi bien éditer le fichier avec cat et rediriger par pipe vers tr, en tapant :
  • 107. 107 ž Pour faire la même chose on peut aussi bien éditer le fichier avec cat et rediriger par pipe vers tr, en tapant : ž On peut utiliser des métacaractères. En tapant : ž Nous allons remplacer les caractères de a à f de minuscule en majuscule. Soit:
  • 108. 108 ž Soit un fichier très long, et on ne veut visualiser que la fin, on dispose de la commande tail. ž La syntaxe est la suivante : $tail +10 mon-fichier ž On obtient toutes les lignes du fichier de la 10eme jusqu'à la fin. $tail -10 mon-fichier ž On obtient les 10 dernières lignes à partir de la fin. On peut indiquer si notre unité est la ligne (par défaut), le bloc ou le caractère avec l'option –t : $tail -10 –c mon-fichier ž On obtient les 10 derniers caractères du fichier.
  • 109. 109 Ø Editer un fichier par le début : head § Si on a un fichier très long, et qu’on ne veuille visualiser que le début, on dispose de la commande head. La syntaxe est la suivante, si on tape : $head +10 mon-fichier § On obtient toutes les lignes du fichier de la 10eme jusqu'au début. $head -10 mon-fichier § On obtient les 10 premières lignes à partir du début. On peut indiquer si l’unité est la ligne (par défaut), le bloc ou le caractère avec l'option -t $head -10 mon-fichier § On obtient les 10 premiers caractères du fichier.
  • 110. 110 Ø Compter les lignes d'un fichier : wc § La commande wc permet de compter le nombre de ligne d'un fichier, mais aussi le nombre de mot ou de caractères. $wc –l mon fichier § La commande wc sans option donne à la fois le nombre de ligne, le nombre de caractères(l'option –c) et le nombre de mots(l'option -w). § Si on veut connaître le nombre de fichier dans un répertoire, la commande sera donc : $ls –l | wc -l
  • 111. 111 ØLa commande cut permet d'extraire certains champs d'un fichier. Ø Les options sont les suivantes : § -c extrait suivant le nombre de caractères § -f extrait suivant le nombre de champs § -dx Le caractère x est le séparateur de champ ØAvec la commande cut, contrairement à sort, le premier champ a comme numéro 1, le deuxième 2 est ainsi de suite.
  • 112. 112 ž Exemple: Ø Va extraire les 10 premiers caractères de chaque ligne, on obtient :
  • 113. 113 ØLa commande : § Va extraire les deuxième au 5ème caractère de chaque ligne. ØLa commande : § Va extraire du 25ème caractère jusqu'à la fin de chaque ligne. ØLa commande : § Va extraire le premier et 4ème champ, le : fixant le séparateur de champ. ØLa commande : § Va extraire du 3ème champ jusqu'au dernier champs
  • 114. 114 ž La commande paste permet la fusion de lignes de fichiers. ž Les options sont les suivantes : Ø -dx Le caractère x définit le séparateur de champ Ø -s Les lignes sont remplacées par des colonnes ž Exemple: Ø Soit le fichier carnet-adresse : Ø Et le fichier travail : Ø En tapant la commande : Ø On obtient:
  • 115. 115 ØCette commande permet d'extraire les lignes communes à deux fichiers ØSoit le fichier carnet adresse1 et carnet-adresse2 ØLa commande : $comm carnet-adresse1 carnet-adresse2 ØNous donnera :
  • 116. 116 ž La commande cmp indique si deux fichiers sont identiques. ž En tapant : $cmp fichier1 fichier2 ž Si les deux sont identiques, la commande ne génère aucune sortie ž s'ils sont différents la commande indique la position de la première différence (ligne et caractère), avec une sortie du genre : $fichier1 fichier2 differ :bytes 34, line 2
  • 117. 117 ž Cette commande permet de rechercher les différences entre deux fichiers. ž La syntaxe est la suivante : Ødiff fichier1 fichier2 ž diff fait en sorte de donner des indications pour que le fichier1 soit identique au fichier2. ž Soit le fichier carnet-adresse et carnet- adresse2 ž La commande : ž Génère comme sortie :
  • 118. 118 ž Ce qui nous indique que pour carnet-adresse soit identique à carnet-adresse2,: Ø il faut que la deuxième ligne du premier fichier soit échangée (c pour change) contre la ligne du second. Ø Il faut aussi supprimer (d pour delete) la cinquième ligne du premier fichier. ž Dans d'autres exemples, on pourrait avoir aussi une sortie du genre : 10,15c 12,17 Ø ce qui signifie que pour que le premier fichier soit identique au second, les lignes 10 à 15 doivent intégralement échangées contre les lignes 12 à17 du second fichier.
  • 119. 119 ž Les expressions régulières sont aussi des suites de caractères permettant de faire des sélections. Elles sont utilisé avec certaines commandes comme grep. ž Les différentes expressions régulières sont : Ø ^ début de ligne Ø . un caractère quelconque Ø $ fin de ligne Ø x* zéro ou plus d'occurrences du caractère x Ø x+ une ou plus occurrences du caractère x Ø x? une occurrence unique du caractère x Ø [...] plage de caractères permis Ø [^...] plage de caractères interdits Ø {n} pour définir le nombre de répétition n du caractère placé devant Ø (définition d'une sous-expression ) § (accessible ensuite par 1, 2, …)
  • 120. 120 ž l'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractère en minuscule. [a-z] caractère permis, [a-z]* recherche d'occurrence des lettres permises. ž L'expression ^[0-9] {4}$ a pour signification, du début à la fin du fichier $, recherche les nombres [0-9] de 4 chiffres {4}. ž /[a2m]/ a, 2 ou m ž /[a-z]/ une lettre minuscule ž /[02-57]/ 0, 2, 3, 4, 5 ou 7 ž /[a-d5-8X-Z]/ a, b, c, d, 5, 6, 7, 8, X, Y ou Z ž /[0-5-]/ 0, 1, 2, 3, 4, 5 ou - ž /[^0-9]/ pas un chiffre ž /[^a-zA-Z]/ pas une lettre ž /[012^]/ 0, 1, 2 ou ^ ž /^abc/ ligne commençant par abc ž /[a-z0-9]$/ ligne finissant par une lettre minuscule ouun chiffre ž /^$/ ligne vide
  • 121. 121 ž La commande grep Ø La commande grep permet de rechercher une chaîne de caractères dans un fichier. Les options sont les suivantes : § -v affiche les lignes ne contenant pas la chaîne § -c compte le nombre de lignes contenant la chaîne § -n chaque ligne contenant la chaîne est numérotée § -x ligne correspondant exactement à la chaîne § -l affiche le nom des fichiers qui contiennent la chaîne Ø Exemple avec le fichier carnet-adresse : Ø La commande : $grep ^[g-n] carnet-adresse Permet d’obtenir toutes les lignes commençant par les caractères compris entre a et d. $grep Brest carnet-adresse Permet d’obtenir les lignes contenant la chaîne de caractère Brest.
  • 122. 122 ž Recherche de fichiers: La commande find § La commande find permet de retrouver des fichiers à partir de certains critères. § La syntaxe est la suivante : § Les critères de recherche sont les suivants : – -name recherche sur le nom du fichier, – -perm recherche sur les droits d'accès du fichier, – -links recherche sur le nombre de liens du fichier, – -user recherche sur le propriétaire du fichier, – -group recherche sur le groupe auquel appartient le fichier, – -type recherche sur le type (d=répertoire, c=caractère, f=fichier normal), – -size recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets), – -atime recherche par date de dernier accès en lecture du fichier, – -mtime recherche par date de dernière modification du fichier, – -ctime recherche par date de création du fichier.
  • 123. 123 ž La commande find doit être utilisé avec l'option -print. ž Sans l'utilisation de cette option, même en cas de réussite dans la recherche, find n'affiche rien à la sortie standard ž La commande find est récursive, c'est à dire où qu’on tape, il va aller scruter dans les répertoires, et les sous répertoires qu'il contient, et ainsi de suite.
  • 124. 124 ØPour chercher un fichier dont le nom contient la chaîne de caractères theme à partir du répertoire /usr, on doit taper : $find /usr –name "theme" –print ØPour rechercher tous les fichiers se terminant par .c dans le répertoire /usr, on tape : $find /usr –name " *.c " –print § On obtient toute la liste des fichiers se terminant par .c sous les répertoires contenus dans /usr (et dans /usr lui même).
  • 125. 125 Ø Recherche suivant la date de dernière modification § Pour connaître les derniers fichiers modifiés dans les 3 derniers jours dans toute l'arborescence (/), on tape : Ø Recherche suivant la taille § Pour connaître dans toute l'arborescence, les fichiers dont la taille dépasse 1Mo (2000 blocs de 512Ko), on tape : Ø Recherche combinée § On peut chercher dans toute l'arborescence, les fichiers ordinaires appartenant à olivier, dont la permission est fixée à 755, on obtient : find / -size 1M -print
  • 126. 126 ž On peut combiner les critères avec des opérateurs logiques : Ø (critère1 -a critère2) correspond au et logique, Ø !critère non logique, Ø (critère1 -o critère2) ou logique,
  • 127. 127 ž Recherche en utilisant les opérateurs logiques Ø Si on veut connaître les fichiers n'appartenant pas à l'utilisateur olivier, on tape : § ! -user olivier, est la négation de -user olivier, c'est à dire c'est tous les utilisateurs sauf olivier. Ø Recherche des fichiers qui ont pour nom a.out et des fichiers se terminant par .c. On tape : § On recherche donc les fichiers dont le nom est a.out ou les fichiers se terminant par *.c, une condition ou l'autre. Ø Recherche des fichiers qui obéissent à la fois à la condition a pour nom core et à la condition b une taille supérieure à 1Mo.
  • 128. 128 ž Une fonction intéressante de find est de pouvoir être utilisé avec d'autres commandes UNIX. ž Par exemple: Find . –type f –print | grep ¢*.conf¢ ž En tapant cette commande on rechercher dans le répertoire courant tous les fichiers se terminant par .conf
  • 129. 129 ž Bien que la liste ne soit pas exhaustive, vous pouvez constater la précision avec laquelle find permet de trouver et afficher les informations. Mais cela ne s'arrête pas là ! Si nous avons déployé tous ces efforts pour trouver nos fichiers et/ou nos répertoires, c'est pour en faire quelque chose. Ø les copier, les déplacer, les supprimer, changer leurs droits d'accès, etc ž En plus de nous aider dans la recherche de nos précieux fichiers, find nous permet d'enchaîner notre recherche avec une action permettant d'exploiter les éléments trouvés.
  • 130. 130 ž Le paramètre -exec nous permet cet enchaînement en exécutant n'importe quelle commande du shell sur les fichiers issus de la recherche. ž Supposons par exemple que nous souhaitions supprimer tous les fichiers objets (*.o) d'un projet. Nous n'aurions qu'à taper cette commande : ž find projet/src/ -name "*.o" -exec rm -f {} ; Ø Nous utilisons ici la commande rm avec son paramètre -f pour ne pas avoir de confirmation à donner. Ø les accolades représentent l'occurence de chaque fichier trouvé et l'antislash et le point virgule sont là pour clôturer la commande.
  • 131. 131 ž Introduction Ø Un système Unix est multitâche. Ø Cela signifie qu’à tout instant, plusieurs programmes différents peuvent fonctionner en même temps sur la machine. Ø Évidemment, cela est physiquement impossible sur les machines dotées d’un seul processeur. Ø Le noyau (cœur du système) consacre alors quelques fractions de seconde tour à tour à tous les programmes actifs, ce qui à l’échelle de temps d’un utilisateur humain donne une illusion de parallélisme, de simultanéité
  • 132. 132 ž On appelle « processus » une instanciation d’un programme en cours de fonctionnement. ž À chaque processus est attaché un « code » (le code du programme) et des données (sur lesquelles il travaille). ž Chaque processus reçoit une portion de mémoire dédiée, à laquelle aucun autre processus ne peut accéder. ž Il la rend au système à l’issue de son exécution. ž Il s’exécute avec les droits de l’utilisateur qui l’a invoqué, sauf exceptions. ž Le processeur physique commute entre les processus, sous la direction d’un ordonnanceur.
  • 133. 133 Ø Dans le cas d’un système à temps partagé, tous les processus progressent dans le temps mais un seul s’exécute à la fois. Ø La vitesse d’exécution des processus ainsi que l’ordonnancement peut changer si on exécute les processus à nouveau dû à l’état du système.
  • 134. 134 Ø Un numéro de processus unique PID (Process ID) : chaque processus Unix est numéroté afin d’être identifié par rapport aux autres processus. § Le premier processus lancé sur le système est le processus init qui n'a pas de père et qui a pour PID 1. § Lancer plusieurs fois le même programme donne différents PID.
  • 135. 135 Ø Un numéro de processus parent PPID (Parent Process ID) : identité du processus père (créateur). § Un processus peut lui même créer un autre processus, il devient donc un processus parent ou père, et le nouveau processus, un processus enfant. § Ce dernier est identifié par son PID, et le processus père par son numéro de processus appelé PPID (Parent Process Identification). § Le premier processus est le seul qui ne suit pas cette règle.
  • 136. 136 ž Un numéro d’utilisateur UID et numéro de groupe et GID : Ø C’est utile pour que le système sache si le processus a le droit d’accéder à certaines ressources ou non. Ø Les processus fils héritent de ces informations. ž Priorité : Ødans un environnement multitâche, les processus ne possèdent pas la même priorité. ØLes processus de haute priorité sont traités en premier (c’est la plus petite valeur).
  • 137. 137 ž Durée de traitement ØCette durée correspond au temps d’exécution écoulé depuis le dernier réveil du processus. ØC’est l’ordonnanceur du système qui gère les priorités et le temps d’exécution. ž Répertoire de travail actif Øà son lancement, le répertoire courant (celui depuis lequel le processus a été lancé) est transmis au processus.
  • 138. 138 ž Fichiers ouverts Øcorrespond à la table des descripteurs des fichiers ouverts. ØPar défaut au début seuls trois sont présents : 0, 1 et 2 (les canaux standards). ØA chaque ouverture de fichier ou de nouveau canal, la table est mise à jour. ØA la fermeture du processus, les descripteurs sont fermés.
  • 139. 139 Ø Terminal d’attache TTY : § le terminal auquel est attaché le processus. Ø État du processus STATE : § endormi, en attente, en exécution, etc. Ø Date de lancement STIME : § date de lancement du processus Ø Un processus maintient deux propriétaires : § un propriétaire réel, qui représente l’utilisateur qui a créé ce processus, § et un propriétaire effectif, qui code les privilèges dont dispose ce processus (=réel sauf si le propriétaire a été changé par setuid). § On trouve d’autres informations comme l’UID effectif et réel ainsi que le GID effectif et réel.
  • 140. 140 ž Durant son temps de vie le processus peut changer d’états et passer par divers états, certains états de ces états existent dans la plupart des systèmes d'exploitation : Ø Initialisation (created ou new) : § C'est le premier état d'un processus. Il y attend que l'ordonnanceur le place dans l'état prêt, ce qui peut prendre plus ou moins longtemps. Ø Prêt ou Exécutable (ready, waiting ou runnable) : § Dans cet état, le processus a été chargé en mémoire centrale et attend son exécution sur le processeur. § Les processus disponibles sont rangés dans une file ; les autres, ceux qui attendent quelques chose (données provenant du disque dur, une connexion internet, etc.) ne sont pas pris en compte. § Cette file d'attente (ready queue) est gérée par l'ordonnanceur. § le processus est en exécution mais il est en attente de libération du processeur qui est utilisé par un processus actif. § Pour l'utilisateur, ceci est invisible car l'opération est très rapide.
  • 141. 141 ž Élu ou Actif (running) : Ø Le processus est en cours d'exécution par le processeur le processus dispose de toutes les ressources dont il a besoin. Ø le processus utilise le processeur et est donc en train de réaliser des actions pour lequel il a été conçu. ž Endormi ou Bloqué (blocked) : Ø Le processus a été interrompu ou attend un événement (la fin d'une opération d'entrée/sortie, un signal, ...). Ø Par exemple, un processus peut attendre un événement pour redevenir Actif, comme par exemple, que l'on appuie sur une touche lors de l'affichage d'un message. ž Terminé (terminated) : Ø Le processus est terminé, c'est-à-dire soit le résultat est connu, soit le programme a été forcé de s'arrêter.
  • 142. 142 ž D’autres états peuvent aussi être possible : Ø Swappé : Lorsque qu'un processus est transféré de la mémoire centrale dans la mémoire virtuelle, il est dit « swappé ». § Un processus swappé peut être dans un état endormi ou prêt. Ø Préempté : L'ordonnanceur a décidé de suspendre l'activité d'un processus. § Par exemple, un processus qui consomme trop de temps CPU finira par être préempté. Ø Zombie : le processus vient de réaliser un exit, il apparaît uniquement dans la table des processus où il est conservé le temps pour son processus père de récupérer le code de retour § un processus zombi est un processus terminé mais le système ou le processus parent n'en a pas été informé
  • 143. 143 ž Exécution en espace utilisateur (user mode): Øle processus n’accède qu’à son espace d’adressage et exécute des instructions du programme correspondant. Ø Seul certaines instructions sont disponibles ž Exécution en espace noyau (kernel mode): ØLe processus exécute des instructions du noyau et non pas du programme en cours et l'exécution du processus n'est pas limité. Ø Il peut accéder à des données externes à son espace d’adressage
  • 144. 144 ž Un processus peut donc avoir les états suivants : Ø – R, « Running » en train de s’exécuter ; Ø – r, « runnable », prêt à s’exécuter ; Ø – W, «Waiting », en attente d’un événement ; Ø – Z, « Zombie », mort.
  • 145. 145 ž Lorsqu’un processus est dans l’état « en train de s’exécuter » R, il peut exécuter des instructions du processeur ž Parfois, le noyau peut satisfaire l’appel système immédiatement par exemple, un appel à gettimeofday calcule l’heure actuelle et retourne immédiatement au code utilisateur. ž Souvent, cependant, un appel système demande une interaction prolongée avec le monde réel; un processus exécutant un tel appel système est mis en attente d’un événement (état W), et ne sera réveillé (passé à l’état « prêt à s’exécuter » r) que lorsque l’appel système sera prêt à retourner. ž Un tel appel système est dit bloquant.
  • 146. 146 ž Considérons par exemple le cas d’un appel système read demandant des données stockées sur le disque. ž Au moment ou le processus effectue l’appel système, le contrôleur de disque est programmé pour lire les données, et le processus appelant est mis en attente de l’événement une « requête de lecture terminée ». ž Quelques millisecondes plus tard, lorsque la requête aura abouti, le processus sera réveillé et remis dans l’état «prêt à s’exécuter ».
  • 147. 147 ž Les processus p1 et p2 sont lancés depuis deux agences différentes : ž À noter que : Ø les variables courant et nouveau sont locales à chaque processus Ø les deux processus se déroulent en parallèle. Ø L’exécution des opérations peut être entrelacée dans un ordre quelconque, à condition de respecter l’ordre local pour chacun des processus processus p1 processus p2 1. courant = lire_compte (1867A) 2. nouveau = courant + 1000 3. ecrire_compte (1867A, nouveau) 1. courant = lire_compte (1867A) 2. nouveau = courant + 3000 3. ecrire_compte (1867A, nouveau)
  • 148. 148 ž Exemples d’exécution Ø exécution 1 : p2.1 ; p2.2 ; p2.3 ; p1.1 ; p1.2 ; p1.3 Ø exécution 2 : p1.1 ; p1.2 ; p2.1 ; p2.2 ; p2.3 ; p1.3 Ø quels sont les résultats ? que peut-on en conclure ? 2.1. courant = lire_compte (1867A) 2.2. nouveau = courant + 3000 2.3. ecrire_compte (1867A, nouveau) 1.1. courant = lire_compte (1867A) 1.2. nouveau = courant + 1000 1.3. ecrire_compte (1867A, nouveau) 1.1. courant = lire_compte (1867A) 1.2. nouveau = courant + 1000 2.1. courant = lire_compte (1867A) 2.2. nouveau = courant + 3000 2.3. ecrire_compte (1867A, nouveau) 1.3. ecrire_compte (1867A, nouveau)
  • 149. 149 ž Accès concurrent aux variables partagées ? ž Pour cela il faut : Ø Assurer que l’ensemble des opérations (consultation + mise à jour) est exécutée de manière indivisible (atomique) Ø pas d’interférences possibles de la part d’autres opérations exécutées en parallèle Ø Si A1 et A2 sont atomiques, le résultat de l’exécution parallèle de A1 et A2 ne peut être que celui de A1 ; A2 ou de A2 ; A1. Ø On dit aussi que la séquence d’actions 1; 2; 3 (dans p1 et dans p2) est une section critique : elle doit être exécutée en exclusion mutuelle (un seul processus au plus peut être dans sa section critique à un instant donné).
  • 150. 150 ž Déclaration et initialisation de variables communes ž Les opérations “entrée en section critique”, ”sortie de section critique” doivent garantir l’exclusion mutuelle. ž Il existe plusieurs modes de réalisation d’une section critique : par attente active, en utilisant des primitives spéciales processus p1 ... entrée en section critique section critique sortie de section critique ... processus p2 ... entrée en section critique section critique sortie de section critique ...
  • 151. 151 ž On peut visualiser les processus qui tournent sur une machine avec la commande : ps (options) : -e (affichage de tous les processus) et -f (affichage détaillée). ž ps -ef donne : Ø C : facteur de priorité (-20 plus élevée à +19 la plus petite, défaut 0) Ø STIME : correspond à l'heure de lancement du processus Ø TTY :correspond au nom du terminal Ø TIME : correspond à la durée de traitement du processus Ø COMMAND correspond au nom du processus.
  • 152. 152 ž liste des processus BSD -a : processus détenus par les autres utilisateurs -u : nom du propriétaire du processus -x : processus sans terminal associé -l : description complète -t : terminal particulier ž liste des processus Système V -f : ou l : description plus ou moins longue -e : liste tous les processus -p : processus dont le numéro suit l'option p -t : processus attachés au terminal spécifié -u : processus appartenant au propriétaire dont le nom ou l'UID est donné
  • 153. 153 ž $ ps axu : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 1104 464 ? S 00:39 0:03 init root 2 1.1 0.0 0 0 ? SW 00:39 10:14 [kapmd] root 3 0.0 0.0 0 0 ? SW 00:39 0:00 [kswapd] root 4 0.0 0.0 0 0 ? SW 00:39 0:00 [kflushd] bin 157 0.0 0.2 1200 396 ? S 00:40 0:00 portmap ž STAT : indique l'état du processus : § R : actif ( running) § S : non activé depuis moins de 20 secondes (sleeping) § I : non activé depuis plus de 20 secondes (idle) § T : arrêté (suspendu) § Z : zombie ž %CPU: Taux de temps CPU utilisé par le processus. ž %MEM: Taux de mémoire utilisé par le processus. ž VSZ: total de mémoire utilisé par le process (en taille de bloc 1K contrairement au pourcentage utilisé %MEM) ž RSS: Real Set Size, total de mémoire physique utilisé par le processus.
  • 154. 154 ž Processus permanents Ø Certains processus sont permanents, c'est à dire qu'ils sont lancés au démarrage du système et arrêtés uniquement à l'arrêt du système. Ø On appelle ces processus des daemons ž Changer la priorité d'un processus Ø Les processus tournent avec un certain degré de priorité, un processus plus prioritaire aura tendance à s'accaparer plus souvent les ressources du système pour arriver le plus vite possible au terme de son exécution. Ø C'est le rôle du système d'exploitation de gérer ces priorités. Ø On dispose de la commande nice pour modifier la priorité d'un processus. La syntaxe est la suivante : $nice –valeur commande Ø Plus le nombre est grand, plus la priorité est faible. Ø Par exemple une valeur de 0 donne, la priorité la plus haute 20 donne la priorité la plus faible. Ø La fourchette de valeur dépend de l'UNIX qu'on utilise.
  • 155. 155 $nice -5 ps –ef Ø Généralement on utilise nice sur des commandes qui prennent du temps, sur des commandes courantes l'effet de nice est imperceptible. Ø On l'utilisera par exemple pour compiler un programme. ž Arrêter un processus Ø Un utilisateur ne peut arrêter que les processus qui lui appartiennent Ø Seul l'administrateur système a le droit d'arrêter un processus ne lui appartenant pas. Ø On peut interrompre aussi un processus depuis un terminal père par: § <CTRL><C>: stoppe le processus § <CTRL><Z>: suspend le processus § <CTRL><D>: fin du terminal (et donc du processus)
  • 156. 156 ž Pour lancer une commande quelconque, il faut saisir le nom après le prompt du shell, tant que la commande n'est pas terminée, on n’a plus la main au niveau du shell, on ne dispose plus du prompt. ž Si la commande prend un certain temps, le shell ne donnera pas la main tant que la commande n'est pas terminée, on est obligé de lancer un autre shell, pour taper une autre commande. ž On dispose d'une technique simple qui permet de lancer une commande à partir d'un shell, et de reprendre aussitôt la main. ž Il suffit de rajouter un & à la fin de commande. ž Celle-ci se lancera en " tâche de fond ", et on revient directement au prompt du shell. ž En tapant une commande en tâche de fond, on aura à l'affichage:
  • 157. 157 ž A la suite de la saisie de la commande suivie d'un &, le shell donne immédiatement la main, et affiche le numéro du PID du processus lancé. ž En lançant une commande à partir du shell sans le & à la fin, et si celle-ci prend du temps à rendre la main, on peut faire en sorte qu'elle bascule en tâche de fond, pour reprendre la main. ž $progexec Ø On peut basculer le programme progexec en tâche de fond en tapant, CTRL+Z, il va afficher : 311 Stopped Ø 311 étant le PID du processus progexec . On Tape ensuite bg (pour background), ce qui s'affiche c’est : [311] Ø Ca y est le processus progexec est en tâche de fond et le shell rend la main.
  • 158. 158 ž La commande sleep(n) : Ø bloque le processus pendant n secondes ž La commande pause : Ø bloque le processus jusqu’à la réception d’un signal par un autre processus ž Créer un Processus Ø L’appel système fork permet de créer un processus Ø Le processus créé (fils) est un clone (copie conforme) du processus créateur (père) Ø Le père et le fils ne se distinguent que par le résultat rendu par fork § pour le père : le numéro du fils (ou -1 si création impossible) § pour le fils : 0 ž Exemple: if (fork() != 0) { Printf(" je suis le pèren");} else { Printf(" je suis le filsn");}
  • 159. 159 ž Un signal est un événement envoyé à un processus par un autre processus. ž Vis-à-vis du processus destinataire, il est asynchrone(non lié aux étapes de son exécution). ž Il existe un certain nombre de signaux prédéfinis correspondant à différentes actions requises de la part du destinataire ž Exemple : Ø kill (pid, sig) : envoie le signal sig au processus pid l’envoi d’un signal cause la terminaison du processus récepteur (d’où le nom) Ø On dispose de la commande kill pour arrêter un processus. Ø Pour arrêter un processus, il faut connaître son PID (commande ps), puis écrire : $Kill -9 PID
  • 160. 160 ž Les 3 plus importants: Ø SIGHUP –valeur 1 –Fin de session Ø SIGINT –valeur 2 –Interruption du processus Ø SIGKILL –valeur 9 –Interruption brutale du processus Ø Émission d’un signal par «kill -<n°> <processus» § Exemple : kill –9 PID ž Synchronisation entre un processus père et ses fils Ø Wait(statut) suspend l'exécution du processus courant jusqu'à ce qu'un enfant se termine, ou jusqu'à ce qu'un signal à intercepter arrive. Ø wait renvoie le pid du fils. Ø Exemple : le père attend la fin d’un fils spécifié (dont le numéro est dans childpid) : while (childpid != wait(status));
  • 161. 161 ž Nous allons étudier dans ce chapitre nous allons comprendre les mécanismes de base de l’interprétation des commandes par le shell. ž Les variables Ø variables définies par l’utilisateur Ø variables d’environnement, Ø variables spéciales et réservées par le shell lui-même.
  • 162. 162 ž Nous appellerons variable simple toute variable définie par l’utilisateur pour ses propres besoins. ž Mécanismes d’affectation: Ø On peut affecter une chaîne de caractères , ou un entier aux variables, toute affectation répond à la syntaxe suivante: variable=valeur Ø Attention, il n’y a pas d’espace de part et d’autre du signe «=». ž Règle de base Ø Pour définir le contenu d'une variable, on écrit simplement son nom, sans le signe $ ; Ø Tandis que pour utiliser le contenu d'une variable, on fait précéder son nom du signe $.
  • 163. 163 ž Pour désigner une variable, il suffit d’utiliser la syntaxe suivante: $variable Ø Si la variable doit être suivie d’une valeur autorisée (exemple de nom de variable auquel on ajoute séquentiellement un nombre), la notation est alors la suivante: ${variable}nombre -> jour1 ž Affichage d’une variable: Ø La commande: $echo [-n] [texte] $variable Ø permet d’afficher la valeur de la variable. Ø On peut aussi l’intégrer dans du texte. Ø L’option –n permet d’éviter le passage à la ligne après l’affichage.
  • 164. 164 Ø Il est parfois utile de laisser l’utilisateur entrer la valeur de ses variables. Ø La commande: read variable Ø lit les valeurs sur l’entrée standard. Ø Le premier mot est affecté la première variable et ainsi de suite. Ø S’il y a plus de variables que de mot saisis, le shell affecte aux dernières variables la chaîne vide. read nom prenom age
  • 165. 165 ž D’ordinaire, une variable n’est utilisée que dans le shell- script où elle reçoit son affectation, si on souhaite l’utiliser pour les programmes appelés ultérieurement, on doit l’exporter. ž La commande: export variable ž Permet de rendre global (visible pour des shells secondaires) des variables qui, par défaut, sont locales au shell courant. ž Exemple: $ var=“127.0.0.1” $ export var $ echo $var $127.0.0.1
  • 166. 166 ž Visualisation des variables disponibles Ø La commande: printenv § affiche les valeurs des variables de l’environnement du processus en cours, c’est à dire celles qu’il a reçues et celles qu’il a envoyées. Ø Dans un script la commande: set affiche les valeurs des variables disponibles, c’est à dire toutes les variables ž Supprimer une variable: ž La commande: unset variable ž supprime la variable de la liste des variables disponibles.
  • 167. 167 ž Substitutions: pouvoir effectuer un certain nombre de substitutions lors de l’affichage: Ø $paramètre ® affiche la valeur courante de paramètre Ø ${paramètre} ® affiche la valeur courante de paramètre et autorise la concaténation, Ø ${paramètre:-valeur} ® affiche la valeur courante de paramètre si elle est non nulle, sinon affiche valeur, Ø ${paramètre:=valeur} ® affiche la valeur courante de paramètre si elle est non nulle, sinon affiche valeur et affecte à paramètre valeur, Ø ${paramètre:?valeur} ® affiche la valeur courante de paramètre si elle est non nulle, sinon on écrit valeur sur la sortie standard et on sort. Ø Si valeur est omise, alors, on écrit sur la sortie standard le message: «paramètre : parameter null or not set»,
  • 168. 168 ž Les valeurs des variables sont accessibles aux commandes lancées par le shell. ž L'ensemble de ces valeurs constitue l'environnement. ž Quelques variables d'environnement: Ø SHELL : contient le nom de votre shell. Ø HOME : contient le nom de votre répertoire personnel. Ø USER : contient votre nom de login. Ø LOGNAME : la même chose que USER. Ø PATH : contient une liste de répertoires dans lesquels le shell va chercher les commandes. ž On accède à leur valeur en les faisant précéder d’un «$» ž Pour visualiser toutes les variables d’environnement: «env»
  • 169. 169 ž Un certain nombre de variables sont utilisées dans les scripts afin de déterminer et de séparer les paramètres: Ø $#: donne le nombre d’arguments passés au script, Ø $*: donne la liste des paramètres passés au script=« $1 $2 …$n" Ø $n: valeur du n-ième argument du script, Ø $@: équivalent à $*, mais «$@» signifie: "$1", "$2",..., "$n" Ø $$: le numéro de processus du script, Ø $!: le numéro de processus du dernier programme lancé en background, Ø $?: le code de retour du dernier programme lancé.
  • 170. 170 ž La commande Test est utilisée dans de nombreux cas par les structures de contrôle du shell.: test condition && code1 || code2 ou [ condition ] && code1 || code2 ž Cette commande renvoie 0 si la condition est vérifiée et une valeur différente de 0 sinon. ž Dans la deuxième syntaxe, il faut faire attention à mettre des espaces entre les crochets et la condition. ž code1 && code2: exécute code1, si le code de retour est OK alors on exécute code2, ž code1 || code2 : exécute code1, si le code de retour est mauvais alors on exécute code2.
  • 171. 171 ž Options de teste Ø test -w fichier : vrai si l’utilisateur a le droit d’accès en écriture sur fichier (s’il existe), Ø test -x fichier: vrai si l’utilisateur a le droit d’accès en exécution sur le fichier (s’il existe), Ø test -c fichier: vrai si le fichier est un fichier caractère spécial (et s’il existe), Ø test -b fichier: vrai si le fichier est un fichier bloc (et si il existe), Ø test -s fichier: vrai si fichier n’est pas vide, Ø test -L fichier: vrai si fichier est un lien symbolique, Ø test fichier1 -nt fichier2: si fichier a été modifié plus récemment que fichier2, Ø test -n chaîne: vrai si chaîne n’est pas vide, Ø test -z chaîne: vrai si chaîne est vide,
  • 172. 172 ž Options de teste Ø [ nb1 -eq nb2 ]: vrai si les deux nombres entiers nb1 et nb2 sont égaux, on peut remplacer eq par -ne (différent), -gt (supérieur), -ge (supérieur ou égal), -lt (inférieur), -le (inférieur ou égal). Ø [ chaine1 = chaine2 ]: vrai si les deux chaînes sont identiques, Ø [ chaine1 != chaine2 ]: vrai si les deux chaînes ne sont pas identiques, Ø -a: opérateur logique et, Ø -o: opérateur logique ou, Ø !: négation logique ž Exemple: test -f fichier && echo "fichier "|| echo "pas fichier" test ( -d rep -o -f fic ) -a $variable=“2“ && echo “ok” || echo “non ok”
  • 173. 173 ž On appelle script shell est un fichier qui contient des noms de commandes et des instructions internes au shell. ž Les commandes contenues dans le script sont alors lancées comme si l’utilisateur les tapait sur la ligne de commande. ž Comment écrire un script: Ø Ouvrir un éditeur (kate) Ø Écrire en première ligne: § #/bin/bash (shell utilisé: bourne shell) Ø Écrire les autres instructions Ø Sauvegarder dans un fichier avec extension .sh
  • 174. 174 ž Lancement par le nom du shellscript (votre script) Ø Si l’utilisateur a le droit de lecture et d’exécution sur le shellscript, il peut le lancer en tapant simplement son nom. Ø Il se comporte alors comme n’importe quelle commande. Ø il est bon de lancer le script comme suit: ./shellscript ž Lancement par appel explicite du shell Ø Si le script porte un attribut de lecture, on peut le lancer par appel explicite du shell : Ø /bin/ksh nom_script Ou /bin/sh nom_script Ø Dans ce cas, un nouveau shell est lancé, celui-ci lit les commandes du script et les fait exécuter comme si elles avaient été tapées au clavier. ž Lancement par appel de la commande interne «.» Ø La dernière solution consiste à faire précéder le nom du fichier par un «.»: . shellscript
  • 175. 175 ž if..then..else..fi: ž Syntaxe: if test then liste_de_commandes else liste_de_commandes fi ž teste la valeur renvoyée par le test après le mot if et en fonction de ce code, lance la liste de commande appropriée (si le code=0 alors on exécute les commandes après le mot then sinon les commandes après le mot else).
  • 176. 176 ž if..then..else..fi: ž Exemple: if [ -r $1 ] ; then echo "vous avez le droit de lire le fichier $1 " else echo "vous n'avez pas le droit de lire le fichier $1" fi ž il est fréquent de remplacer le saut de ligne qui se trouve après la condition par un caractère point-virgule ž $1 est le premier argument passé au script lors de son exécution
  • 177. 177 ž if..then..else..fi: ž Exemple: Ø Voici donc un exemple implémentant la commande "let" pour déterminer si une variable est bien de type "entier" : #!/bin/sh var=$1 if let $var 2>/dev/null then echo "$var numérique" else echo "$var non numérique" fi
  • 178. 178 ž if..then..else..fi: ž Syntaxe: ØIl existe une variante pratique de if: if condition then liste_commandes [elif liste_coonditions then liste_commandes] [else liste_commandes] fi
  • 179. 179 ž if..then..else..fi: ž Exemple: ¤ if test -f $1 then file $1 else echo " le fichier n'existe pas " fi ¤
  • 180. 180 ž Exemple: programme qui supprime interactivement selon la réponse echo -n "Suppression interactive ?" read reponse if test $reponse=" oui " then rm -i $1 else rm $1 fi
  • 181. 181 ž case..esac: Ø Nous avons aussi besoin de structures permettant de faire des chois multiples: case mot in modèle 1) liste_commande;; .. modèle n) liste_commande;; *) liste_commande;; esac Ø Le premier modèle rencontré qui répond à la valeur de mot indique la liste de commandes à exécuter. Ø Si mot ne correspond à aucun modèle, l’instruction se poursuit jusqu’à la condition *) et si celle-ci n’existe pas, jusqu’au esac.
  • 182. 182 ž case..esac: Ø Les modèles sont de la forme: § valeur1 | valeur2 | ... | valeurn § Dans les modèles, on peut utiliser les caractères spéciaux *, ?, [] comme dans le cas de la recherche d’un fichier. § Exemple: programme qui supprime interactivement selon la réponse echo -n "Suppression interactive ?" read reponse case $reponse in o|O|oui|OUI) rm -i $1;; n|N|non|NON) rm $ 1;; *) echo "Réponse non valide";; esac
  • 183. 183 ž for..do..done: Ø Certains traitement sont répétitifs, une commande doit être lancée pour un grand nombre de paramètres du shellscript. Ø La syntaxe : for variable [in mots...] do liste_commandes done Ø variable prend tour à tour toutes les valeurs de la liste des mots (qui suivent in). Ø Pour chacune de ces valeurs, la liste de commandes est exécutée.
  • 184. 184 ž si la liste est omise, variable prend alors les valeurs $1, $2,… ž Exemple: programme qui recopie tous les fichiers du répertoire courant dans une autre : for i in ` *.c ` do cp $i rep/ //il faut créer le répertoire avant Done for i in `ls` do cp $i dir/ echo "$i copie " done //N'oublier pas les ` qui force l'exécution du ls.
  • 185. 185 for i in 1 3 4 6 do echo $i done ž for ((i=0 ; $i<=10 ; i++)); do echo $i; done
  • 186. 186 ž while..do..done: While liste_de_conditions do liste_de_commandes done ž exécute la liste de commandes tant que le code retour de les conditions sont vraies ( 0).
  • 187. 187 ž while..do..done: ØExemple: programme qui affiche tous les paramètres d’un script (un par ligne) while test $1 do echo $1 shift done
  • 188. 188 ž until..do..done: ØCette commande est semblable à la précédente à la différence près que la sortie de la boucle s’effectue si la liste de conditions qui suit until renvoie 0. until liste_de_conditions do liste_de_commandes done
  • 189. 189 ž until..do..done: ØExemple: echo "Tapez le mot de passe : " read password until test $password = "mot de passe correct" do echo "Mot de passe incorrect." echo "Tapez le mot de passe" read password done
  • 190. 190 ž Instructions liées aux boucles: Ø A l’intérieur de ces différentes structures, il est important que l’utilisateur puisse fixer lui-même et selon ses propres critères la sortie de boucles. Ø La commande: continue [n] permet de sauter à la fin de la boucle et de recommencer une nouvelle boucle. Ø La commande: break [n] provoque, quand à elle la sortie de la boucle en cours et passe à l’instruction qui suit la boucle. ž Dans les deux cas, l’entier n permet d’indiquer que l’action se porte sur une boucle externe. ž Par exemple, break 2 sortira de la boucle qui englobe la boucle dans laquelle cette instruction est écrite.
  • 191. 191 ž expr arguments... ž Exemple: programme qui incrémente la valeur d’une variable de 1: Echo "affichage des nombres entiers <10:" a=1 while [ $a -lt 10 ] do echo $a; a=$((a+=1)); done
  • 192. ž function nom_fct ž { ž suite_de_commandes ž } ž nom_fct () { commande... } 192
  • 193. ž fonct() { echo Je suis appelé avec $1 } ž fonct 4 # affiche 4 ž fonct coucou # affiche coucou 193
  • 194. #!/bin/bash function decrement { if (( i > 0 )) then ((i--)) fi } 194
  • 195. #!/bin/bash function min(){ if [ -n "$1" ] && [ -n "$2" ] then if [ "$1" -lt "$2" ] then VAL=$1 else VAL=$2 fi fi echo "$VAL est la plus petite valeur "} 195
  • 196. #!/bin/bash recursion=$1 # Nombre fournit en argument. count=1 recurse () { var=$1 while [ $var -gt 1 ] do # echo "Recursion count = "$count" +-+ $var = $var" ((count=count * var));(( var-- )) recurse $var done } recurse $recursion echo "le factoriel est $count" 196