1 Chapitre 3: Systèmes de fichiers Structures d`un système de
Transcription
1 Chapitre 3: Systèmes de fichiers Structures d`un système de
Chapitre 3: Systèmes de fichiers N°70 Version Janvier 2008 Structures d’un système de fichiers … Position : État : Nombre : … … 0 1 2 3 4 5 … Espace utilisateur Position : État : Nombre : Table fichiers Inode Infos … N° inode : Nb. copies : Inode Infos … … Position : État : Nombre : N° inode : Nb. copies : … 0 1 2 3 4 5 Tables Descripteurs Fichiers Processus P2 Tables partagé partagées Position : État : Nombre : … Processus P1 Privé Privé N° inode : Nb. copies : Inode Infos … Table inodes Version Janvier 2008 N°71 Les périphériques Quelques informations pour commencer Périphériques = fichiers spéciaux (ex: /dev/rz0a) Périphériques “caractères” (c) ¾ terminal, réseaux Périphériques “blocs” (b) ¾ Disques, bandes, Cd-rom Interface commune: appels systèmes Identification interne: major, minor Partitions Création partition (fdisk…) Création système de fichier (mkfs) montage (lecture, écriture…) Accès « bloc » ou « caractère » 1 N°72 Version Janvier 2008 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écifiques ¾ Protections, exportation… Montage/démontage dynamique ¾ mount, umount (commande ou appel système) Une hiérarchie de noms ¾ Fichiers normaux, répertoires, spéciaux, liens, tubes… Partitionnement des sous-hiérarchies Allocation du média associé (blocs libre…) Deux niveaux d’organisation: ¾ Logique (suite de blocs, unité d’allocation 1k?) ¾ Physique (secteurs, pistes, cylindres) N°73 Version Janvier 2008 /dev/rz0a Arborescence et volumes / shared Root filesystem Swap … usr /dev/rz0g /dev/rz2a + partition de swap oracle Syst. Fic. virtuel etud /dev/rz1a /dev/rz2g + partition de swap Version Janvier 2008 N°75 Montage et démontage Commande mount / umount Montages locaux / distants Visualisation: df exemple: mount -t ext2 -o nodev,nosuid,noexec /dev/sda3 /usr Automatisation Fichiers: /etc/fstab /etc/init.d/* … 2 N°79 Version Janvier 2008 Montage/démontage et structures internes … mount /dev/sda3 … … / -t ext2 Inode Infos … N° inode : Nb. copies : Inode Infos … … mount SuperBloc : Inode cible : Inode à monter : Syst. Fichier : N° inode : Nb. copies : … -t ext2 SuperBloc : Inode cible : Inode à monter : Syst. Fichier : N° inode : Nb. copies : Inode Infos … … /dev/sda7 N° inode : Nb. copies : /usr … copie mémoire Inode Infos … Table volumes Table inodes N°80 Version Janvier 2008 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, … /home Répertoires utilisateurs N°81 Version Janvier 2008 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 /usr/share /usr/sbin Installation locales au site Fichiers paquetages de l'instal. Binaires administration 3 N°82 Version Janvier 2008 Filesystem Hierarchy Standard (2004) Root filesystem (extrait) extrait) Bin : Essential command binaries Boot : Static files of the boot loader dev : Device files etc : Host-specific system configuration lib : Essential shared libraries and kernel modules media : Mount point for removeable media mnt : Mount point for mounting a filesystem temporarily opt : Add-on application software packages sbin : Essential system binaries srv : Data for services provided by this system tmp : Temporary files usr : Secondary hierarchy var : Variable data Uniformisation des distributions Version Janvier 2008 N°83 Liens en dur et symbolique Une gestion différenciée Un nom = un lien Liens: père et fils + Entre frères Lien en dur : même partition + un seul fichier Lien symbolique : ≈Raccourci + pas de vérification Mise en oeuvre Commandes associées: ln et unlink Par rapport aux inodes: lien en dur [N:1] un inode lien symbolique [1:1] un inode Version Janvier 2008 N°84 Protections: groupes / utilisateurs Principaux éléments Grain: le fichier Opérations: lecture, écriture, exécution/traversée Objet: utilisateur, groupe, autres Ne pas confondre: Groupe de l'utilisateur et groupe d'un fichier Fichier /etc/group Commande newgrp (processus) Commande chgrp (fichier) Liens symbolique / physique 4 Version Janvier 2008 N°85 Protections: de fichier/répertoire Les fichiers u g o r: permission de lire le fichier w: permission d’écrire le fichier, i.e. ajouter, supprimer ou modifier les données qu’il contient x: permission d’exécuter le fichier Les répertoires r: 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 les fichiers qu’il contient x: 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 Janvier 2008 N°86 Structure générale d'un fichier Qualités requises: Evolution de la taille des fichiers Accès efficace Nombre de fichiers ? Accès multi-processus Accès multi-utilisateurs Î Une structure interne Î Des appels systè systèmes approprié appropriés Version Janvier 2008 N°87 Structure générale d'une inode 1/2 Copie disque: disque Propriétaire Groupe propriétaire Type fichier Droits d'accès Dates (accès, modification, inode) Nombres de liens Adresses disque (blocs) Taille fichier Référence ACL au fichier et répertoire Î inode = anglais (i-noeud) 5 N°88 Version Janvier 2008 Structure générale d'une inode 2/2 Copie mémoire = Copie disque + … Verrouillé ? Processus en attente Copie et image disque différentes Périphérique logique Numéro inode Pointeurs inodes (une par liste) liste des inodes libres liste des inodes (adressage calculé) Nombre copies actives Copie disque du super bloc N°89 Version Janvier 2008 Inode de fichier/répertoire UID 5007 105 GID répertoire Type fichier Protections rwxr-xr-Date lecture 19/10/2005 Date modification 10/10/2005 Date inode 12/10/2005 Nombre liens 3 Contenu 01 … 10 Taille 345 aaaaaaaaaaa bbbbbcccccc contenu contenu 5007 105 ordinaire rwxr-xr-19/10/2005 10/10/2005 12/10/2005 5 01 … 10 65345 ddddddddddd N° Nom Un format ls, cd, … N°90 Version Janvier 2008 Arborescence et inodes 2010 … Infos inode . .. 2010 8010 1003 D1 Infos inode 1067 1003 . .. . .. D2 F1 5790 1067 1003 Infos inode 1003 2010 1067 5790 Infos inode aaaaaaaaaaaccccccc bbbbbbbbbbbbbbbb 6 N°91 Version Janvier 2008 Organisation physique Blocs de donnees 0 1 Taille max (blocs) = 2 3 10 + 256 + 4 5 6 2562 + 2563 7 8 9 simple .. . double triple Taille max (blocs) = 10 + 256 + 2562 + 2563 ls –il .. . .. . .. . .. . .. . N°92 Version Janvier 2008 Organisation physique: Comprendre les choix Choix d'organisations Blocs contiguës Table des blocs Compactage, nettoyage Taille de blocs Accès indirect Répertoire / fichier Conséquences Fragmentation Efficacité (espace / temps) Limite des fichiers N°93 Version Janvier 2008 Information sur fichiers: norme POSIX Nom attribut st_mode st_ino st_dev st_nlink st_uid st_gid st_size st_atime st_mtime st_ctime Description Mot = bits de protection Identif. Fich.: num. i-node Périphérique du fichier Nombre de liens Ident. utilisateur Ident. groupe Taille en octets Date dern. accès lecture Date dern. accès écriture Date dern. modification 7 N°94 Version Janvier 2008 Accès aux fichiers: norme POSIX Routine fd = creat (nom,mode) fd = open (fichier,mode) e = close (fd) n = read (fd,buff,nb) n = write (fd,buff,nb) p = lseek (fd,dep,deb) e = stat (nom,&buff) fd = mkdir (nom,mode) e = rmdir (nom) e = link (nom1,nom2) e = unlink (nom) e = chdir (nom_rep) e = chmod (nom,mode) Description création nouveau fichier ouverture fichier lecture/ecriture fermeture fichier ouvert lecture fichier --> tampon écriture tampon --> fichier déplacement dans fichier récupération info. fichiers création répertoire suppression répertoire création nouvelle Entrée suppression Entrée changement répertoire de Travail modification protection de fichier N°95 Version Janvier 2008 Contenu inode: stat, stat fstat, fstat lstat Descripteur fichier Informations inode Nom fichier lstat: lstat: informations sur le lien symbolique luilui-même fstat: accès direct par le descripteur ce fichier lstat accè accès par le nom de fichier Mise à jour des tables internes (noyau) Version Janvier 2008 N°96 Informations sur un fichier #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int main () { int fd, e; struct stat buf; ... e = stat ("/etc/passwd",&buf); /* autre possibilité */ fd = open ("/etc/passwd", ...); e = fstat (fd, &buf); printf ("Nombre liens: %d", buf.st_nlink); } ¾ Macros POSIX: S_ISREG(m), S_ISDIR(m), I_SRWXU S_ISREG S_ISDIR Commande(s) associée(s): ls Structure(s) interne(s): inode 8 N°97 Version Janvier 2008 stat, stat fstat, fstat lstat (compléments) Protections + type de fichiers Numéro dans /etc/ etc/passwd Numéro dans /etc/group etc/group Taille en octets Dates : modification Inode, accès et modifications du contenu N° inode sur disque !! Nombre liens en dur + st_dev et r_dev : majeur/mineur + st_blksize et st_blocks N°98 Version Janvier 2008 Obtenir le type d’un fichier struct stat . . st_mode . . <sys/stat.h> Extraire le type N°99 Version Janvier 2008 Obtenir les droits d’un fichier if(st->st_mode & S_IRUSR) … if(st->st_mode & S_IWUSR) … st_mode if(st->st_mode & S_IXGRP) … … . . if(st->st_mode & S_IXUSR) … … struct stat . . if(st->st_mode & S_IXOTH) … <sys/stat.h> Macros sur les protections : voir open 9 N°100 Version Janvier 2008 Obtenir le nom de login / groupe lahire:x:1543:34:Philippe Lahire:/home/lahire:bin/bash struct passwd* getpwuid (uid_t uid) struct stat . = . st_uid st_gid /etc/group +/etc/shadow /etc/passwd = struct group* getgrgid (gid_t gid) prof:x:34:Professeurs:lahire … Voir getpwent (3) N°101 Version Janvier 2008 Synthèse getpwent(3) Adresse de la structure si résultat OK NULL si uid ou gid n’existe pas Champs « passwd »,« passwd_gr » : adminstrateur N°102 Version Janvier 2008 Information sur les périphériques struct stat . . st_dev st_rdev macros #include <sys/ sys/types.h> types.h> int minor (dev_t d) int major (dev_t (dev_t d) st_dev: du S.F. qui contient le fichier st_rdev: du fichier spécial (si /dev/…) Majeur = classe de l’appareil Mineur = numéro d’instance de la classe création par mknod(8) ou /dev/MAKEDEV 10 N°103 Version Janvier 2008 Manipuler des dates (1) struct stat . . st_atime st_mtime st_ctime fonctions Retour: NULL si ¬OK #include <time.h> time.h> struct tm* tm* localtime (const time_t t) struct tm* tm* gmtime (const time_t t) Dates GMT : nb sec. depuis 01/01/1970 à 12 PM st_atime (read), st_mtime (write) st_ctime (creat, chmod, chown…) localtime : fuseau (config. Syst.) + heure été/hiver gmtime : temps GMT universel N°104 Version Janvier 2008 Manipuler des dates (2) Passer d’ d’un Format à un autre time mktime ctime, ctime, ctime_r asctime, asctime, asctime_r N°105 Version Janvier 2008 Manipuler des dates (3) en secondes À partir d’un struct tm fourni par « l’utilisateur » ctime_r + asctime_r: asctime_r: ré résultat = pointeur sur « buf » Transformation de la date (seconde ou struct tm) en chaîne de caractères Le ré résultat est internationalisé internationalisé 11 N°106 Version Janvier 2008 Manipuler des dates (4) Si ¬NULL: modification de la « date » Heure du système Date au format « struct tm » Date au format « time_t » date(1) = printf(« %s\n », ctime(time()) ctime(time())) N°107 Version Janvier 2008 Manipuler des dates (5) Buffer + taille pour la sortie Heure à formater Exemple de format Voir strftime (3) N°108 Version Janvier 2008 Internationalisation (1) Agir sur les variables d’environnement : LC_TIME : conventions utilisées pour les dates LC_MONETARY, LC_COLLATE, LC_TYPE, LC_NUMERIC, LANG Signe monétaire, jeu de caractères, ordre alphabétique… LC_ALL: S’applique à tous en (anglais) de (allemand) … 12 N°109 Version Janvier 2008 Internationalisation (2) Paramétrer un programme pour l’internationalisation : #include <locale.h> Laisser la liberté liberté setlocale (LC_ALL, « »); Imposer setlocale (LC_ALL, « fr_FR »); … time_t struct tm char … [MAX] N°110 Version Janvier 2008 Manipuler les dates d’un fichier (1) Nom du fichier Nouvelles « dates » st_atime st_mtime La date associée à l’inode est mise à jour times = NULL ⇒ date courante il faut avoir les droits en écriture sur le fichier Version Janvier 2008 N°111 Manipuler les dates d’un fichier (2) #include <sys/types.h> #include <utime.h> int main () { int fd, e; struct utimbuf tbuf; ... tbuf.actime = ... tbuf.modtime = ... e = utime ("/etc/passwd", &tbuf); } Commande(s) associée(s): ls, touch Structure(s) interne(s): inode 13 N°112 Version Janvier 2008 Gérer le propriétaire d'un fichier(1) Nom du fichier Propriétaire & groupe Descripteur de fichier Il y a aussi chgrp chown ≈ fchown lchown (lien symbolique) chown (fichier référencé) MAJ de st_ctime (c’est normal?) N°113 Version Janvier 2008 Gérer le propriétaire d'un fichier (2) #include <sys/types.h> #include <unistd.h> int main () { int fd, e; ... e = chown ("/etc/passwd", 1014, 50); /* autre possibilité */ fd = open ("/etc/passwd", ...); e = fchown (fd, 1014, 50); } Commande(s) associée(s): chown Structure(s) interne(s): inode N°114 Version Janvier 2008 Créer un lien (en dur) Nom initial Nom du lien Sorte d’alias… Incrémentation du nombre de liens en dur Appartenance au même Système de Fichiers Pas de liens en l’air (gestion par le système) Efficacité: pas de fichier intermédiaire Mais: retrouver les noms « à la main »… 14 N°115 Version Janvier 2008 Créer un lien symbolique Nom initial Nom du lien nombre de liens en dur sur newpath: newpath 1 2 inodes : celle du lien et celle du fichier ⇒ Efficacité vs lisibilité Liens en l’air possibles Lien à travers les systèmes de fichiers N°116 Version Janvier 2008 Supprimer un lien Nom du fichier Effacement d’un lien en dur Effacement du fichier si c’est le dernier Il faut avoir les droits… droits… Version Janvier 2008 N°117 Création/suppression d'un lien #include <unistd.h> int main () { int e; ... Le fichier lien symbolique e = link ("/etc/passwd", "/tmp/passwd"); e = symlink ("/etc/passwd", "/tmp/passwd"); e = symlink ("/etc", "/tmp/etc"); e = unlink ("/tmp/passwd"); e = unlink ("/tmp/etc"); } Commande associée(s): ln, unlink, rm Structure(s) interne(s): inode 15 N°118 Version Janvier 2008 Rappel sur les droits d’accès (open) Pour donner des droits Le propriétaire Le Groupe propriétaire Les autres N°119 Version Janvier 2008 Vérifier l’accès à un fichier Nom du fichier Droits demandés mode = droit de … R_OK: R_OK lecture W_OK: W_OK écriture X_OK: X_OK exécution ou traversée F_OK: F_OK existence N°120 Version Janvier 2008 Gérer les protections d’un fichier (1) Nom du fichier droits Descripteur De fichier mode = combinaison des 3 permissions pour les 3 catégories et de 3 indicateurs ⇒ S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH ⇒ S_ISUID | S_IRGRP | S_IROTH Indicateurs… 16 N°121 Version Janvier 2008 Gérer les protections d’un fichier (2) Fichier normal (*) Répertoire 3 indicateurs : interprétation ≠ (fichier normal / répertoire) (*) gestion de verrou si ¬exécutable (voir cours) N°122 Version Janvier 2008 Gérer les protections d'un fichier (3) #include <sys/types.h> #include <sys/stat.h> int main () { int fd, e; ... e = chmod ("/etc/passwd", S_IRWXU); /* autre possibilité */ fd = open ("/etc/passwd", ...); e = fchmod (fd, S_IRWXU); } Commande(s) associée(s): chmod Structure(s) interne(s): inode N°123 Version Janvier 2008 Manipuler le masque de protection Nouveau masque Utilisation des 9 macros 3 permissions pour les 3 catégories mode = idem chmod S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IROTH Mais : marque une interdiction Se combine avec ce qui est donné par open: ET S’applique au futur fichiers créés 17 N°124 Version Janvier 2008 Protections de fichier et processus (1) Processus P real user-id real group-id RUID EUID SUID effective user-id RGID EGID SGID effective group-id saved set group-id saved set user-id N°125 Version Janvier 2008 Protections de fichier et processus (2) login + group(s) = Sauf si set-user-id Processus P RUID EUID SUID RGID EGID SGID owner group Fichier de P ou Contrainte (si EUID != 0): new = RUID/SUID Différents effets : cours sur les processus = sauf si set-group-id Restaurer aprè après « set/drop privilege » OU: utilisation de : setuid, setgid (posix) setreuid, setregid … Avoir les privilèges Version Janvier 2008 N°126 Appels systèmes et liens symboliques S’applique sur… sur Le fichier lien symbolique : lchown, chown, lstat, readlink, unlink remove, rename Le fichier luilui-même : chmod, creat, chown, link, mkdir, open, stat access, chdir, exec, mkfifo, opendir, pathconf, truncate, rename 18 N°127 Version Janvier 2008 Créer/Supprimer un répertoire (1) droits Nom du répertoire S_ISGID : droits du gr. Du répertoire = droits de ses fichiers S_ISVTX : création de fichiers ¬renommer & ¬supprimer S_IX… S_IX… : X est pour « traverser » rmdir: rmdir le répertoire doit être vide rmdir : fonctionne comme unlink N°128 Version Janvier 2008 Créer/supprimer un répertoire (2) #include <sys/types.h> #include <sys/stat.h> int main () { int e; ... e = mkdir ("/tmp/myrep", S_IWUSR); e = rmdir ("/tmp/myrep"); } Commande(s) associée(s): mkdir, rmdir, rm Structure(s) interne(s): inode N°129 Version Janvier 2008 Ouvrir un répertoire Nom du répertoire DIR : un peu comme FILE (section 3) Curseur placé sur la 1ère entrée Combien d’entrée minimum? 19 N°130 Version Janvier 2008 Parcourir un répertoire «descripteur» N° inode Nom fichier Et le chemin ? Seul endroit où est stocké un nom de fichier Avance le curseur N°131 Version Janvier 2008 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 N°132 Version Janvier 2008 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 20 N°133 Version Janvier 2008 Accès au contenu d'un répertoire #include <sys/types.h> #include <dirent.h> int main () { DIR* dir; struct dirent * entry; dir = opendir ("/var"); entry = readdir (dir); printf ("%s - %d", entry->d_name, entry->d_ino); closedir( closedir dir); } seekdir, seekdir telldir, telldir ... Commande(s) associée(s): ls, mv, … Structure(s) interne(s): tables des fichiers N°134 Version Janvier 2008 Manipuler le répertoire courant (1) Nom de fichier «descripteur» Chemin absolu Affecte le contenu d’un processus Allocation de buf + taille allouée Version Janvier 2008 N°135 Manipuler le répertoire courant (2) #include <unistd.h> int main () { int fd, e; ... e = chdir ("/etc"); /* autre possibilité */ fd = open ("/etc", ...); e = fchdir (fd); } ÎTable des fichiers: Changement nombre de références Commande(s) associée(s): cd Structure(s) interne(s): Tables des fichiers, processus 21 N°136 Version Janvier 2008 Renommer / Déplacer un fichier Fichier de départ Fichier d’arrivée newpath dans le même système de fichiers Autres liens en du non affectés Si cible existe elle est écrasée Nombreuses restrictions Chemin correct, cible: répertoire non vide,… Commande mv N°137 Version Janvier 2008 Synchronisation Disque/buffer Descripteur de fichier sync: sync synchronise les buffers (écriture) et disques fsync: fsync idem mais pour un fichier Différer l’écriture ⇒ accélérer les échanges Toutes les xx sec. + arrêt de la machine Version Janvier 2008 N°138 Synchronisation Disque/buffer #include <unistd.h> int main () { int fd, e; ... /* Ouverture fichier en écriture */ fd = open ("/etc/passwd", ...); ... e = fsync (fd); sync () /* S. F. */ } Commande associée(s): sync Structure(s) interne(s): Tables, buffer, inode 22 N°139 Version Janvier 2008 Système de fichier /proc (1) Processus en cours Autres informations : mémoire, noyau, paramètres systèmes, … N°140 Version Janvier 2008 Système de fichier /proc (2) Systèmes de fichiers supportés Information sur la mémoire N°141 Version Janvier 2008 Système de fichier /proc (3) Information sur la table des volumes montés 23 N°142 Version Janvier 2008 Système de fichier /proc (4) Proprié Propriétaire, taire, PID Répertoire courant Exé Exécutable Répertoire Racine Variables environnement 24