Le but du TP est de vous faire utiliser les commandes de base UNIX pour pouvoir les combiner ensuite de façon à construire des fichiers de commandes (scripts shell).
Lorsque vous vous connectez sur la machine, il y a dans un premier temps une phase d'identification (Nom de login, Mot de passe), à la suite de cette identification toutes les opérations que vous allez réaliser seront faites au regard de vos droits sur les ressources gérées par le système (fichiers, mémoire centrale, utilisation CPU).
Sous Unix après avoir satisfait la phase d'identification, le système lance un processus (dont vous êtes le propriétaire) qui exécute un interpréteur de commandes (sh, csh, tcsh, ksh). Chaque interpréteur de commandes utilise un fichier de configuration pour initialiser votre environnement. Par défaut chaque compte étudiant utilise l'interpréteur de commandes sh.
L'interpréteur de commandes csh parcourt deux fichiers d'initialisation: les fichiers .cshrc et .login qui se trouvent dans votre répertoire de login. Dans un environnement de multi-fenêtrages, à chaque ouverture d'une fenêtre de commandes (shelltool, cmdtool, xterm) un nouveau processus est lancé et va exécuter l'interpreteur de commandes, dans ce cas seul le fichier .cshrc est parcouru (Si vous ouvrez N fenêtres de commandes vous avez N+1 interpréteurs de commandes qui s'exécutent, un par fenêtre et un suite au login).
L'interpréteur de commandes sh utilise lui le fichier .profile.
Ces fichiers correspondent aux fichiers AUTOEXEC.BAT et CONFIG.SYS du système d'exploitation MSDOS. Ils vous permettent de personnaliser votre environnement de travail.
Le TP doit se faire en utilisant l'interpréteur de commandes sh. Pour cela après avoir lancé l'environnement de multi-fenêtrages, ouvrir une fenêtre de commandes xterm (Vous créez un processus qui va exécuter un interpréteur de commandes sh).
La commande man vous permet d'obtenir une aide en ligne sur une commande donnée en argument.
Le manuel est divisé en sections:
Commandes utilisateur;
Appels système;
Les librairies (C, Entrée/Sortie, Mathématique, Fortran, etc ...);
Les fichiers spéciaux (/dev/...);
Les formats de fichiers d'administration et système;
Les jeux;
Les autres;
Les outils d'administration.
Les manipulations vont se faire dans un répertoire tpis1. Vous devez donc commencer par créer un répertoire tpis1 dans votre répertoire de login, à la suite de quoi vous vous placez dans ce répertoire (La commande ls vous servira à constater les modifications survenues dans le système de fichiers suite aux commandes exécutées).
Dans le cas général une commande qui s'exécute considère les caractères frappés au clavier comme son canal d'entrée de données par défaut, et utilise l'écran comme canal de sortie des résultats. Nous allons modifier la valeur des canaux par défaut.
#include <stdio.h>
main() {
int i;
printf("Debut de programme\n\n");
for (i=0; i<max; i++)
printf("Valeur de i = %d\n",i);
printf("Fin de programme\n");
}
La commande ypcat passwd donne le contenu du fichier passwd réseau.
Certains caractères (comme *, #, ?, [, ], $, etc ...) sont transformés par l'interpréteur de commandes avant d'être traités par la commande elle-même. Il existe différentes méthodes pour que ces caractères spéciaux perdent leur propriété.
A la création d'un fichier on lui affecte des droits par défaut. Ces droits par défaut sont définis en fonction d'un masque que l'on peut modifier en utilisant la commande umask. Voici un exemple d'utilisation de la commande umask:
$ umask
022
$touch toto
$ ls -l toto
-rw-r--r-- 1 duchmol gtr 0 19 Oct 15:18:56 toto
$ umask 026
$ touch titi
$ ls -l titi
-rw-r----- 1 duchmol gtr 0 19 Oct 15:18:56 titi
$
La commande umask permet de retirer des droits aux valeurs maxi 666 pour un fichier et 777 pour un répertoire.
Soit un masque de création qui vaut 022
Soient les lignes de commandes suivantes:
(cd /; pwd); pwd
{ cd /; pwd; } ; pwd
Soient les commandes suivantes:
ls -l |
qui liste le contenu du répertoire courant |
ps -aux |
qui liste les processus en cours d'exécution |
who |
qui liste les utilisateurs connectés |
Les accès aux fichiers d'administration réseau sont conditionnés par la présence de la commande ypbind dans la liste des processus en exécution.
Rappels: Une variable est définie dès qu'on lui affecte une valeur. Cette variable est visible ou encore définie uniquement pour le shell dans lequel elle a été définie. Pour la rendre visible pour les processus qui seront lancés après cette affectation (lancement d'un autre shell par exemple), il faut «exporter» la variable. Cette opération est réalisée en utilisant la commande export.
Soit le fichier export_test dont le contenu est le suivant:
echo "\$a a pour valeur $a"
Après avoir crée et ajouté les droits en exécution sur le fichier export_test, affecter à la variable a la valeur elephant rose. Exécuter une première fois la commande export_test, puis exécuter la commande export a et exécuter une deuxième fois la commande export_test. Vous export_test. Vous pouvez constater la différence de comportement, expliquer.
Créer le répertoire tpis2 dans votre répertoire de login.
$ tp23 arg1 arg2 arg3
arg1
arg2
arg3
$
$ tp24 ls
tp21 tp22 tp23 tp24
0
$
$ tp25 ls
tp21 tp22 tp23 tp24 tp25
Ca marche !
$
On peut écrire des scripts shell interactifs, c'est à dire qui attendent des données en cours d'exécution. Pour cela on utilise l'instruction read. Par exemple le script shell moral décrit ci-dessous stocke la réponse de l'utilisateur dans la variable rep
echo -n "Comment vas-tu aujourd'hui (bien, mal)? "
read rep
if [ "$rep" = "bien" ]; then
echo "Super !!!"
else
echo "Ca ira mieux demain !"
fi
$ tp26
a - execute who
b - execute ls -l
c - execute ps -aux
Votre choix ? b
... (résultat de l'exécution ls -l)
$
Soit un répertoire poubelle dans votre répertoire de login. Ce répertoire est utilisé pour stocker tous les fichiers qui sont en attente de destruction. Nous nous proposons d'écrire un script shell qui gérera ce répertoire poubelle. Le script acceptera les options suivantes:
carottes
tomates
chou rouge
navets
pommes de terre
Donner le script shell rech1 qui permet de rechercher un mot dans
le fichier recette. Le mot recherché est un argument de la commande rech1. La recherche doit être effectuée sans distinguer
les majuscules et les minuscules.
Par exemple, la commande
rech1 carottes
a pour résultat
le mot carottes a été trouvé
la commande
rech1 fraises
a pour résultat
le mot fraises n'a pas été trouvé
la commande
rech1
a pour résultat
erreur usage: rech1 mot
contenu de recette1
chocolat banane
contenu de recette2
ananas banane
contenu de recette3
chocalat banane cerise
la commande
rech2 chocolat rep
affiche
Le mot chocolat a été trouvé dans le fichier recette1
Le mot chocolat a été trouvé dans le fichier recette3
calcul 17 + 22
affiche
39
la commande
calcul 17 '*' 22
affiche
374
la commande
calcul 17 , 22
affiche
opérateur inconnu