tp3issat (1)

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 23

Système d’exploitation 1 : Windows

Institut Supérieur des sciences appliquées et de technologie de Sousse


Année Universitaire : 2023-2024

Nom de l’enseignant :Khaoula Youssef

TP3

Rappel sur umask :

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).

umask n'est utilisatable que si on est propriétaire du fichier.

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 :

1-Créer un fichier f. txt et puis afficher à l’écran le type du fichier.


2-Que produit la ligne suivante ? help -m help|more
3- Afficher toute la liste des fichiers du répertoire courant de façon
récursive en utilisant la commande find
4- Rechercher les fichiers ordinaires de l’arborescence du répertoire courant qui ont une
taille égale à 0 et afficher les.
5- Supprimer chacun des fichiers trouvés
6- Rechercher les répertoires de l’arborescence de mon répertoire de connexion tel que le
propriétaire est l’utilisateur poste+num poste, et appliquer à tout les répertoires trouvés une
permission = 700
7- Rechercher dans le répertoire courant les fichiers dont le nom commence
par p.
8- Affiche les fichiers de l’arborescence du répertoire /home qui ont été
modifié dans les dix derniers jours.
find /home -type f -mtime -10
9- Affiche les renseignements sur les fichiers de l’arborescence du
répertoire /home et qui ont été modifié dans les dix derniers jours
find /home -type f -mtime -10 -exec ls -l {} \;
10- Affiche les renseignements détaillés sur les fichiers ordinaires
l’arborescence du répertoire courant qui ont au moins la permission 400, c'est-à-dire au moins le
propriétaire a le droit de lecture du fichier
find . -type f -perm -400 -exec ls -l {} \;
11- Rechercher tous les fichiers se terminant par .c dans le répertoire /usr
Find /usr -type f -name “*.c”
12- Connaître les derniers fichiers modifiés dans les 3 derniers jours dans toute l'arborescence
(/)

sudo find / -type f -mtime -3

13-Afficher à l’écran tous les fichiers qui se terminent par ‘.c’ à partir du répertoire courant

Find . -type f -name “*.c”


14- Comment chercher tous les fichiers dont les noms commençant par un «a» majuscule ou une
minuscule, suivi d'éventuellement quelques lettres ou chiffres, et se terminent par un chiffre entre
3 et 6 ?
Find / -type f -iname “a*[36]”
15- On recherche un fichier modifié il y a moins de 12 jours et dont la taille soit supérieure à 30 K
find . -type f -mtime -12 -size +30k

16- Chercher tous les fichiers dont le nom est 'passwd'.


Find / -type f -name “passwd”
17- Chercher tous les fichiers dont la date de la dernière modification remonte à plus de 10
minutes.
Find / -type f -mmin +10
18- Trouver tous les fichiers du groupe 'root'.
Find / -type f -group root
19- Chercher tous les fichiers dont la taille est supérieure à 20Mo.

Find / -type f -size +20M

20- Chercher tous les répertoires se trouvant sous /etc.

Find /etc -type d

21- Chercher tous les fichiers de l'utilisateur 'posteX'


Find / -type f -user postX
Exercice3 :
On suppose qu'un fichier liste.txt contient des informations sur les étudiants (10 au moins).

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

Sami, âgé de 23 ans et appartenant à la filière L3.

1) Renvoyer toutes les lignes du fichier liste.txt qui correspondent à l'étudiant s'appelant 'Sami'.
• grep "^Sami;" liste.txt

2) Renvoyer toutes les lignes correspondant à des étudiants de la filière L3


• grep ";L3$" liste.txt.

3) Renvoyer toutes les lignes des étudiants âgés de 22 ans.


• grep ";22;" liste.txt
4) Renvoyer les lignes des étudiants n'appartenant pas à la filière L3.
• grep -v ";L3$" 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-

b- STIME correspond à l’heure du lancement du processus


c-
3)

4)

5)

6)a-

Nice : Définit la priorité au démarrage d’un processus.


Renice : Ajuste la priorité d’un processus existant.
b-

7)a-

ps : Affiche uniquement les processus de l'utilisateur actuel dans le


terminal.

b-

La commande Kill sert à controler ou arréter des processus.

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)

systemd (PID 1) est le processus parent d'acpid.


4) La commande yes est utilisée pour envoyer une chaine de caractère
répétée en continu jusqu’à ce qu’elle soit interrompue.
5)
Exercice 2 :
1)a-

b- Pour sleep 4444 :


[2] : est le numéro de job assigné à la commande exécuée e n arrière-plan.
25278 : c’est le PID(identifiant du processus).
2)

3)+ : indique que le job est le job actuel.


- : indique le job précédent.
4) et 5)

6)
7)

8) et 9)

10) et 11)

12)

13)

Exercice 3 :
1)

2)Oui,vous pouvez écuter une autre commande dans le meme shell.


3)
4)

5)

6)

7)Oui,maintenant que xeyes tourne en arrière-plan,vous pouvez exécuter


d’autres commandes dans le meme terminal.
8) Lancer gedit en avant-plan : si vous fermez le terminal,gedit se ferme
également.
9) Lancer gedit en arrière-plan : vous pouvez fermer le terminal, et gedit
continuera à fonctionner.
10) Lancer gedit avec nohup permet de s’assurer qu’il continue de
s’exécuter après la fermeture du terminal.
nohup gedit &

««««««««««««««
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

Programme 2 : utilisation de la fonction system()


Il y a une façon de créer un sous-processus en Unix/Linux, en utilisant la commande system(), de
la bibliothèque standard de C <stdlib.h>. Comme arguments, elle reçoit le nom de la commande
(et peut- être une liste d'arguments) entre guillemets. Il faut retenir que system() n'est pas un
appel système, mais une fonction C. Ce qui rend l'utilisation de la fonction system() moins
performante qu'un appel système de création de processus. Tapez le code suivant ensuite
expliquer et analyser le résultat. Exécuter plus qu’une fois pour voir les
différents affichages.
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
int main()
{
int pid;
printf("Hello World \n");
pid = fork();
if (pid == 0) {printf ("je suis le fils mon pid est : %d, mon père est %d\n", getpid(),
getppid());
system("ps") ;}
Else
{ printf("je suis le père, le numéro de mon fils est %d \n", pid);}
return 0;
}

Programme 3 : utilisation de la boucle ‘for’ pour créer une


arborescence de processus
Essayer le code suivant
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
int main()
{
int pid, i;
for(i=0;i<3;i++)
{
pid = fork();
if(pid == 0) printf("je suis le fils mon pid est : %d, mon pere est
%d\n",getpid(),getppid());
else
{ if (pid>0) printf("je suis le pere, mon numero est %d le numéro de mon fils
est %d
\n",getpid(), pid);
else printf("erreur");}
}
return 0;
}

1-Rappel sur les processus


On appelle processus un objet dynamique correspondant à l’exécution d’une suite d’instructions :
un programme qui s'exécute, ses données, ainsi que d’autres informations sur son contexte
d’exécution.
Un processus possède les caractéristiques qui permettent au système de l’identifier. Parmi ces
caractéristiques :
 Etat : exécution, suspendu, etc.
 Identifiant du processus.
 Identifiant du processus qui lui a donnée naissance : processus parent.
 Identifiant de l’utilisateur qui l’a lancé.
 Compteur ordinal : indique la prochaine instruction à exécuter.
 Pile d’exécution : mémorise l’empilement des appels de fonction.
 Données en mémoire.
Un processus s’exécute soit en avant-plan (foreground), soit en arrière-plan (background).

Vous aimerez peut-être aussi