tp3issat (1)
tp3issat (1)
tp3issat (1)
TP3
La commande umask permet de définir un masque de protection des fichiers lors de leur
création. Le masque défini doit être codé en base 8. Quand vous créer un fichier, par exemple
avec la commande touch, ce fichier par défaut possède certains droits. Ce sont 666 pour un
fichier (-rw-rw-rw-) et 777 pour un répertoire (-rwxrwxrwx), ce sont les droits maximum. Vous
pouvez faire en sorte de changer ces paramètres par défaut. La commande umask est là pour ça.
Pour un fichier :
Si vous tapez umask 022, vous partez des droits maximum 666 et vous retranchez 022, on
obtient donc 644, par défaut les fichiers auront comme droit644 -rw-r-r--
Si vous tapez umask 244, vous partez des droits maximum 666 et vous retranchez 244, on
obtient donc 422, par défaut les fichiers auront comme droit422 -rw--w--w-
Pour un répertoire :
Si vous tapez umask 022, vous partez des droits maximum 777 et vous retranchez 022, on
obtient donc 755, par défaut les fichiers auront comme droit644 (-rwxr-xr-x).
Si vous tapez umask 244, vous partez des droits maximum 777 et vous retranchez 244, on
obtient donc 533, par défaut les fichiers auront comme droit422 (-rwx-wx-wx).
Exercice1 :
1- Dans votre répertoire personnel, créez un répertoire portant le nom chapitre5.
2- Allez dans votre répertoire chapitre5 et vérifiez le masque de votre répertoire courant.
3- Créez un fichier vide fic1 et un répertoire rep1.
4- Les droits du fichier fic1 et du répertoire rep1 correspondent-ils à la valeur du masque
affiché précédemment ?
5- Modifiez votre masque définissant les droits par défaut à la valeur 27. Que cela signifie-t-
il ?
6- Créez un fichier vide fic2 et un répertoire rep2.
7- Vérifiez que les droits du fichier fic2 et du répertoire rep2 correspondent à la nouvelle
valeur du masque. Les droits du fichier fic1 et du répertoire rep1 ont-ils changé ?
Exercice2 :
13-Afficher à l’écran tous les fichiers qui se terminent par ‘.c’ à partir du répertoire courant
Chaque ligne représente un étudiant, et contient les informations suivantes : nom, âge et filière.
Les champs seront séparés par un « ; ». Exemple : la ligne Sami;23;L3 correspond à l'étudiant
1) Renvoyer toutes les lignes du fichier liste.txt qui correspondent à l'étudiant s'appelant 'Sami'.
• grep "^Sami;" liste.txt
5) Renvoyer toutes les lignes contenant la chaîne 'mi' sans tenir compte de la casse.
• grep -i "mi" liste.txt
Exercice 4 :
Effectuez les recherches suivantes sur ce dictionnaire à l’aide du « filtre » grep sur le fichier
dico_francais.txt. :
1) Liste des mots se terminant par les lettres « cot ».
• grep "cot$" dico_francais.txt
2) Mots commençant par « av » et se terminant par « t ».
• grep "^av.*t$" dico_francais.txt
3) Mots contenant 2 lettres « a » et pas de lettre « e ».
• grep -v "e" dico_francais.txt | grep "a.*a"
4) Mots commençant par une lettre dans l’intervalle [a-l] et ne comportant que 5 lettres en tout.
• grep "^[a-l].{4}$" dico_francais.txt
5) Compter le nombre de mots commençant par « V ».
• grep -c "^V" dico_francais.txt
Exercice 5 :
««««««««««««««
1) Oui sauf le premier processus init.
2) Le processeur init deviendra son parent.
3)
4) ps -eo « %u %ac »
5) Programme1 :
Programme2 :
Programme3 :
Remarque :
Pour ces programmes, j’ai pas pu executés les fichiers en c malgré q’ils
sont bien crées et compilés sans erreur retourné.
Exercices de prise en main :
1) Pour sytème :
Pour user :
2)a-
4)
5)
6)a-
7)a-
b-
c-
d-
e-
Exercices avancées :
Exercice 1 :
1) Le processus sans père est toujours le processus avec PID = 1.
Son nom est généralement systemd (ou init sur les systèmes plus anciens).
2)
3)
6)
7)
8) et 9)
10) et 11)
12)
13)
Exercice 3 :
1)
5)
6)
««««««««««««««
1. Appel système de création d’un nouveau processus : fork
La seule manière de créer un nouveau processus sous UNIX/Linux est d'utiliser l'appel système
fork(). Seul le processus system (init) (pid=1) est démarré de manière particulière par le
kernel(noyau). Le processus courant peut créer un processus fils en utilisant l’appel système
fork. Cette primitive provoque la duplication (clonage) du processus courant.
Prototype en C :
#include<unistd.h>
pid_t fork() // pid_t : ce type est un long int
Fonctionnement de fork() :
crée un nouveau processus (processus fils) par duplication du processus courant (processus
père).
les « pid » du père et du fils sont différents.
le fils hérite en partie de l'environnement du père.
retourne un entier:
• en cas de succès:
0 dans le fils.
pid du fils dans le père.
• en cas d'échec
-1 dans le père.
le fils n'est pas créé.
Suite à un fork, les processus père et fils poursuivent l'exécution du même programme. La valeur
retournée par fork permet de distinguer entre le père et le fils.
- Pour voir quels processus tournent sur une machine a un moment donné, il faut utiliser la
commande ps.
1- Est-ce que tous les processus ont un processus parent ?
le processus system (init) (pid=1) n’a pas un parent
2- Qu’arrive-t-il si un processus enfant perd son parent ?
Il est adopté par la fonction init()
3- Afficher les threads des processus de l’utilisateur courant.
Ps -flu user_name
4- Changer l’affichage de sortie de la commande ps pour qu’il soit formaté de la manière
suivante : username et commande
Ps -eo ‘’%u %c ‘’
6-Taper le code et essayer le
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid;
switch(pid=fork())
{
case -1:
printf("erreur"); return -1;
case 0:
printf("je suis le fils, mon numéro est
%d\n", getpid()); return 0;
default:
printf("je suis le père, le numéro de mon
fils est %d\n",pid); return 0;
}
return 0;
}
$gcc -o h h.c
$./h