Upload
nguyenliem
View
212
Download
0
Embed Size (px)
Citation preview
11
Programmation système &
3ème année Licence MIAGE
Réseaux
Philippe LahireUniversité de Nice Sophia-Antipolis
Octobre 2012
Ce cours fait de nombreux emprunts à celui de R. RousseauCe cours fait de nombreux emprunts à celui de R. Rousseau
Version Octobre 2012 N°2
Organisation du cours
Planning :Cours: 12 séances (1h30)Cours: 12 séances (1h30)TP: 12 séances (1h30)
Contrôle continu :TP: deux à trois TP notésun ou deux contrôles courts + contrôle terminal (1h30)
Note complémentaire :Le travail : Motivation Compréhension ProgressionLe travail : Motivation, Compréhension, Progression,…La tenue : Assiduité, Respect,…
Matériel : PC sous linux
22
Version Octobre 2012 N°3
Programme
Système de FichiersEntrée sortie + API (read write )Entrée-sortie + API (read, write…)Notion de processus + API (fork, exec)Tubes + API (pipe)Signaux + API
LangageLangage : • principalement CC
Version Octobre 2012 N°4
Organisation des enseignements
cours Semaine TP
1 Introduction + Entrées-Sorties 42
2 Introduction + Entrées-Sorties 42
3 Systèmes de Fichiers 43 TP N°1 : E/S (1h30)
4 Systèmes de Fichiers (prog) 45 TP N°1 : E/S (1h30)
5 Processus 46 TP N°2 : Syst. Fich. (1h30)
6 Processus (prog) 48 TP N°2 : Syst. Fich. (1h30)
7 Tubes 49 TP N°3 : Processus Fork (1h30)
8 Tubes 50 TP N°4 : Processus exec (1h30)
9 Signaux 51 TP N°4 : Processus exec (1h30)
10 Signaux 2 TP N°5 : Tubes (1h30)
3 TP N°6 : Signaux(1h30)
11 Révision/Rattrapage 4 TP N°6 : Signaux(1h30)
TP Révision/ Rattrapage
12 Contrôle Terminal TP Révision / Rattrapage
33
Version Octobre 2012 N°5
Tentative de bibliographie
1. S. Harbison & G. Steele Jr. C, a reference manual (1st ed. 1984) Prentice Hall, 2nd edition, 1987, 404 p.
2. B. Kernighan & D. Ritchie “The C Programming Language (1st ed. 1978)”,CC g g g g g ( ) ,
Prentice Hall, 2nd ed., 1988. Traduction française Masson, 1990.3. A. Tannenbaum “ Systèmes d’exploitation : systèmes centralisés,
systèmes distribués” MacGraw Hill, 1990. Traduction française (2e ed) Dunod, 1999
4. A. Siberschatz & P. Galvin “ Operating Systems Concepts ”, 5e ed, Addison-Wesley, 1998.
5. J. Beauquier & B. Berard “Systèmes d’exploitation : concepts et algorithmes ” MacGraw Hill, 1990.
6. W. Stevens “Advanced Programming in the Unix environment” Addison Wesley 1992 744 p
Conc
epts
Conc
epts
ixix Wesley, 1992, 744 p.7. M.J. Bach “Conception du système Unix”, Prentice Hall, 1986. Traduction
française Masson, 1991.8. J.M. Rifflet “La programmation sous Unix”, Ediscience intern., 3ème éd.,
1993, 630 p.9. U. Vahalia “Unix Internals : the new Frontiers” Prentice Hall, 199610. A.D. Solomon “Le guide officiel sur l’architecture et le noyau Windows
NT” 2nd ed., Microsoft Press, 1998.11. Site microsoft
Uni
Uni
Win
dow
sW
indo
ws
Version Octobre 2012 N°6
Documentation en ligne
Sur le langage CSur le langage CEn L2MI (Gilles Menez) : ( )
www-mips.unice.fr/˜menez/L2/L2cours.htmlCours vidéo sur le langage C de l’Université de Paris VI : www.infop6.jussieu.fr/cederoms/Videoc2000/
Sur la programmation réseauSur la programmation réseau :Cours réseau du CNRS : www.urec.fr/coursCours programmation réseau avec sockets, de Brian "Beej" Hall :
hi d ˜b j id h lwww.ecst.csuchico.edu/˜beej/guide/net/html/.
A propos de l’UEA propos de l’UE «Programmation système et réseau» :Site web officiel de cet enseignement :http://deptinfo.unice.fr/~lahire/enseignement/SYSL3
44
Chapitre 1: Présentation générale
Version Octobre 2012 N°8
Chapitre 1: Présentation générale
Historique des systèmes UNIXVers une normalisation: POSIX
√√Vers une normalisation: POSIXUnix propriétaires ou LinuxSurvol de l'architectureNoyau du systèmePrincipales caractéristiquesRappels des notions de base: le ShellRappels des notions de base: le ShellPrincipales commandesInterprétation de commandeNotion de base: La session, le manuel,…Parallèle avec Windows
55
Version Octobre 2012 N°11
Vers une normalisation: POSIX
PPortable OOpen SSystem IInterface eXXchange
Norme IEEE & Description:1003.0: Guide et présentation 1003.1: Bibliothèque de fonctions1003.2: Shell et utilitaires1003.3: Méthode de tests et conformité1003.4: Extension temps réel1003.5: Form. appels systèmes en ADA1003 6: Sécurité1003.6: Sécurité1003.7: Administration système1003.8: Accès commun aux fichiers1003.9: Interface sous Fortran 771003.10: Interface supercalculateurs
Normes: ISO 9945-1 ( P1003.1)
Version Octobre 2012 N°12
Unix propriétaires ou Linux…
Linus Torvald (FIN-91 sur i386)Philosophiep
Un noyau et des outils de base Indépendant de tout constructeur
Libre et Basé sur des contributions bénévoles (GPL)Organisation en projets ambitieux (FSF, SourceForge)Un grand nombre d'utilisateurs motivésUn “excellent produit”: stable et code original “libre de droits”
Porté un grand nombre d'architectures : SPARC, INTEL, ALPHA, MAC, …
Quelques projets: ApacheGnomeGNU
66
Version Octobre 2012 N°13
De nombreuses distributions Linux
Les différencesNom: Debian, Redhat, Suse, Mandrake, …Prix (commerciale ou pas), Nombre de logiciels, Versions des logiciels, Pilotes supportés,Organisation des fichiers de configuration, Procédures d'installation, Sérieux de la gestion (site web, mise à jour, etc.), Fréquence des versionsqCertifications, …
Mais encore:Debian: de 4500 à 9000 Logiciels,Orienté informaticien,Une dérive vers l'automatisation, …
Version Octobre 2012 N°14
Survol de l'architecture (1)
UTILISATEURInterface Utilisateur
SYSTEME D’EXPLOITATION UNIX
BIBLIOTHEQUE STANDARDfopen, fclose, fread, fwrite,…
PROGRAMMES UTILITAIRES STANDARDShell, éditeur, compilateur, …
Interface Bibliothèques
Interface Appels Systèmes
Interface Utilisateur
MATERIEL: UC, mémoire, disques, terminaux, etc…
SYSTEME D’EXPLOITATION UNIXGestion des processus, de la mémoire, des E/S,…
Autre système en couche : logiciels réseaux suivant norme - OSI
77
Version Octobre 2012 N°17
Noyau du système
BibliothèquesProgramme Utilisateur
Interface des appels systèmes
Sous-systèmes de contrôle de fichiers
Sous-systèmes de contrôle des processus
Communication interprocessus
Ordonnanceur
Gestion mémoire
Cache Buffer
PARTIE MATERIELLE
Cache Buffer
BlocCaractèreContrôleurs de périphériques
Contrôle de la partie matérielle
Version Octobre 2012 N°19
Principales caractéristiques
Langage de haut niveauLe noyau : plus d'1 million de lignes de Cy p g
Expressivité et simplicité de l'interfaceConstruction de programmes: des primitives élémentairesUn système de fichiers « hiérarchique »Un format cohérent de fichier (octet)Accès aux périphériquesccès au pé p é quesMulti-utilisateurs et multitâches …Indépendance avec l'architecture matérielle
54 % du codeMémoire virtuelle (versions actuelles)
88
Version Octobre 2012 N°21
Notion d’interprète de commandes
Shell : Interface textuelle vers le système
FonctionnalitésFonctionnalités
Message d'invitation (prompt)
Attend la saisie d'une commande
Commandes internes
Commandes externes (charg. + exec. programmes)
Historique des commandes précédentesHistorique des commandes précédentes
Redirections et tubes
Structures de contrôles (boucles, tests, fonctions, ...)
Mécanisme d'alias, variables d'environnement
Gestion de processus
Version Octobre 2012 N°22
Différents shells unix possibles
Bourne shellBourne shell (historiquement, le 1er)
Toujours utilisé par les scripts internes du systèmeToujours utilisé par les scripts internes du système
CC--shellshell (csh, tcsh)
syntaxe différente
Évolutions du Bourne shellÉvolutions du Bourne shell
ksh (Korn shell)
bash (Bourne Again shell): le shell du projet GNU
Où indiquer le shell par défaut ?
bash (Bourne Again shell): le shell du projet GNU
zsh: Évolution prétendument "ultime" du bourne shell
Améliorations : historique, complétion, ...
Possibilité de (demander à) changer le shell par défaut
lancé automatiquement au début de session
99
Version Octobre 2012 N°23
Quelques éléments d’administration
/etc/passwd/etc/passwdnom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe : nom_du_compte : mot_de_passe : numero_utilisateur : numero_de_groupe :
commentaire : répertoire : programme de demarragecommentaire : répertoire : programme de demarrage
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
news:x:9:13:News system:/etc/news:/bin/bash
user1:x:500:100:Mr User 1......:/home/user1:/bin/bash
commentaire : répertoire : programme_de_demarragecommentaire : répertoire : programme_de_demarrage
/etc/group/etc/groupnom_de_groupe : champ_special : numero_de_groupe : membre1, membre2nom_de_groupe : champ_special : numero_de_groupe : membre1, membre2
root:x:0:rootbin:x:1:root,bin,daemondaemon:x:2:users:x:100:
Version Octobre 2012 N°28
Caractéres spéciaux du shell
Certains caractères ont une signification spéciale pour le shell
* : 0 ou plusieurs caractères quelconques
Pas en CPas en C
p q q
t*o : nom de fichier qui débute par t et finit par o
? : 1 (et un seul) caractère quelconque
t?t? : désigne toto ou titi ou ttta, ...
\ : enlève la signification spéciale du caractère qui suit
t\*to : désigne t*to
Certaines constructions ont une signification spéciale
[a-z] : un caractère entre a et z (a ou b ou c ... ou z)
[aefgij] : un caractère (et un seul) parmi a,e,f,g,i,j
t[oau]t[oau] : toto, ou totu, ou tata, ou tato, ...
{mot1,mot2} : soit mot1, soit mot2
1010
Version Octobre 2012 N°34
Notions de base: Le manuel
Principales sections (environ 20 Mo)taille dépendante des paquetages - nyx : (≈20 Mo de “.gz”)man1: Commandes utilisateurs à partir shell (≈1800)man2: Primitives du noyau (≈250)man3: Routines C (≈1400)man4: Fichiers spéciaux: les pilotes des périphériques (disque dur, clavier/écran, graveur, lecteur de dvd, zip, mémoires usb...) (≈90)man5: Formats de fichiers et protocoles (≈200)man7: Format des systèmes de fichiers, jeux de caractères, macros, nroff... (≈80)man8: Commandes d’administration – à partir shell (≈450)man9: routines du noyau non standards (≈90)
Attention : Un ordre d'évaluation Base whatis: recherche de commandesapropos: recherche de mots clés
Version Octobre 2012 N°35
Anatomie d’une page de manuel (1)
Section
Brè ve de scr ip t ion
Syn taxes possibles
Descr ipt ion détaillée de la comman de
Pr om p t d u « PAGE R »
De scr ip t ion d é t a illé e d e sop t ion s (or d r e a lp h a b .)
'q ' : q u it' b ' : r e tou r 1 p .< s p c > : d é fil 1 p .< e n t e r > : d é fil 1 l./xy : r e c h e r c h e r « xy »
1111
Version Octobre 2012 N°36
Anatomie d’une page de manuel (2)
A i éAutr es pages in téressan tessu r un su jet voisin
N u l n ' e s t p a r fa it . . .
Par fois am bigu ës ou con fu sesVer sion angla ise (défau t ) :unset LANG LC_ALLpu is m an à n ouveau...
Version Octobre 2012 N°38
Principe général d'utilisation/* Fichier Z2.h */
Z1.oR1 (int i)Zlib.a
main (){
}........R1 (23)
/* Fichier Y.c */
#include "Z2.h"
Z2.o
Z3.o
........R1 (int i) {......}.......
PREPROCESSEUR
/* MAN !!!!! */
man r1
}
a.out
Y.o
EDITION DE LIEN
COMPILATION
1212
Version Octobre 2012 N°39
Exception vs compte-renduPresque toutes fonctions/appels systèmes
Traitement standard des erreurs (1)
entierpointeur…Presque toutes fonctions/appels systèmes
Utilisation de errnoerrno :Syntaxe : extern int errno ;n◦ dernière erreur détectée par un appel système
• normale : positive ou nulle, non void ,• anormale : négative ou void
n dernière erreur détectée par un appel systèmepas remise à zéro à chaque appel. intro(2)intro(2) : liste des différents codes
Méthodologie : test compte-rendu + errnoerrno
Version Octobre 2012 N°40
Fonctions associées#include <string.h>
Traitement standard des erreurs (2)
#include string.hchar* strerror (int errnum)retourne message « en clair » associé à errnumerrnum
#include <stdio.h>void perror (const char* message)affiche message message associé à errno errno (stderrstderr)affiche « message » + message associé à errno errno (stderrstderr)
Méthodologie :utiliser en s’appuyant sur « man » (Errors / Erreurs)ou traitement ad hoc (ex: gestion paramètres de « main »)
1313
Version Octobre 2012 N°41
Exemple#include <string.h>
Traitement standard des erreurs (3)
g#include <stdio.h>int main (int argc, char* argv[]) {FILE* fichier;if (argc != xxx) {
fprintf(stderr, « nombre paramètres incorrect »);exit(exit(11))
ici > 1
exit(exit(11))}
if ( (fichier = fopen(argv[1], « rw »)) == NULL) {fprintf(stderr,«Erreur %i:%s \n », errno, strerror(errno));exit(exit(22); }); }
} }
Version Octobre 2012 N°42
Traitement des erreurs de W. Stevens (1)
+ returnreturn
format message d’erreur avec nb %% + nb arguments
+ exit(1)exit(1)
+ abortabort
Affiche aussi le message associé à errnoerrno
Macros : en majuscule et sans paramètrePas de message passé en paramètre mais :Affichage: Nom du fichier + numéro de ligne
1414
Version Octobre 2012 N°43
Exemple#include <stevens.h> Pas par défaut dans linux
Traitement des erreurs de W. Stevens (2)
#include <stevens.h>#include <stdio.h>int traiter_fichier (char* f) {FILE* fichier; char tab[30];if ( (fichier = fopen(f, « rw »)) == NULL)
ERR_EXITERR_EXIT;
Pas par défaut dans linux
;…if (fclose(fichier)) != 0)
ERR_RETURNERR_RETURN;} }
Chapitre 2: Entrées - Sorties
1515
Version Octobre 2012 N°45
Plan de travail
Principes généraux…
Structures internesHiérarchie de descripteursTables pour la gestion des entrées-sorties
Principaux appels systèmesOuverture / fermeture de fichiers: open closeOuverture / fermeture de fichiers: open, closeEntrées-sorties: read, writePositionnement : lseek, fseekDuplication en vue de redirection : dup, dup2
Version Octobre 2012 N°46
Mise au point / Survol
bash gcc emacs
int open (….) { } int read (….) { }
TablesTables :
FILE* fopen (….) { } Bien sur on se sert aussi du « shell »pour lancer un
programme
…
Système exploitation
TablesTables :•Fich. Ouvert•Volumes•Blocs•….
Consulte / met à jour« appelle » / exécute
processus
1616
Version Octobre 2012 N°47
Principes généraux (1)
Sous UNIX: tout est fichierPériphérique réseau mémoire
Exemples : • « hardware » (/dev) • Accès au réseau (sockets)
T b i t t (FIFO)Périphérique, réseau, mémoire...Fichier = une suite d’octetsOrganisation : Hiérarchie de
Système de fichiers (partitions…)répertoiresFichiers « normaux » (en anglais Regular)
• Tubes persistants (FIFO) • Tables du noyau (TDF)
Montage : • local • distant
( g g )Liens entre fichiers (symboliques et physiques)Fichiers virtuels (/proc)Fichiers spéciaux (périphériques,FIFO,…)
Version Octobre 2012 N°48
Principes généraux (2)
Méthodes d’accèsSéquentiel (read)q ( )Direct - unité: l’octet – (lseek)
Protectionpropriétaire, groupe d’utilisateurs, les autresPas de journal (log) mais possibilité de verrous
Généralité + simplicitéImplantation de SGBD : bonne aptitudeImplantation de SGBD : bonne aptitudefichiers à trou, accès direct, octets…mécanismes additionnels non intégrés: évolution (gestion des versions), typage des
données, système transactionnel (SGBD),
1717
Version Octobre 2012 N°49
Principes généraux (3)
Deux points de vuesUtilisateur (commandes, applications,…)( pp )Programmeur (C et appels systèmes)
Utilisateuréchanges entre un processus et des entités :
disque, machine distante, autre processus, terminal...
Programmeur Fichier au sens large
Echanges avec n’importe quelle entité par des flots d’octets consécutifsAccès direct possible sur des disques locaux ou distants (curseur lecture/écriture)
Version Octobre 2012 N°50
Principes généraux (4)
Une suite d’octetsDisqueDisque
Curseur
TamponDescripteur de fichier :
Prédéfini (fich Stand )
MémoireMémoire Programme
F.D.F.D.
• Prédéfini (fich. Stand.)• A associer (open)
Simple numéroSimple numéro
1818
Version Octobre 2012 N°51
Principes généraux (5)
Association (open…)Dans le programmeDans le programme Appel du programmeAppel du programme
( p )nom externe / Desc. Fichier
chemin relatifchemin absolu
Pas de caractère génériquePas de caractère générique
Utilisation (read, write…)chemin relatifchemin absolu
Desc. Fichier: numéro de voieobtenu par associationprédéfini :
0 : voie standard d’entrée1 : voie standard de sortie2 : voie standard d’erreur
On n’utilise jamais On n’utilise jamais directement directement
Le clavier ou l’écranLe clavier ou l’écran
Version Octobre 2012 N°52
Un modèle d’E/S adaptable aux langages
Impact:• Performance
Un modèle d’entrée sortie de bas niveauxLangage CJava…
• Utilisation…
1919
Version Octobre 2012 N°53
Modèle langage C vs Modèle UNIX
Appels systèmes (1)open, lseek, write, stat...Mécanismes de base
Streams et routines C (2)isastream, fopen, fseek, fread, fwrite, fgets, feof, ...Notion de stream
Remarques et ConclusionMode noyau et Préemptiony p
struct FILE vs numéro d'entrée dans la TDFlect./écr. d'enregistrement vs d'octet(2) utilise (1)signatures de (2) indépendantes du système, mais l'implémentation dépend elle, du système ...
qu'en concluez vous ?
Version Octobre 2012 N°54
Qu'est-ce qu'un processus
DéfinitionsInstruction = indécomposable et indivisibleInstruction indécomposable et indivisibleProcesseur = ...Processus = exécution d'un programme
(instructions + données)Approche intuitive
UNIX = système "temps partagé“Plusieurs processus en même tempsUn seul processus actifAttente des autres (dans/hors mémoire)
2020
Version Octobre 2012 N°55
Tables pour gérer les fichiers P
1 01
Position :État : N° inode :
Tables partagéesTables partagéesPrivéPrivéP2 0
Proc
essu
s 12345
…
Nombre :…
Position :État :Nombre :
Nb. copies :Inode Infos ……
N° inode :Nb. copies :Inode Infos …
…
Tables Descripteurs Fichiers
…
Position :Ét t
Table fichiersEspace utilisateur Table inodes
Proc
essu
s P 0
12345
…
…
N° inode :Nb. copies :Inode Infos …
État :Nombre :…
Position :État :Nombre :
Version Octobre 2012 N°56
Modèle UNIX - Synthèse
Trois points de vues Le processus
Rôles :Gestion des voies d’échangep
L’usageLe « fichier »
Deux abstractions (par point de vue)Processus : Usage et nature du fichierUsage : raison de l’utilisation par le processus
et la nature du fichier
gGestion du curseur…Gestion des protections…
« Fichier »: raison de l’utilisation et usage du fichier
Permettre le partageD’un même usage par un/plusieurs processusD’un même fichier par un/plusieurs processusD’une même fichier par un/plusieurs usages
2121
Version Octobre 2012 N°57
Ouverture/Création d’un fichier: openopen
Descripteur de fichier
Lors de la création: f(perm,umask)
Mode d’ouverture
Nom fichier
fichier
Mise à jour des tables internes (processus + noyau)Oflags/perm : 9/15 macros dans les fichiers .h
Un petit ensemble de combinaisons validesLes incohérences ne sont pas détectés
Version Octobre 2012 N°58
Ouverture/Création: openopen (oflags)
O_CREAT:O_CREAT: création, si le fichier n’existe pasO EXCL:O EXCL: combiné avec O CREATO CREAT, création si le fichier n’existe
Valeurs possibles
__ __ ,pas, erreur sinonO_RDONLY:O_RDONLY: ouverture en lecture seule. O_WRONLY:O_WRONLY: ouverture en écriture seule (création ou ajout) O_RDWR:O_RDWR: ouverture en lecture et écriture (mise à jour n’importe où) O TRUNC:O TRUNC: libération du contenu du fichier, s’il existe + curseur __ ,placé en début de fichierO_APPEND:O_APPEND: contenu du fichier non touché + curseur placé en EOFO_SYNC:O_SYNC: attend la fin d’écriture sur le média après chaque write (pas de cache)O_NONBLOCK:O_NONBLOCK: E/S non bloquantes.
2222
Version Octobre 2012 N°59
Ouverture/Création: openopen (oflags)
Règles et choix incohérents
O_CREATO_CREAT si la création est permise ⇒ ¬ O_RDONLYO_RDONLY
O_EXCLO_EXCL si le fichier ne doit pas déjà exister ⇒ O_WRONLYO_WRONLY +
Choisir l’un des 3 types exclusifs d’action : O_RDONLYO_RDONLY, O_WRONLYO_WRONLY, O_RDWRO_RDWR
+
O_CREATO_CREAT
O_TRUNCO_TRUNC ou O_APPENDO_APPEND pour placer le curseur au début (resp. à la
fin) du fichier (doit donc déjà exister ⇒ ¬ O_EXCLO_EXCL)
O_SYNCO_SYNC si les écritures doivent être immédiates ⇒ ¬ O_RDONLYO_RDONLY.
Version Octobre 2012 N°60
Ouverture/Création: openopen (oflags)
open (nomFichier, O_RDONLY)open (nomFichier, O_RDONLY)
Curseur au début du pour lire
Exemples
open (nomFichier, O_WRONLY | O_CREATopen (nomFichier, O_WRONLY | O_CREAT | O_TRUNCO_TRUNC, …)
[Création + effacement] si nécessaire + curseur au début pour écrire
open (nomFichier, O_WRONLY | O_APPENDopen (nomFichier, O_WRONLY | O_APPEND, …)
Curseur en fin pour écrire
open (nomFichier, O_WRONLY | O_CREATopen (nomFichier, O_WRONLY | O_CREAT | O_APPENDO_APPEND, …)Création si nécessaire + curseur en fin pour écrire
open (nomFichier, O_WRONLY | O_CREATopen (nomFichier, O_WRONLY | O_CREAT | O_EXCLO_EXCL, …)
Création si n’existe pas (erreur sinon) + curseur au début pour écrire
open (nomFichier, O_RDWRopen (nomFichier, O_RDWR)
Doit exister + curseur au début pour lire ou écrire n’importe où
2323
Version Octobre 2012 N°61
Ouverture/Création: openopen (perm)Règle
Les permissions associées à un fichier lors de sa créationsont fixées par la conjonction de deux points de vue :
Point de vue :du programmeur, qui propose des permissions logiques
de l’utilisateur, propriétaire des fichiers créés, qui
sont fixées par la conjonction de deux points de vue :
Ex: Compilateur: exécution / Editeur: lecture et écriture…
peut interdire certaines permissions
umaskumask : pas de lecture/écriture pour les autres
Permission appliquée = perm & ~umaskumask
Masque interdictions
Version Octobre 2012 N°62
Ouverture/Création: openopen (perm)Valeurs possibles
Pour donner des droits
Le propriétaire
Le Groupe propriétairee G oupe p op éta e
Les autres
2424
Version Octobre 2012 N°63
open (« f », O_WRONLYO_WRONLY | O_CREAT, O_CREAT, ))
Ouverture/Création: openopen (perm)Exemple
1 1 01 0 0 0 0 0))
0 0 00 1 0 0 1 0022Group = ¬¬write
umaskumask
1 1 01 0 0 0 0 00 0 10 1 1 0 0 0
|
0 0 00 0 0 1 1 1 |
1 1 11 1 1 1 1 1
1 1 11 0 1 1 0 1&
~
1 1 11 0 1 1 0 1755
pOther = ¬¬write =
Version Octobre 2012 N°64
Création d'un fichier
Equivalencesopenopen (path, O WRONLY | O CREAT)openopen (path, O_WRONLY | O_CREAT)creatcreat (path, mode)mknodmknod : Fichier spéciaux (FIFO, ...)
Deux Phases: création et ouverture Voir Communication inter-processus
Paramètres oflag = 010000 | 001000 (O_RDONLY,...)
Commande(s) associée(s): emacs, gcc, cp, ...Structure(s) interne(s): tables, super-bloc
2525
Version Octobre 2012 N°65
Création d'un fichier: mécanisme interneEtapes
Localisation inode parent (I.PI.P),Localisation inode parent (I.PI.P),Recherche nom fichier...
Si le nom n’existe pas alors:Verrouillage I.P.I.P., liste des inodes libresAllocation inode: inode-mémoire = get (inode-disque) Modification I.P.I.P.: Informations fichier
Sinon (le nom existe) :Désallocation blocs: contenu fichierNon-Modification I.P.I.P.
Importance des verrous et du mode noyauImportance des verrous et du mode noyau
Version Octobre 2012 N°66
Processus 1#include <sys/types.h>
Ouverture/Création d'un fichier (1)
y yp#include <sys/stat.h>#include <fcntl.h>int main () { int rfd, wfd, rwfd;
if ((rfd = openopen("/etc/bashrc",O_RDONLY)) < 0)erreur;
Attention !
erreur;if ((rwfd = openopen("/etc/bashrc", O_RDWR)) < 0)
erreur; if ((wfd = openopen("/.bashrc",O_WRONLY | O_CREAT)) < 0)
erreur; }
Action: ouverture: rfd, rwfd - création/ouverture: wfd
2626
Version Octobre 2012 N°67
Ouverture/Création d'un fichier (2)
Processus 2#include <sys/fcntl.h>#include <sys/stat h>#include <sys/stat.h> #include <sys/types.h> int main () {
int rfd, wfd;if ((wfd = openopen("/etc/bashrc",O_WRONLY)) < 0)
erreur;if ((rfd = openopen("/.bash_profile",O_RDONLY)) < 0)
erreur;}Deux processus indépendantsDes tables partagées et privées
Action: ouverture: rfd - ouverture: wfd
Version Octobre 2012 N°68
Ouverture d'un fichier: Vision interne
P1 01
Position :État :Nombre :
O_RDONLYO_RDONLY
11/etc/bashrc/etc/bashrc
N° inode :Nb. copies :I d I f
112233
Attention : partage possible dup/fork
P2 0
Proc
essu
s 12345
…
…
Position :État :Nombre :
O_RDWRO_RDWR
11…
Position :État :Nombre :
O_WRONLYO_WRONLY
11
Inode Infos …
N° inode :Nb. copies :Inode Infos …
11/.bashrc/.bashrc
…
Table fichiersEspace utilisateur Table inodes
Proc
essu
s P2 0
12345
…
11
Position :État :Nombre : 11
O_RDONLYO_RDONLY
Position :État :Nombre :
O_WRONLYO_WRONLY
11
N° inode :Nb. copies :Inode Infos …
/.bash_profile/.bash_profile
11
…
2727
Version Octobre 2012 N°69
Fermeture d’un fichier: closeclose
Descripteur de fichier
Mise à jour des tables internes (processus + noyau)
fichier
fd est une entrée dans la TDF :openopen, forkfork, voie standard…
Fermeture par le noyau des fichiers à la terminaison d’un processus (exitexit(?))
Version Octobre 2012 N°70
Fermeture d'un fichier
Processus 2#include <unistd.h> int main ()int main () {
int rfd, wfd;/* Ouverture et utilisation */ ... closeclose (rfd); /* exit: fermeture implicite */ closeclose (wfd); /* exit: fermeture implicite */ }
T bl fi hi /i dTables fichiers/inodesDécrémentations compteursDésallocations élémentsLibération complète si le compteur atteint 0
Commande(s) associée(s): exit, éditeur…Structure(s) interne(s): tables, buffers
2828
Version Octobre 2012 N°71
Fermeture d'un fichier: Vision interne
P1 01
Position :État :Nombre :
O_RDONLYO_RDONLY
11/etc/bashrc/etc/bashrc
N° inode :Nb. copies :I d I f
112233
P2 0
Proc
essu
s 12345
…
…
Position :État :Nombre :
O_RDWRO_RDWR
11…
Position :État :Nombre :
O_WRONLYO_WRONLY
11
Inode Infos …
N° inode :Nb. copies :Inode Infos …
11/.bashrc/.bashrc
…
Table fichiersEspace utilisateur Table inodes
Proc
essu
s P2 0
12345
…
11
Position :État :Nombre : 11
O_RDONLYO_RDONLYN° inode :Nb. copies :Inode Infos …
/.bash_profile/.bash_profile
11
…Position :État :Nombre :
O_WRONLYO_WRONLY
11nullnull
Version Octobre 2012 N°72
Lecture d’un fichier: readread
Descripteur fichier
Nombre octets lus
Mise à jour des tables internes (noyau)fd é d l TDF l
Lieu de stockage données lues
Nombre octets à lire
fd est une entrée dans la TDF ouverte en lecture :openopen, forkfork, voie standard…
Allocation de bufferbuffer impérativeNb octets lus ≤ Nb octets à lire (EOF, périphérique,…)Début = position du curseur Après = position + nb oct.lus
2929
Version Octobre 2012 N°73
Lecture d'un fichier
Processus 1#include <sys/types.h> #include <unistd h>#include <unistd.h> int main () {
int rfd, nb; char tabp[30]; char tabg[1024];/* Ouverture rfd */ ... nb = readread (rfd, tabp, 30); nb = readread (rfd, tabg, 1024);nb = readread (rfd tabp 20);nb = readread (rfd, tabp, 20);
}Lecture à travers une même entrée
Commande(s) associée(s): cat, more, emacs, ...Structure(s) interne(s): tables, blocs, buffers
Version Octobre 2012 N°74
Lecture d'un fichier: Commentaires
Verrouillage/partageDurée d'un readreadDurée d un readreadVerrouillage explicite possible
Schéma lecteur/écrivain possiblePlusieurs descripteurs possibles
Lecture réelleAttention: Lecture bloc par blocBloc dans le "buffer cache" ou sur le disque?Lecture anticipée
3030
Version Octobre 2012 N°75
Lecture d'un fichier
Processus 1#include <sys/types.h> #include <unistd h> #include <unistd.h> int main () {
int rfd1, rfd2, nb;char tab1[30], tab2[30];/* Ouverture rfd1, rfd2 */ ... nb = readread (rfd1, tab1, 30); nb readread (rfd2 tab2 30);nb = readread (rfd2, tab2, 30);
}Lecture à travers plusieurs entrées – attention
Ici: 2 descripteurs indépendanceforkfork: "2" descripteurs dépendance
Version Octobre 2012 N°76
Lecture d’un fichier (2)
3131
Version Octobre 2012 N°77
Ecriture dans un fichier: writewrite
Descripteur fichier
Nombre octets écrits
Mise à jour des tables internes (noyau)fd est une entrée dans la TDF ouverte en écriture :
Données à écrire
Nombre octets à écrire
fd est une entrée dans la TDF ouverte en écriture :openopen, forkfork, voie standard…
Nb octets écrits ≤ Nb octets à écrire EOF, périphérique (imprimante, réseau…), signal, média/quota plein
Début = position du curseur Après = position + nb octets écrits
Version Octobre 2012 N°78
Ecriture dans un fichier
Processus 1#include <sys/types.h> #include <unistd h> #include <unistd.h> int main () {
int wfd, nb;char tab[30];/* Ouverture wfd */ /* Remplissage de tab */ ... nb = writewrite (wfd tab 30); nb = writewrite (wfd, tab, 30); /* Remplissage à partir de tab */ ... nb = writewrite (wfd, tab, 30);
}Commande(s) associée(s): cat, emacs, …Structure(s) interne(s): Tables, blocs, buffer
3232
Version Octobre 2012 N°79
Ecriture dans un fichier (2)
Version Octobre 2012 N°80
Ecriture d'un fichier: commentaires
Verrouillage/partageDurée d'un writewriteDurée d un writewriteVerrouillage explicite possible
Schéma lecteur/écrivain possiblePlusieurs descripteurs possibles
Ecriture réelleAllocation de blocs par nécessité (indirect, données)Ecriture partielle Lecture du blocEcriture différée des blocs: "buffer cache"
3333
Version Octobre 2012 N°81
Positionnement dans un fichier: lseeklseek
Descripteur fichier
position
Mise à jour des tables internes (noyau)fd est une entrée dans la TDF ouverte en écriture :
Référentiel
déplacementEntier 64 bits
fd est une entrée dans la TDF ouverte en écriture :openopen, forkfork, voie standard…
Retour = position par rapport au début du fichierRéférentiel = SEEK_SET, SEEK_CUR, SEEK_END déplacement positif/négatif avant (resp. après) le début (resp. fin)
Version Octobre 2012 N°82
Positionnement : commentaires
Référentiel :SEEK SET : par rapport au débutSEEK_SET : par rapport au débutSEEK_CUR: par rapport au curseurSEEK_END :par rapport à la fin
Comment connaitre la position courante?
O i i è l fiOn peut se positionner après la finToute écriture crée des trousLa lecture de trous rend des octets nuls
Une position négative est souvent une erreur
3434
Version Octobre 2012 N°83
Positionnement dans un fichier
#include <sys/types.h>#include <unistd.h>int main () { int main () {
int fd, pos;char tab[30];/* Ouverture fd */ ... pos = lseeklseek (fd, 1000, SEEK_CUR); // voir aussi SEEK_SETpos = lseeklseek (fd, -50, SEEK_END);
}readread/writewrite ⇒ accès séquentiellseeklseek ⇒ accès directPas d'accès disque
Commande(s) associée(s): éditeur…Structure(s) interne(s): tables des fichiers
Version Octobre 2012 N°84
Duplication d’entrée: dup2dup2
Descripteur fichier à dupliquer
Mise à jour des tables internes (processus et noyau)fd1 é d l TDF
à dupliquer
Descripteur fichier où copier
fd1 est une entrée dans la TDFfd2 est une entrée libre (ou qui sera fermée)le contenu de fd1 est recopié dans fd2 + MAJ de compteurs de référencesdupdup réalise la copie dans la première entrée libre
3535
Version Octobre 2012 N°85
Duplication d’entrée: dupdup
Descripteur fichier à dupliquerà dupliquer
Démarche1. Sauvegarde de fd2 (dup)2. Recopie de fd1 dans fd23. Restauration (dup2 + close)
Idem à dup2dup2La copie se fait dans la 1ère entrée libre flle contenu de fd1 est recopié dans fl + MAJ de compteurs de référencesIl est nécessaire de connaître l’état de la TDFIl est nécessaire de connaître l’état de la TDF
( p )
Version Octobre 2012 N°86
dup: mécanismes de base (1)
P1 01
Position :État :Nombre :
O_RDONLYO_RDONLY
11/etc/bashrc/etc/bashrc
N° inode :Nb. copies :I d I f
22
Proc
essu
s 12345
…
…
Position :État :Nombre :
O_RDWRO_RDWR
11
Inode Infos …
22
Table fichiersEspace utilisateur Table inodes
3636
Version Octobre 2012 N°87
dup: mécanismes de base (2)
Fonctionnement généralD li i d d i d fi hiDuplication du descripteur de fichierTable des fichiers (ouverture): incrémentation des référencesTable des fichiers (fermeture): décrémentation des référencesTable des inodes: pas de modificationD è ê b ffDeux accès au même buffer
Utilisationdupdup et dup2dup2 (routine)Implémentation du shell: redirections E/S
Liens avec les structures internes: voir open
Version Octobre 2012 N°88
dup: exemple simple
#include <sys/types.h>#include <unistd.h>#i l d f tl h#include <fcntl.h>int main () {
int fd, nfd;char tab1[512], tab2[512];fd = openopen ("/etc/bashrc", O_RDONLY); /* ex: fd = 3 */ ... fd dd (fd) /* fd 6 */nfd = dupdup (fd); /* ex: nfd = 6 */
readread (fd, tab1, 512);readread (nfd, tab2, 512);closeclose (fd);readread (nfd, tab2, 512);...
}
3737
Version Octobre 2012 N°89
dup2: exemple simple
#include <sys/types.h>#include <unistd.h>#include <fcntl h>#include <fcntl.h>int main () {
int fd, nfd;char tab1[512], tab2[512];fd = openopen ("/etc/bashrc", O_RDONLY);/* ex: fd = 3 */
nfd = dup2dup2 (fd, 4); /* nfd = 4 *//* si non libre: "4" est fermé avant *// si non libre: 4 est fermé avant /
readread (fd, tab1, 512);readread (nfd, tab2, 512);closeclose (fd);readread (nfd, tab2, 512);...
}
Version Octobre 2012 N°90
dup: exemple de la redirection en shell
#include <sys/types.h>#include <unistd.h>#i l d f tl h#include <fcntl.h>int main () {
int pid, fd, nfd; ... if ( (pid = forkfork ()) < 0) erreur;if (pid == 0) { /* Traitement fils */
if (/* redirection */) {fd openopen (fichier ) /* création */fd = openopen (fichier, ...); /* création ... */closeclose (stdout); nfd = dupdup (fd); /* nfd = stdout */closeclose (fd); exec de la commande}
... } ... }
3838
Version Octobre 2012 N°91
A propos de fcntlfcntl
Descripteur fichier
C d fd
Commande :f lf l (fd1 F DUPFD 0) dd (fd1) i 0 lib
Commande sur fd
Arguments de la commande
fcntlfcntl (fd1, F_DUPFD, 0) ⇔ dupdup (fd1) si 0 est libreF_GETFL : attributs positionnés lors de openopenF_SETFL : nouveaux attributs - dans arg. Seuls O_APPEND, O_NONBLOCK et O_ASYNC… Gestion de verrous, Signaux (interruptions IO), PID processus concerné... relatifs au fichier
Version Octobre 2012 N°92
A propos de ioctlioctl
Descripteur fichier
C d fd
Commande :
Commande sur fd
Arguments de la commande
Commande :Opérations sur un périphériqueOpérations sur un périphériquePas une commande POSIXGrand nombre de commande qui dépendent du matériel…Grand nombre de commande qui dépendent du matériel…
3939
Version Octobre 2012 N°93
Opérations atomiques ou pas ?
Attention :Programmation mono ou multi processusProgrammation mono ou multi processusOn peut être interrompu entre deux instructions
Chapitre 3: Systèmes de fichiers
4040
Version Octobre 2012 N°96
Structures d’un système de fichiers P
1 01
Position :État : N° inode :
Tables partagéesTables partagéesPrivéPrivé
P2 0
Proc
essu
s 12345
…
Nombre :…
Position :État :Nombre :
Nb. copies :Inode Infos ……
N° inode :Nb. copies :Inode Infos …
…
Tables Descripteurs Fichiers
…
Position :Ét t
Table fichiersEspace utilisateur Table inodes
Proc
essu
s P 0
12345
…
…
N° inode :Nb. copies :Inode Infos …
État :Nombre :…Position :État :Nombre :
Version Octobre 2012 N°97
Les périphériques
Quelques informations pour commencer
Périphériques = fichiers spéciauxFichiers b et c
Périphériques “caractères”terminal, réseaux
Périphériques “blocs”Disques, bandes, Cd-rom
Interface commune: appels systèmes
4141
Version Octobre 2012 N°99
Propriétés d’un système de fichiers
Technologie différentes (disques, CD-ROM, CLE USB…)Montage local ou distant (NFS)
Propriétés globales spécifiquesProtections, exportation…
Montage/démontage dynamiquemount, umount (commande ou appel système)
Une hiérarchie de nomsFichiers norma répertoires spécia liens t besFichiers normaux, répertoires, spéciaux, liens, tubes…
Partitionnement des sous-hiérarchiesAllocation du média associé (blocs libre…)Deux niveaux d’organisation:
Logique (suite de blocs, unité d’allocation 1k?)Physique (secteurs, pistes, cylindres)
Version Octobre 2012 N°100
Arborescenceet volumes
/dev/rz0g
/dev/rz0a
sharedusr
/
Root filesystem
+ partition de swap/dev/rz2a
/dev/rz0gySwap…
+ partition de swap
/dev/rz1aoracle
etud
/dev/rz2g
Syst. Fic. virtuel
4242
Version Octobre 2012 N°101
Création/utilisation Système de fichiers
Création
EXT2Fiable, matureCréation
mkfsmkfs (Syst. Fichiers)Taille des blocksNombre d’inodes…
Utilisationmountmount/umountumount
,Support pour fsckfsckPré allocationLiens symboliques rapides
Redémarrage après crash lentEXT3
Compatible avec EXT2EXT2mountmount/umountumountType Système de fichier
Mêmes structures de données≈ EXT2EXT2 + Journalisation
Ecriture dans un journalEcriture dans le syst. fichiers
Version Octobre 2012 N°102
Montage et démontage
Commande mount / umountMontages locaux / distantsMontages locaux / distantsVisualisation: dfexemple: mount -t ext2 -o nodev,nosuid,noexec /dev/sda3 /usr
AutomatisationFichiers: /etc/fstab/etc/init.d/* …
4343
Version Octobre 2012 N°104
Le super-bloc
Gestion des blocsNombre blocs libres
Super-bloc … … 1 b
Gr. Blocs 0
…Descr. De gr. n b… 1 bBitm. blocs
« Liste » blocs libresBitmap blocs libre/occ.
Gestion des inodesNombre total inodes Compteur inodes libres« Liste » inodes libres
1 bBitm. blocsBitm. inodes 1 b…
n bTab. inodes …
Blocs Fichiers
Blocs libres
n bTab. blocs
…« Liste » inodes libres Bitmap inode libre/occupé
Gestion globaleTaille système fichiersIndicateur de modificationDuplication dans les groupes
…
Gr. Blocs n
Version Octobre 2012 N°105
Maintien de la cohérence FSCK 1/2
Qui ?: L'administrateur
Pourquoi ?: Synchronisation (sync)Blocs: cache buffer disqueInode: Copie en mémoire disqueSuper-bloc: Copie en mémoire disque
Quand ?:Quand ?:Réparation: Crash, Coupure alimentationPrévention: Au reboot
Réparation: Attention aux pertes de données !!
4444
Version Octobre 2012 N°106
Maintien de la cohérence FSCK 2/2
Objectifs:Objectifs: Vérifications, réparationsBlocs:
Appartenances à plusieurs inodes Non référencés
Inodes: Tailles fichier/répertoire incohérentesNombres de liens incorrectsMauvais formatsNon référencés
Super-bloc:Plus de blocs que possibleMauvais format de la liste des blocs libresTotal des blocs/inodes libres incohérentsBlocs libres manquants
Version Octobre 2012 N°107
Montage/démontage et structures internes
N° inode :Nb. copies :Inode Infos …
SuperBloc :Inode cible :
…mount
t e t2
…
…
N° inode :Nb. copies :Inode Infos ……
N° inode :Nb. copies :
Inode cible :Inode à monter :Syst. Fichier :
SuperBloc :Inode cible :Inode à monter :
…
/dev/sda3
/
-t ext2
mount
Table inodesTable volumes
pInode Infos …
N° inode :Nb. copies :Inode Infos …
…
Syst. Fichier :
… copie mémoire
/dev/sda7
/usr
-t ext2
4545
Version Octobre 2012 N°108
Principales arborescences 1/2
Répertoire Description
/bin Binaires
/dev Périphériques
/etc Fichiers de configuration
/lib Bibliothèques de base
/tmp Fichiers temporaires
/mnt Montages nfs
/var Fichiers de log, mail, impression, …/var Fichiers de log, mail, impression, …
/home Répertoires utilisateurs
Version Octobre 2012 N°109
Principales arborescences 2/2
Répertoire Description
/usr/X11R6 Noyau X Window
/usr/bin Binaires autres paquetages
/usr/include En-têtes
/usr/lib Bibliothèques autres paquetages
/usr/man Manuels en ligne
/usr/src Source noyau, …
/usr/local Installation locales au site /usr/local Installation locales au site
/usr/share Fichiers paquetages de l'instal.
/usr/sbin Binaires administration
4646
Version Octobre 2012 N°110
Filesystem Hierarchy Standard (2004)
BinBin : Essential command binaries
Root filesystem Root filesystem (extrait)(extrait)BinBin : Essential command binariesBootBoot : Static files of the boot loaderdevdev : Device filesetcetc : Host-specific system configurationliblib : Essential shared libraries and kernel modulesmediamedia : Mount point for removeable mediamntmnt : Mount point for mounting a filesystem temporarilyoptopt : Add on application software packagesoptopt : Add-on application software packagessbinsbin : Essential system binariessrvsrv : Data for services provided by this systemtmptmp : Temporary filesusrusr : Secondary hierarchyvarvar : Variable data
Uniformisation des distributionsUniformisation des distributions
Version Octobre 2012 N°111
Organisation logique: la réalité
Une forêt de liensUn nom = un lienUn nom un lienLiens:
Entre père et filsEntre frères
Mise en oeuvreCommandes associées: ln et unlinkLiens: dur et symboliquesPar rapport aux inodes:
lien en dur [N:1] un inodelien symbolique [1:1] un inode
4747
Version Octobre 2012 N°112
Organisation logique: la réalité
/
usrLien en dur
etud
shared
home
d2
etud1oracle
.profile
Gprofileetud2
Même partition
Un seul fichier
Lien symbolique
≈Raccourcietud2
etud1.profile
Lien en durLien symbolique
Pas de vérification
Version Octobre 2012 N°113
Protections: groupes / utilisateurs
Principaux élémentsGrain: le fichierOpérations:
lecture, écriture, exécution/traversée
Objet: utilisateur, groupe, autresNe pas confondre:
Groupe de l'utilisateur et groupe d'un fichierGroupe de l utilisateur et groupe d un fichierFichier /etc/groupCommande newgrp (processus)Commande chgrp (fichier)Liens symbolique / physique
4848
Version Octobre 2012 N°114
Protections: de fichier/répertoire
Les fichiersr: permission de lire le fichier u g ow: permission d’écrire le fichier, i.e. ajouter, supprimer ou modifier les données qu’il contientx: permission d’exécuter le fichier
Les répertoiresr: permission de lire, donc de lister le répertoire
mais pas forcément d’en lire les fichiers…w: permission d’écrire dans le répertoire et donc de supprimer l fi hi ’il iles fichiers qu’il contientx: permission de traverser le répertoire. Sans cette permission, toute opération est interdite. Cette interdiction est héritée par tous les fichiers et répertoires qu’il contient
“Un fichier est protégé contre une modification par ses propres permissions, et contre la suppression par les permissions du répertoire qui le contient.“
Version Octobre 2012 N°115
Protections:exemple
rwxrwxrwx REP-1
rwxrwxrwx
rwxrwxrwxrwxrwxrwx REP-2 REP-3
FIC-1
PL,PROF PL,PROF
PL,PROF
rwxrwxrwx
rwxr-xr--
FIC-1
rwxrwxrwx
REP-5
REP-4
LIEN-1
rwxr----- PL,PROF
PL,PROF
PL,PROF
PL,PROF
REP-1/REP-2/REP-4/REP-6
REP-1/REP-3/REP-5/LIEN-1
REP-1/REP-2/REP-4/REP-6
LIEN-1 =
rwxrwxrwx
REP-6
FIC-2
r-xr-xr-xPL,PROF
PL,PROF
Utilisateurs: RC, PROF / JPP, ETUD1
Commandes: ls, cd, touch
REP 1/REP 2/REP 4/REP 6
Les droits qui comptent(voir chmod)
4949
Version Octobre 2012 N°118
Structure générale d'un fichier
Qualités requises:Evolution de la taille des fichiersEvolution de la taille des fichiersAccès efficaceNombre de fichiers ?Accès multi-processusAccès multi-utilisateurs
Une structure interneUne structure interneDes appels systèmes appropriésDes appels systèmes appropriés
Version Octobre 2012 N°119
Structure générale d'une inode 1/2
Copie disqueCopie disque:PropriétairepGroupe propriétaireType fichierDroits d'accèsDates (accès, modification, inode)Nombres de liensAdresses disque (blocs)Taille fichierRéférence ACL au fichier et répertoire
inode = anglais (i-noeud)
5050
Version Octobre 2012 N°120
Copie mémoire = Copie disque + …Verrouillé ?
Structure générale d'une inode 2/2
Verrouillé ?Processus en attenteCopie et image disque différentesPériphérique logiqueNuméro inodePointeurs inodes (une par liste)
liste des inodes libresliste des inodes (adressage calculé)
Nombre copies actives
Copie disque du super bloc
Version Octobre 2012 N°121
Inode de fichier/répertoire
5007105di i
5007105
é t i
UIDGID
T fi hiordinairerwxr-xr--
19/10/200510/10/200512/10/2005
5
653450 1 … 10
répertoirerwxr-xr--
19/10/200510/10/200512/10/2005
3
3450 1 … 10
Type fichierProtectionsDate lecture
Date modificationDate inode
Nombre liensContenu
Taille
cont
enu aaaaaaaaaaa
bbbbbcccccc
ddddddddddd
cont
enu N° Nom Un format
ls, cd, …
5151
Version Octobre 2012 N°122
Arborescence et inodes
…
2010 .8010 ..1003 D1
2010
1003 .201000
3
Infos inode
Infos inode
2010 ..1067 D25790 F1
10
1067 .1003 ..10
67
aaaaaaaaaaacccccccbbbbbbbbbbbbbbbb57
90
Infos inodeInfos inode
Version Octobre 2012 N°123
Organisation physique0
1
2
Blocs de donnees
Taille max (blocs) =
.
...
.
3
45
6
7
8
9
simple
10 +256 +
2562 +2563
Taille max (blocs) = 10 + 256 + 2562 + 2563
ls –il
.
....
.
.........
.
...
.
.
....
double
triple
5252
Version Octobre 2012 N°124
Organisation physique: Comprendre les choix
Choix d'organisationsBlocs contiguësTable des blocsCompactage, nettoyageTaille de blocsAccès indirectRépertoire / fichier p
ConséquencesFragmentationEfficacité (espace / temps)Limite des fichiers
Version Octobre 2012 N°125
Nom attributst_mode
Description Mot = bits de protection
Information sur fichiers: norme POSIX
st_ino st_dev st_nlinkst_uidst_gidst_size
i
pIdentif. Fich.: num. i-node Périphérique du fichier Nombre de liens Ident. utilisateur Ident. groupeTaille en octets D d è l st_atime
st_mtime st_ctime
Date dern. accès lecture Date dern. accès écriture Date dern. modification
5353
Version Octobre 2012 N°126
Accès aux fichiers: norme POSIX
Routinefd = creatcreat (nom,mode)
Descriptioncréation nouveau fichier
fd = openopen (fichier,mode) e = closeclose (fd) n = readread (fd,buff,nb) n = writewrite (fd,buff,nb) p = lseeklseek (fd,dep,deb) e = statstat (nom,&buff) fd kdikdi ( d )
ouverture fichier lecture/ecriturefermeture fichier ouvert lecture fichier --> tampon écriture tampon --> fichier déplacement dans fichier récupération info. fichiers
é i é i fd = mkdirmkdir (nom,mode) e = rmdirrmdir (nom) e = linklink (nom1,nom2)e = unlinkunlink (nom) e = chdirchdir (nom_rep) e = chmodchmod (nom,mode)
création répertoire suppression répertoirecréation nouvelle Entréesuppression Entréechangement répertoire de Travailmodification protection de fichier
Version Octobre 2012 N°127
Contenu inode: statstat, fstatfstat, lstatlstat
Descripteur fichier
Nom fichier
Informationsinode
lstat: informations sur le lien symbolique luilstat: informations sur le lien symbolique lui--mêmemêmefstat: accès direct par le descripteur ce fichierlstat accès par le nom de fichierlstat accès par le nom de fichierMise à jour des tables internes (noyau)
5454
Version Octobre 2012 N°128
Informations sur un fichier
#include <sys/types.h>#include <sys/stat.h>#include <unistd h>#include <unistd.h>int main () {
int fd, e;struct stat buf;... e = statstat ("/etc/passwd",&buf);/* autre possibilité */fd ("/ t / d" )fd = openopen ("/etc/passwd", ...);e = fstatfstat (fd, &buf);printf ("Nombre liens: %d", buf.st_nlink);
}Macros POSIX: S_ISREGS_ISREG(m), S_ISDIRS_ISDIR(m), I_SRWXUI_SRWXU
Commande(s) associée(s): lsStructure(s) interne(s): inode
Version Octobre 2012 N°129
statstat, fstatfstat, lstat lstat (compléments)
Protections + type de fichiers
Numéro dans /etc/passwd/etc/passwd
Numéro dans /etc/group/etc/group
pp
Taille en octets
Dates : modification Inode, accès et modifications du
contenucontenu
N° inode sur disque
Nombre liens en dur
+ st_dev et r_dev : majeur/mineur+ st_blksize et st_blocks
! !
5555
Version Octobre 2012 N°130
Obtenir le type d’un fichier
struct stat
st_modest_mode
.
.
.
Extraire le type
<sys/stat.h>
.
Version Octobre 2012 N°131
Obtenir les droits d’un fichier
if(st->st_mode & S_IRUSR) …
struct stat
st_modest_mode
.
.
.
if(st->st_mode & S_IWUSR) …
if(st->st_mode & S_IXUSR) …
if(st->st_mode & S_IXGRP) …
……
Macros sur les protections : voir openopen
<sys/stat.h>
.if(st->st_mode & S_IXOTH) …
…
5656
Version Octobre 2012 N°132
Obtenir le nom de login / groupe
lahire:x:1543:34:Philippe Lahire:/home/lahire:bin/bash
t t d* t id ( id t id)
struct stat
st_uidst_uid
.
.=
struct passwd* getpwuid (uid_t uid)
st gidst gid
prof:x:34:Professeurs:lahire …
st_gidst_gid
struct group* getgrgid (gid_t gid)
Voir getpwent (3)getpwent (3)
= /etc/passwd
/etc/group
+/etc/shadow
Version Octobre 2012 N°133
Synthèse getpwent(3)
Adresse de la structure si résultat OKNULL si uid ou gid n’existe pasChamps « passwd »,« passwd_gr » : adminstrateur
5757
Version Octobre 2012 N°134
Information sur les périphériques
struct stat.
macros
st_dev: du S.F. qui contient le fichier
#include <sys/types.h>#include <sys/types.h>int minor (dev_t d)int minor (dev_t d)int major (dev_t d)int major (dev_t d)
st_devst_dev
.
.
st_rdevst_rdev
_ qst_rdev: du fichier spécial (si /dev/…)Majeur = classe de l’appareilMineur = numéro d’instance de la classe création par mknod(8) ou /dev/MAKEDEV
Version Octobre 2012 N°135
Manipuler des dates (1)
struct stat. fonctions Retour: NULLNULL si ¬OK
Dates GMT : nb sec. depuis 01/01/1970 à 12 PM
#include <time.h>#include <time.h>struct tm* localtime (const time_t t)struct tm* localtime (const time_t t)struct tm* gmtime (const time_t t)struct tm* gmtime (const time_t t)st_mtimest_mtime
.
st_ctimest_ctime
st_atimest_atime
pst_atimest_atime ((read), st_mtimest_mtime (write) st_ctimest_ctime ((creat, chmod, chown…)localtimelocaltime : fuseau (config. Syst.) + heure été/hivergmtimegmtime : temps GMT universel
5858
Version Octobre 2012 N°136
Manipuler des dates (2)
timetime
Passer d’un Format à un autrePasser d’un Format à un autre
mktimemktime
asctime, asctime, asctime_rasctime_r
ctime,ctime,ctime_rctime_r
Version Octobre 2012 N°137
Manipuler des dates (3)
en secondes
À
fourni par « l’utilisateur »
À partir d’un struct tmtm
ctime_r + asctime_r: résultat = pointeur sur «ctime_r + asctime_r: résultat = pointeur sur « buf »»Transformation de la date (seconde ou struct tm) en chaîne de caractèresLe résultat est internationaliséLe résultat est internationalisé
5959
Version Octobre 2012 N°138
Manipuler des dates (4)
Si ¬NULL: modification
d l d tde la « date »
Date au format
Heure du système
« struct tm »
Date au format « time_t »
date(1) = printf(« %s\n », ctime(time())ctime(time()))
Version Octobre 2012 N°139
Manipuler des dates (5)
Buffer + taille pour la sortie
Heure à formater
Voirstrftime (3)
Exemple de format
6060
Version Octobre 2012 N°140
Internationalisation (1)
Agir sur les variables d’environnement :LC TIME : conventions utilisées pour les datesLC_TIME : conventions utilisées pour les datesLC_MONETARY, LC_COLLATE, LC_TYPE, LC_NUMERIC, LANGSigne monétaire, jeu de caractères, ordre alphabétique…
LC_ALL: S’applique à tous
enen (anglais)dede (allemand) ……
Version Octobre 2012 N°141
Internationalisation (2)
Paramétrer un programme pour l’internationalisation :#include <locale.h>setlocale (LC_ALL, « »);setlocale (LC_ALL, « fr_FR »);…
Laisser la libertéLaisser la libertéImposerImposer
time_t
struct tm
char …[MAX]
6161
Version Octobre 2012 N°142
Manipuler les dates d’un fichier (1)
Nom du fichier
Nouvelles « dates »
t ti
La date associée à l’inode est mise à jourtimes = NULL ⇒ date couranteil faut avoir les droits en écriture sur le fichier
st_atimest_mtime
Version Octobre 2012 N°143
Manipuler les dates d’un fichier (2)
#include <sys/types.h>#include <utime.h> i t i () int main () {
int fd, e;struct utimbuf tbuf;... tbuf.actime = ... tbuf.modtime = ... e = utimeutime ("/etc/passwd", &tbuf);( p , f);
}
Commande(s) associée(s): ls, touchStructure(s) interne(s): inode
6262
Version Octobre 2012 N°144
Gérer le propriétaire d'un fichier(1)
d f h
Kernel: CAP_CHOWN
Nom du fichier
Propriétaire& groupe
Descripteur de fichier
chown ≈ fchownlchown lchown (lien symbolique) chown chown (fichier référencé)MAJ de st_ctime st_ctime (c’est normal?)
fichier
Il y a aussi chgrpchgrp
Version Octobre 2012 N°145
Gérer le propriétaire d'un fichier (2)
#include <sys/types.h>#include <unistd.h>int main () int main () {
int fd, e;... e = chownchown ("/etc/passwd", 1014, 50);/* autre possibilité */fd = openopen ("/etc/passwd", ...);e = fchownfchown (fd, 1014, 50);
}}
Commande(s) associée(s): chownStructure(s) interne(s): inode
6363
Version Octobre 2012 N°146
Créer un lien (en dur)
Nom initial
Sorte d’alias…Incrémentation du nombre de liens en dur
Nom du lien
Incrémentation du nombre de liens en durAppartenance au même Système de FichiersPas de liens en l’air (gestion par le système)Efficacité: pas de fichier intermédiaireMais: retrouver les noms « à la main »…
Version Octobre 2012 N°147
Créer un lien symbolique
Nom initial
Nom du lien
nombre de liens en dur sur newpathnewpath: 12 inodes : celle du lien et celle du fichier ⇒ Efficacité vs lisibilité
Liens en l’air possiblesLien à travers les systèmes de fichiers
6464
Version Octobre 2012 N°148
Supprimer un lien
d f hNom du fichier
Effacement d’un lien en durEffacement du fichier si c’est le dernierIl faut avoir les droits…Il faut avoir les droits…
Version Octobre 2012 N°149
Création/suppression d'un lien
#include <unistd.h>int main () int main () {
int e;... e = linklink ("/etc/passwd", "/tmp/passwd");e = symlinksymlink ("/etc/passwd", "/tmp/passwd");e = symlinksymlink ("/etc", "/tmp/etc");
Le fichier lien symbolique
e = unlinkunlink ("/tmp/passwd"); e = unlinkunlink ("/tmp/etc");
}Commande associée(s): ln, unlink, rmStructure(s) interne(s): inode
6565
Version Octobre 2012 N°150
Rappel sur les droits d’accès (open)
Pour donner des droits
Le propriétaire
Le Groupe propriétairee G oupe p op éta e
Les autres
Version Octobre 2012 N°151
Vérifier l’accès à un fichier
Nom du fichier
modemode = droit de …
fichier
Droits demandés
R_OKR_OK: lectureW_OKW_OK: écritureX_OKX_OK: exécution ou traverséeF_OKF_OK: existence
6666
Version Octobre 2012 N°152
Gérer les protections d’un fichier (1)
Nom du fichierfichier
droits
DescripteurDe fichier
modemode = combinaison des 3 permissions pour les 3 catégories et de 3 indicateurs⇒⇒ S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTHS_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH⇒⇒ S_ISUID | S_IRGRP | S_IROTHS_ISUID | S_IRGRP | S_IROTH
Indicateurs…
Version Octobre 2012 N°153
Gérer les protections d’un fichier (2)Fichiernormal
(*)
Répertoire
(*)
3 indicateurs : interprétation ≠ (fichier normal / répertoire)(*) gestion de verrou si ¬exécutable (voir cours)
6767
Version Octobre 2012 N°154
Gérer les protections d'un fichier (3)
#include <sys/types.h>#include <sys/stat.h>int main () {
int fd, e;... e = chmodchmod ("/etc/passwd", S_IRWXU);/* autre possibilité */fd = openopen ("/etc/passwd", ...);pp ( p , );e = fchmodfchmod (fd, S_IRWXU);
}
Commande(s) associée(s): chmodStructure(s) interne(s): inode
Version Octobre 2012 N°155
Manipuler le masque de protection
Nouveau masque
Utilisation des 9 macros Utilisation des 9 macros 3 permissions pour les 3 catégories
modemode idem chmodchmodmodemode = idem chmodchmodS_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTHS_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH
Mais : marque une interdictionSe combine avec ce qui est donné par open: ETS’applique au futur fichiers créés
6868
Version Octobre 2012 N°156
Protections de fichier et processus (1)
Processus PP
RUIDEUIDSUID
RGIDEGIDSGID
real user-id
effectiveuser-id
real group-id
effectivegroup-id
saved set saved setsaved setuser-id
sa ed setgroup-id
Version Octobre 2012 N°157
Protections de fichier et processus (2)
Processus PP=Sauf si
login + group(s)=sauf si
RUIDEUIDSUID
RGIDEGIDSGID
set-user-id sauf si set-group-id
ownerowner
Restaurer aprèsRestaurer après«« set/drop privilegeset/drop privilege »»
Fichier de PP
ou
ownerownergroupgroup
OU: utilisation de :setuid, setgid (posix)setreuid, setregid…Avoir les privilèges
Différents effets : cours sur les processus
Contrainte (si EUID != 0):new = RUID/SUID
6969
Version Octobre 2012 N°158
Appels systèmes et liens symboliques
S’applique surS’applique sur…
Le fichier lien symbolique :Le fichier lien symbolique :lchown, chown, lstat, readlink, unlinkremove, rename
Le fichier luiLe fichier lui--même :même :chmod, creat, chown, link, mkdir, open, stat access, chdir, exec, mkfifo, opendir, pathconf, truncate, rename
Version Octobre 2012 N°159
Créer/Supprimer un répertoire (1)
Nom du répertoire
droits
S_ISGIDS_ISGID : droits du gr. Du répertoire = droits de ses fichiersS_ISVTXS_ISVTX : création de fichiers ¬renommer & ¬supprimerS_IX… S_IX… : X est pour « traverser »rmdirrmdir: le répertoire doit être vidermdirrmdir : fonctionne comme unlinkunlink
7070
Version Octobre 2012 N°160
Créer/supprimer un répertoire (2)
#include <sys/types.h> #include <sys/stat.h> i t i () int main () {
int e;... e = mkdirmkdir ("/tmp/myrep", S_IWUSR);e = rmdirrmdir ("/tmp/myrep");
}
Commande(s) associée(s): mkdir, rmdir, rmStructure(s) interne(s): inode
Version Octobre 2012 N°161
Ouvrir un répertoire
Nom du répertoirerépertoire
DIRDIR : un peu comme FILE (section 3)Curseur placé sur la 1ère entréeCombien d’entrée minimum?
7171
Version Octobre 2012 N°162
Parcourir un répertoire
«descripteur»
N° inodeNom fichier
Seul endroit où est stocké un nom de fichierAvance le curseur
Et le chemin ?
Version Octobre 2012 N°163
Réinitialiser/Fermer un répertoire
«descripteur»
(*)
(**)
(*) Position sur la 1ère entrée (affecte table noyau)(**) Affecte la TDF et les tables du noyau(**) rend les ressources aux système
(**)
7272
Version Octobre 2012 N°164
Réinitialiser/Fermer un répertoire
«descripteur»
(*)
(**)
(*) Position sur la 1ère entrée (affecte table noyau)(**) Affecte la TDF et les tables du noyau(**) rend les ressources aux système
(**)
Version Octobre 2012 N°165
Accès au contenu d'un répertoire
#include <sys/types.h>#include <dirent.h>i t i () {int main () {
DIR* dir;struct dirent * entry;dir = opendiropendir ("/var"); entry = readdirreaddir (dir);printf ("%s - %d", entry->d_name, entry->d_ino);closedirclosedir(dir);
}}seekdirseekdir, telldirtelldir, ...
Commande(s) associée(s): ls, mv, …Structure(s) interne(s): tables des fichiers
7373
Version Octobre 2012 N°166
Manipuler le répertoire courant (1)
Nom de fichier
«descripteur»
fichier
Affecte le contenu d’un processusAllocation de bufbuf + taille allouée
Chemin absolu
Version Octobre 2012 N°167
Manipuler le répertoire courant (2)
#include <unistd.h>int main () { {
int fd, e;... e = chdirchdir ("/etc");/* autre possibilité */fd = openopen ("/etc", ...);e = fchdirfchdir (fd);
}}Table des fichiers: Changement nombre de références
Commande(s) associée(s): cdStructure(s) interne(s): Tables des fichiers, processus
7474
Version Octobre 2012 N°168
Renommer / Déplacer un fichier
Fichier de départ
newpathnewpath dans le même système de fichiersAutres liens en du non affectés
Fichier d’arrivée
Autres liens en du non affectésSi cible existe elle est écraséeNombreuses restrictionsChemin correct, cible: répertoire non vide,…
Commande mvmv
Version Octobre 2012 N°169
Synchronisation Disque/buffer
Descripteur de fichier
syncsync: synchronise les buffers (écriture) et disques fsyncfsync: idem mais pour un fichierDifférer l’écriture ⇒ accélérer les échangesToutes les xx sec. + arrêt de la machine
7575
Version Octobre 2012 N°170
Synchronisation Disque/buffer
#include <unistd.h>int main () (){
int fd, e;... /* Ouverture fichier en écriture */ fd = openopen ("/etc/passwd", ...);...
ff (fd)e = fsyncfsync (fd);syncsync () /* S. F. */
}Commande associée(s): syncStructure(s) interne(s): Tables, buffer, inode
Version Octobre 2012 N°180
Système de fichier /proc (1)
Processus en cours
Autres informations : mémoire, noyau, paramètres systèmes, …
7676
Version Octobre 2012 N°181
Système de fichier /proc (2)
Systèmes de fichierssupportés
Information sur la mémoire
Version Octobre 2012 N°182
Système de fichier /proc (3)
Information sur la table des volumes montés
7777
Version Octobre 2012 N°183
Système de fichier /proc (4)
Répertoire courantRépertoire courantExécutableExécutable
Répertoire RacineRépertoire Racine
Propriétaire, PIDPropriétaire, PID
Variables environnementVariables environnement