Vous êtes sur la page 1sur 7

Université Mohammed V 2014/2015

École Nationale
Supérieure
d'Informatique et
d'Analyse des
Systèmes – ENSIAS
-

Systèmes
d´exploitation

Série
d'exercices
n°1:

I. Commandes générales d´Unix:


1- Afficher le calendrier de l'année 2009.
$> cal 2009
2- Afficher le calendrier du mois de septembre 1752, et utiliser la commande « man » pour
avoir des explications sur la sortie.
$> cal 9 1752
2- Afficher la date au format jj-mm-aa (Exemple: 28-09-2009).
$> date "+%d-%m-%y" --- 13-04-15
4- La commande « touch » existe, que fait-elle?
La commande ‘touch’ permet de créer un fichier
5- Afficher le nom d'hôte, le numéro de « Release », et le numéro de version de votre machine
Unix.
$> uname -r -n -v
6- Afficher les noms de « login » des utilisateurs connectés, ainsi que leur nombre.
$> who -q
7- Retrouver le format du fichier « /etc/passwd » (fichier de définition des utilisateurs) en
partant du mot-clé password.
$> file /etc/passwd ---- ASCII Text
8- Exécuter une déconnexion, suivie d'une connexion.
$>Login
$>Exit
9- Dans votre répertoire de connexion, créez le répertoire de nom « exercice », et dans ce
dernier, les sous-répertoires « serie1 » et « serie2 ».
$> pwd
$> mkdir exercise
$> cd exercise
$> mkdir serie1 , serie 2
10- Afficher l’arborescence créée précédemment en utilisant deux commandes
différentes. Indication : on utilisera les commandes « ls » et « du ».

Page 1 sur 7
~/exercise$ ls
, 2 serie serie1
~/exercise$ du
4 ./serie
4 ./serie1
4 ./,
4 ./2
11- Afficher, dans votre répertoire de connexion, la liste des fichiers en utilisant deux
commandes différentes pour reconnaître les répertoires.
Indication : on utilisera la commande « ls » avec 2 options différentes.
ls -a (afficher tous les fichiers et dossiers même ceux cachés)
ls -l : (Afficher la liste détaillée des fichiers)
ls -al
12- Copier le fichier « /etc/passwd » dans votre répertoire en le nommant « fic_pass ».
cp /etc/passwd /home/hatim/fic_pass
13- Renommez le fichier « fic_pass » en « passwd ».
mv fic_pass passwd
14- Déplacer le fichier « password » dans le répertoire « serie_1 », sous-répertoire de «
exercice ».
mv passwd exercise/serie1
15- Copier les fichiers « /etc/passwd » et « /etc/group » dans le répertoire « serie2 », sous-
répertoire de « exercice », en étant :
a) dans le répertoire /etc cp /etc/passwd ../home/noker/exercise/serie2
b) dans le répertoire serie2 cp /etc/passwd passwd
c) dans un répertoire quelconque de votre choix cp /etc/passwd ../exercise/serie2
16- Sélectionner le sous-répertoire « serie1 » comme répertoire de travail, et listez depuis ce
dernier les fichiers du sous-répertoire « serie2 ».
cd /exercise/serie1
ls ../serie2 -a
17- Créer le fichier « document » à l’aide de la commande « touch ». Afficher ses
caractéristiques à l’aide des commandes « ls » et « file ».
$ > touch document
18- Positionnez-vous dans votre répertoire de connexion. Affichez les attributs, y compris la
taille en blocs, de tous les fichiers, y compris ceux dont le nom commence par « . ».
$ > ls /usr/xxxx/exercice/serie2
ls -al
19- Afficher les attributs de votre répertoire de connexion.

20- Quelles sont les commandes qui permettent de comparer des fichiers ? Utiliser l’une
d’elles pour comparer votre fichier « .profile » avec celui de l’autre utilisateur.
diff ou cmp
cmp ./profile ./home/usern/.profile
Page 2 sur 7
21- Créez dans votre répertoire de connexion, un répertoire de nom « exemples », et copier
dans ce répertoire l’arborescence située sous « exercice ».
mkdir exemples
cp -R exercise/serie1 exemples/
cp -R exercise/serie2 exemples/

22- Supprimez l’arborescence « exercice » avec une seule commande et sans


demande de confirmation pour les fichiers en lecture seule.
rm -r exemples

II. Commandes pour la gestion des processus sous Unix:

1- Exécutez la commande « ps » et donner la signification de chacune des colonnes affichées.


$ > ps
PID TTY TIME CMD
2835 pts/11 00:00:00 bash
2888 pts/11 00:00:00 ps
2- Créer un script qui affiche bonjour toutes les 30 secondes, en utilisant un éditeur de texte
(gedit). Lancer ce script en arrière-plan, et afficher son PID, puis son numéro de job.
#!/bin/bash
while true
do
echo 'Bonjour'
sleep 30
done
Lancement : ./sh & ; changer les propriétés du fichiers pour le rendre exécutable.
3- Tuer ce script en utilisant son PID ou son numéro de job.
ps (Pour obtenir le pid du processus)
kill 3678
4- Lancer à nouveau ce script en détaché du terminal (insensible à la déconnexion), où
écrit-il ses sorties?
nohup ./sh (no hang up utile pour executer un script shell qui prend du temps)
La sortie est par défaut redirigée vers nohup.out
nohup sh custom-script.sh > custom-out.log &
tail -f custom-out.log
4- Déconnectez-vous, et connectez-vous. Affichez vos processus en tapant: ps
Le script étant indépendant du terminal n'est pas dans la liste des processus.
6- Quelle commande devez-vous exécuter pour afficher le processus qui exécute le
processus bonjour.
$ who
7- Tuez le processus bonjour et détruisez son fichier de sortie.
$ kill -9 PID
8- Supprimez de votre répertoire les fichiers temporaires dans 1 minute.
Page 3 sur 7
$ at now+ 1 minute rm *.tmp
9- Supprimez de votre répertoire les fichiers temporaires chaque dimanche à 10 h
$ 0 10 * * 0 rm *.tmp
La 1er variable spécifie les minutes (0 min), la 2ieme l’heure ( 10h ), la 3ieme le jour du mois ( * pour indiquer tous
les jours du mois ), la 4ieme pour le mois ( * pour tous les mois ), la 5ieme indique le jour de la semaine ( 0 pour
Dimanche ).
10- Supprimez de votre répertoire les fichiers temporaires à 4 h du matin.

$ 0 4* * * rm *.tmp

III. Exercices sur la création et la communication des processus sous Unix:


Exercice 1 :
Donnez un programme C qui permet de :
- Créer deux processus,
- Le processus fils affiche son pid et le pid de son père,
- Le processus père affiche son pid et le pid de son fils,

Page 4 sur 7
Exercice 2 :
Donnez un programme C qui permet de :
- Créer trois processus,
- Chaque processus affiche son pid et le pid de son père,
- Le premier processus affiche la somme des entiers donnés comme arguments de la ligne
commande,
- Le deuxième processus affiche la valeur maximale de ces éléments,
- Le troisième processus affiche la valeur minimale de ces éléments,

Page 5 sur 7
Exercice 3 :
Donner un programme C pour échanger un message entre deux processus.
#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[])


{
int pipefd[2];
int cpid;
char buf;

assert(argc == 2);
if (pipe(pipefd) == -1)
{
perror("pipe");
Page 6 sur 7
exit(EXIT_FAILURE);
}

cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}

if (cpid == 0)
{ /* Child reads from pipe */
close(pipefd[1]); /* Close unused write end */
while (read(pipefd[0], &buf, 1) > 0)
write(STDOUT_FILENO, &buf, 1);
write(STDOUT_FILENO, "\n", 1);
close(pipefd[0]);
exit(EXIT_SUCCESS);

}
else
{ /* Parent writes argv[1] to pipe */
close(pipefd[0]); /* Close unused read end */
write(pipefd[1], argv[1], strlen(argv[1]));
close(pipefd[1]); /* Reader will see EOF */
wait(NULL); /* Wait for child */
exit(EXIT_SUCCESS);
}

Page 7 sur 7