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 d
obo
peut lire le fichier a
, exécuter le fichier b
et modifier le contenu du fichier c
l’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
00467
comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00777
comme permissions est lisible par son propriétaire - Le fichier ayant
00600
ne peut être lu que par son propriétaire
- Le fichier ayant
00647
comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00700
comme permissions est lisible par son propriétaire - Le fichier ayant
00421
comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00476
comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00747
comme permissions est lisible par son propriétaire - Le fichier ayant
00601
comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00677
comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00017
comme permissions est lisible par son propriétaire - Le fichier ayant
00400
comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00755
comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00417
comme permissions est lisible par son propriétaire - Le fichier ayant
00222
comme permissions ne peut être lu que par son propriétaire
- Le fichier ayant
00666
comme permissions est exécutable par n’importe quel utilisateur - Le fichier ayant
00400
comme permissions est modificale par son propriétaire - Le fichier ayant
00400
comme 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
nlinks
est toujours positif - un accès au fichier modifie le
atime
associé à ce fichier
- deux fichiers ont toujours des inode différents
- l”inode contient le nom du fichier
- une écriture dans un fichier modifie le
mtime
associé à 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
mtime
associé à ce fichier - l”inode contient le nom du fichier
- une copie d’un fichier incrémente la valeur du champ
nlinks
de son inode - une lecture dans un fichier modifie le
atime
associé à 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
a
etc
ont le même inode - les fichiers
b
etd
ont la même taille - l”inode correspondant au fichier
d
indique qu’il y a deux liens vers lui
- les fichiers
d
ete
ont des inode différents - les fichiers
a
etc
ont la même taille - l”inode correspondant au fichier
b
indique qu’il y a deux liens vers lui
- les fichiers
a
etc
ont des inode différents - les fichiers
e
etd
ont la même taille - l”inode correspondant au fichier
d
indique qu’il y a trois liens vers lui
- les fichiers
a
etd
ont des inode différents - les fichiers
b
etd
ont la même taille - l”inode correspondant au fichier
b
indique qu’il y a trois liens vers lui
- les fichiers
b
,d
ete
ont le même inode - les fichiers
a
etc
ont la même taille - l”inode correspondant au fichier
a
indique qu’il y a deux liens vers lui
e
n’est pas lisible par cet utilisateur.