Exercice 7 : Etude des processus LINUX - Free

BOURIGAN ? NGUYEN - SYLVESTRE. 3B IRT 04. TP 01. LINUX .... II. Système
de fichiers LINUX .... Exercice 8 : Gestion des signaux dans des programmes.

Part of the document


TP 01 LINUX Introduction au système LINUX
Exercice 1 : Droits
> Pour que les autres utilisateurs ne puissent pas accéder au compte
etudiant , il faut modifier l'accès de celui-ci en utilisant la
commande chmod xxx, x représentant un chiffre dans la base 10 et un
type de personnes (User, Group et Others, respectivement). Un x
représente les droits, soit de lecture, et/ou d'écriture, et/ou
d'exécution du type d'utilisateur : rwx (Read Write et eXecution). Si
le fichier est accessible qu'en lecture, x deviendra alors r--, soit
100 en binaire, soit le chiffre 4 en décimal. Dans notre cas, le
compte etudiant doit être accessible entièrement par nous, donc User,
et ne pas être accessible par Group ni Others. Voici alors la commande : chmod 700 (U: rwx, G:---, O: ---) > Nous créons un répertoire nommé TPLINUX dans le /tmp accessible(r-x)
que par les membres du groupe etudiant : mkdir /tmp/TPLINUX chmod 050 /tmp/TPLINUX > Puis nous créons un fichier nommé toto qui est lisible et modifiable
(rw-) par les membres du groupe etudiant mais pas par les autres :
touch /tmp/TPLINUX/toto chmod 060 /tmp/TPLINUX/toto > Les utilisateurs du groupe etudiant ne peuvent pas supprimer le
fichier toto car nous avons déterminé les droits d'accès sur le
répertoire TPLINUX.
Exercice 2 : Droits d'accès
> Pour essayer de supprimer le fichier /var/log/messages, nous tapons la
commande rm (remove un fichier) : rm /var/log/messages
Mais nous n'avons pas la permission de supprimer ce fichier, il est
protégé en écriture.
En effet, en tapant la commande ls -l, nous pouvons voir les détails
des fichiers et nous observons que le fichier messages est sous
l'administration de Root et nous n'avons pas les droits pour pouvoir
modifier les accès d'un fichier qui est en Root.
> En tapant la commande id, nous obtenons notre login de connexion
(ret04) et notre groupe (505), voici ce que nous obtenons :
uid=505(ret04) gid=505(ret04) groupes=505(ret04)
context=user_u:system_r:unconfined_t
> Nous créons un fichier texte sans contenu et nous lui attribuons les
droits d'accès suivants : lisible par tout le monde (r--) mais pas
modifiable (ni par nous r-x) :
touch /tmp/TPLINUX/texte1
chmod 555 /tmp/TPLINUX/texte1 > Nous créons un répertoire nommé Secret qui est lisible que par nous :
mkdir /tmp/TPLINUX/secret
chmod 733 /tmp/TPLINUX/secret
Comme nous n'avons donné de droit de lecture qu'à nous, les autres
membres du groupe ne peuvent pas le lire (G: -wx = 3).
> Nous créons un répertoire nommé Connaisseurs tel que les autres
utilisateurs ne puissent pas lister son contenu mais puissent lire les
fichiers qui y sont placés, le chmod pour un répertoire est différent
(nous leur donnons les droits de lecture mais les fichiers sont
listables car il sont exécutables):
mkdir /tmp/Connaisseurs
chmod 711 /tmp/Connaisseurs
> La commande SUID permet un accès à n'importe quel fichier comme étant
propriétaire.
Les commandes newgrp, passwd et sudo ont la permission SUID. Exercice 3
> Pour que les fichiers et répertoires placés sous /home/usr/xx soient
lisibles uniquement par leur propriétaire et les membres du groupe,
mais non modifiables ni exécutables, il faut qu'ils aient le droit
d'accès : 550 pour les répertoires et 440 pour les fichiers. > Pour chercher l'ensemble de ces fichiers, nous utilisons la commande
suivante :
find /home/usr -perm 440
Système de fichiers LINUX
Exercice 4 : Commandes df et du
> Nous tapons la commande df (disk free) et nous obtenons des
informations sur les systèmes de fichiers : hda2 qui occupe 60%
none qui n'occupe rien du tout
hda4 qui occupe 1%
Il y a donc 3 systèmes de fichiers qui correspondent au système home. > Notre répertoire de connexion /dev/hda4 appartient au système home.
Il reste 4,2Go d'espace libre/4,5Go au total (commande df -h, l'option
h permet de voir la taille en Go et non en octets).
> Notre répertoire de connexion occupe 124ko d'espace. (du -sh).
> A l'aide de la commande du -s et sort, on affiche les fichiers et
répertoires (selon leur taille et non par ordre alphabétique), situés
dans /etc.
du -s /etc/*| sort -nr
L'option -n trie la colonne de taille des fichiers de façon
arithmétique et non selon l'ordre ACII. L'option -r sert à trier dans
l'ordre décroissant.
Le signe '|' permet d'exécuter les 2 actions en même temps.
L'astérisque '*' trie toute sorte de document dans le répertoire /etc.
Exercice 5 : Inodes et liens
> En tapant la commande ls -i, nous obtenons notre numéro inode :
194700. > Nous créons un répertoire nommé reper et nous regardons les liens avec
la commande ls -l. Ce répertoire contient 2 liens qui correspondent
aux adresses du répertoire courant (.) et du répertoire père (..), ce
qui est normal. > Nous créons maintenant un sous-répertoire nommé sous-rep dans le
répertoire reper et nous observons qu'il y a 3 liens. C'est normal
puisque nous avons créé un sous répertoire. > Nous créons un texte dans le répertoire sous-rep et nous regardons son
numéro d'inode: 194704. > Nous renommons texte en fich (mv texte fich) et nous constatons qu'il
a toujours le même numéro d'inode, qui est le 194704. > Nous créons un lien dur sur le fichier fich avec la commande : ln fich
liendur. Le nombre de liens est de 2 et le numéro d'inode de fich et
de liendur est toujours le même (194704). > Nous créons maintenant un lien symbolique sur le fichier fich avec la
commande :
ln -s fich liensymb
Nous constatons alors que le numéro d'inode du liensymb est différent
de celui de fich : 484611.
> En déplaçant le fichier fich, le lien symbolique n'est plus valable,
tandis que le lien dur nous permet d'accéder au contenu de fich. Le
lien symbolique est une sorte de pointeur donc lorsque l'on déplace ou
supprime le fichier, le lien symbolique ne peut plus servir. Le lien
dur est une copie du fichier. > La commande ls -R permet de lister tous les liens.
Exercice 6 : Partitions, montages
> Pour visualiser les partitions sur notre disque dur, nous utilisons la
commande df -T.
Nous avons 3 partitions qui sont hda2, none et hda4. Les types
correspondant sont ext3 et
tmpfs. > Pour visualiser les montages définis dans /etc/fstab, nous utilisons
la commande : more/etc/fstab
Voici les montages qui sont définis :
/dev/pts
/dev/shm
/home
/proc
/sys
swap
/media/cdrom
/media/floppy
Les montages automatiques sont ceux qui ont « defaults » comme option:
/dev/pts
/dev/shm
/home
/proc
/sys
swap
> Les comptes utilisateurs sont crées dans la partition hda2 et hda4
avec la commande df -h.
Processus
Exercice 7 : Etude des processus LINUX
> Pour afficher la liste de tous les processus tournant sur notre
machine avec les informations demandées, nous utilisons la commande ps
-g -u.
L'information TIME correspond au temps d'utilisation du CPU pour
l'exécution du processus. Le processus ayant le plus utilisé le processeur de notre machine est
-bash. Le premier processus lancé après le démarrage du système est le PID
3021. Notre machine a démarré à 9h04.
Depuis le démarrage de notre machine, le nombre approximatif de
processus créés est de 2. > Pour afficher le PPID d'un processus, il faut taper la commande ps -f.
Pour donner la liste ordonnée de tous les processus ancêtres de la
commande ps en cours, nous utilisons la commande ps -ef.
> La commande pstree permet de voir directement et graphiquement la
liste des processus PPID. > La commande top permet d'avoir des statistiques sur les processus en
cours toutes les secondes et de façon interactive (possibilités de
trier et même de tuer des processus).
Le plus gros processus sur notre machine est l'affichage de l'écran
(X). Exercice 8 : Gestion des signaux dans des programmes
> La commande top se rafraîchit d'elle-même toutes les secondes. Pour
éviter cela, on utilise top -n 1. L'option -n spécifie le nombre
d'affichages avant de quitter le programme.
L'option -n 1 permet d'afficher la liste des processus puis de quitter
top.
Pour cela nous allons créer une boucle infinie en utilisant while
associée à une condition toujours vraie (true). La commande sleep
permet de faire attendre le déroulement du script pendant un nombre de
secondes indiqué en argument.
En bash : #!/bin/bash
while true
do
top -n 1
sleep 1
done En C : #include
#define true 1
int main()
{
while(true)
{
system("top -n 1");
system("sleep 1");
}
return 0;
}
> Nous souhaitons modifier le programme pour qu'il ignore le CTRL Z.
Pour ce faire, nous utilisons le signal stop (SI