Questions à choix multiples¶
La matière couverte cette semaine porte sur le système de fichiers et sa manipulation par les processus.
Question 1. Accès aux fichiers¶
Les bits de permissions permet de contrôler l’accès aux fichiers. Considérons le répertoire ci-dessous :
-rw-r--r-- 1 obo obo 0 23 mar 21:57 a
-r-xr-x--x 1 obo obo 0 23 mar 21:57 b
-rw------- 1 obo obo 0 23 mar 21:57 c
-rw------x 1 obo obo 0 23 mar 21:57 d
--w-----w- 1 obo obo 0 23 mar 21:57 e
obo peut lire le fichier c, exécuter le fichier b et modifier le contenu du fichier dobo peut lire le fichier a, exécuter le fichier b et modifier le contenu du fichier cl’utilisateur obo peut lire le fichier e, exécuter le fichier b et modifier le contenu du fichier e
l’utilisateur obo peut lire le fichier c, exécuter le fichier d et modifier le contenu du fichier b
l’utilisateur obo peut lire le fichier c, exécuter le fichier a et modifier le contenu du fichier d
Question 2. Fichiers et répertoires¶
Les permissions associées aux répertoires ont un rôle un peu différent de celles qui sont associées aux fichiers. Considérons le répertoire ci-dessous qui contient 4 sous-répertoires.
drw------- 2 obo obo 68 23 mar 22:25 a
dr-x------ 2 obo obo 68 23 mar 22:25 b
d-wx------ 3 obo obo 102 23 mar 22:27 c
drwx------ 3 obo obo 102 23 mar 22:26 d
Chacun de ces répertoires contient un fichier qui a comme nom f. La commande touch(1) peut être utilisée pour créer un fichier vide. Ainsi, dans ce répertoire, la commande touch f va créer le fichier f
ls -l f
-rw-r--r-- 1 obo obo 0 23 mar 22:30 f
ls -l d
touch c/x
cd b
ls -l b
cat c/f
cd d
ls -l c
touch d/x
cd a
ls -l c
touch a/x
cd c
ls -l b
touch b/x
cd b
Question 3. Permissions sur les fichiers¶
- Le fichier ayant
00467comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00777comme permissions est lisible par son propriétaire - Le fichier ayant
00600ne peut être lu que par son propriétaire
- Le fichier ayant
00647comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00700comme permissions est lisible par son propriétaire - Le fichier ayant
00421comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00476comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00747comme permissions est lisible par son propriétaire - Le fichier ayant
00601comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00677comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00017comme permissions est lisible par son propriétaire - Le fichier ayant
00400comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00755comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00417comme permissions est lisible par son propriétaire - Le fichier ayant
00222comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00666comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00400comme permissions est modificale par son propriétaire - Le fichier ayant
00400comme permissions ne peut être lu que par son propriétaire
Question 4. Permissions sur les fichiers¶
Les bits de permissions associés à un fichiers sont généralement représentés sous forme textuelle lorsque la commande ls(1) affiche le contenu d’un répertoire. Considérons le répertoire ci-dessous :
-rw-r--r-- 1 obo obo 0 23 mar 21:57 a -rwxr-x--x 1 obo obo 0 23 mar 21:57 b -rw------- 1 obo obo 0 23 mar 21:57 c -rw------x 1 obo obo 0 23 mar 21:57 d --w-r--rw- 1 obo obo 0 23 mar 21:57 e
chmod 644 a
chmod 751 b
chmod 600 c
chmod 601 d
chmod 246 e
chmod 446 a
chmod 157 b
chmod 006 c
chmod 106 d
chmod 642 e
chmod 444 a
chmod 751 b
chmod 600 c
chmod 604 d
chmod 123 e
chmod 322 a
chmod 364 b
chmod 300 c
chmod 301 d
chmod 123 e
.. comment::
Relisez la page de manuel de `chmod(1)`_
Question 5. Système de fichiers¶
- deux fichiers se trouvant dans des répertoires différents sur le même disque peuvent avoir le même inode
- le champ
nlinksest toujours positif - un accès au fichier modifie le
atimeassocié à ce fichier
- deux fichiers ont toujours des inode différents
- l”inode contient le nom du fichier
- une écriture dans un fichier modifie le
mtimeassocié à ce fichier
- un fichier et un répertoire se trouvant sur le même disque peuvent avoir le même inode
- une lecture dans un fichier modifie le
mtimeassocié à ce fichier - l”inode contient le nom du fichier
- une copie d’un fichier incrémente la valeur du champ
nlinksde son inode - une lecture dans un fichier modifie le
atimeassocié à ce fichier - il n’y a jamais deux fichiers qui ont le même inode
Question 6. Manipulation des répertoires¶
Les répertoires sont des fichiers spéciaux. Pour les utiliser, il faut faire appel aux fonctions opendir(3), readdir(3) et closedir(3).
/*
* name!=NULL
* retourne le nombre de fichiers dans le répertoire name
* et -1 en cas d'erreur
*/
int nfiles(char * name) {
DIR *dirp;
struct dirent *dp;
dp=malloc(sizeof(struct dirent));
if(dp==NULL) {
return -1;
}
dirp = opendir(name);
if(dirp==NULL) {
return -1;
}
int count=0;
while ((dp = readdir(dirp)) != NULL) {
if (dp->d_type==DT_REG) {
count++;
}
}
int err = closedir(dirp);
if(err<0) {
return -1;
}
return(count);
}
int nfiles(char * name) {
DIR *dirp;
struct dirent *dp;
dirp = opendir(name);
if(dirp==NULL) {
return -1;
}
int count=0;
while (readdir(dirp) != NULL) {
count++;
}
int err = closedir(dirp);
if(err<0) {
return -1;
}
return(count);
}
int nfiles2(char * name) {
DIR dirp;
struct dirent dp;
dirp = opendir(name);
if(dirp==-1) {
return -1;
}
int count=0;
while ((dp = readdir(dirp)) != -1) {
count++;
}
int err = closedir(dirp);
if(err<0) {
return -1;
}
return(count);
}
int nfiles(char * name) {
DIR dirp;
struct dirent dp;
dirp = opendir(name);
int count=0;
while ((dp = readdir(dirp)) != NULL) {
if (dp->d_type==DT_REG) {
count++;
}
}
int err = closedir(dirp);
if(err<0) {
return -1;
}
return(count);
}
Question 7. Liens symboliques¶
Considérons un répertoire dans lequel les commandes suivantes sont exécutées :
touch a
cp a b
ln a c
ln b d
echo "test" > c
ln -s d e
echo essai > e
- les fichiers
aetcont le même inode - les fichiers
betdont la même taille - l”inode correspondant au fichier
dindique qu’il y a deux liens vers lui
- les fichiers
deteont des inode différents - les fichiers
aetcont la même taille - l”inode correspondant au fichier
bindique qu’il y a deux liens vers lui
- les fichiers
aetcont des inode différents - les fichiers
eetdont la même taille - l”inode correspondant au fichier
dindique qu’il y a trois liens vers lui
- les fichiers
aetdont des inode différents - les fichiers
betdont la même taille - l”inode correspondant au fichier
bindique qu’il y a trois liens vers lui
- les fichiers
b,deteont le même inode - les fichiers
aetcont la même taille - l”inode correspondant au fichier
aindique qu’il y a deux liens vers lui
en’est pas lisible par cet utilisateur.