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 modifiable 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. 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);
}
e
n’est pas lisible par cet utilisateur.