Les fichiers nécessaires au déroulement du BE se trouvent sous Github. Pour les récupérer, exécutez la commande :
git clone https://github.com/ermont/be1.gitVous devriez obtenir un répertoire be1 dont l’arborescence est
la suivante :
be1
├── Arbo.tar.gz
├── be1.pdf
├── processus.c
└── README.mdLe système Unix est un système d’exploitation multi-utilisateurs, multi-tâches, ce qui signifie qu’il permet à un ordinateur (mono ou multi-processeurs) de faire exécuter simultanément plusieurs programmes par un ou plusieurs utilisateurs. Le Shell est l’interface de commande d’Unix. Ce système opératoire est aujourd’hui utilisé dans les milieux universitaires mais aussi dans de très nombreuses applications industrielles (standard Posix). Le système Linux n’a pas été développé dans un but commercial (source libre). Ainsi, tout le monde, depuis sa création, est libre de l’utiliser mais aussi de l’améliorer. Les systèmes Linux sont multi-utilisateurs et permettent de travailler en réseau.
Les machines sont toujours allumées. Le système est opérationnel.
Cependant pour les utiliser il faut se connecter et ainsi ouvrir une
session de travail. Cela n’est possible que si vous êtes connu par le
système, c’est à dire que vous disposer d’un compte sur celui-ci. C’est
le même login/password pour Unix, Windows, Webmail, wifi, etc...
Ce couple est donc incessible.
Déroulement d’une session de travail Unix :
-
Ouverture de session
Utilisez la fenêtre de login pour vous connecter. Le système va essayer de vous authentifier.
Puis il va définir votre environnement de travail. Ce qui inclus :-
le montage du répertoire de connexion (home directory),
-
le lancement d’un shell (vous êtes le propriétaire de ce processus).
-
-
Utilisation du système
-
Fermeture de session
L’environnement graphique propose un gestionnaire de fichier. Vous pouvez créer, déplacer, supprimer des fichiers ou des répertoires.
Exercice 1
Double cliquez sur l’icôneRépertoire personnel de votre_loginsur votre bureau. Visualisez le répertoire Desktop, Documents et MesDocs.
Le shell est un interpréteur de commandes. Il sert d’intermédiaire entre l’utilisateur et le système d’exploitation.
Pour interagir avec la station Linux en ligne de commande, nous ouvrirons une fenêtre console ou terminal. Ce qui est saisi au clavier dans celle-ci est analysé par le shell puis exécuté.
Le premier mot de la ligne doit être une commande suivie éventuellement d’options et d’arguments.
Astuce : pour ne pas faire des erreurs de saisie et gagner du temps, utilisez la complétion des noms de commande ou de fichier avec la touche TAB.
Exercice 2 :
Ouvrez une session graphique pour effectuer la suite du TP. Faire rapidement le tour de l’espace de travail.
Trouvez comment lancer un terminal dans cet environnement graphique.
Quelle est votre identité sur le système ? Utiliser la commande
id.Comment savoir où vous êtes dans l’arborescence de fichiers ? Utilisez
pwd.Qu’est ce que j’ai dans mon répertoire ? Testez
ls,ls -a,ls -a|more.A quoi servent tous ces fichiers?
Les fichiers ou répertoires dont le nom commence par « . » permettent la configuration de votre environnement et de logiciels. Cet ensemble est appelé un profil. Celui-ci est identique sur toutes les machines car ces informations sont stockées dans votre espace personnel.
Identifiez avec l’intervenant le rôle de certains d’entre eux et retenez ceux qui sont indispensables au fonctionnement.
Sous Unix, « tout est fichier ». Cela signifie qu’un disque, une
mémoire, un lecteur de DVD, une clé usb, la sortie d’un processus sont
tous vus par le système comme des fichiers. Il est donc fondamental que
ces fichiers soient ordonnés.
Le système de fichiers sous Unix est organisé de manière arborescente.
Vous vous déplacerez dans celle-ci en utilisant des chemins absolus
(commençant par la racine : /) ou relatifs.
Exercice 3 : Déplacement dans l'arborescence
Lancez une console et effectuez les manipulations suivantes :
cd ../..
pwd
cd
pwd
Où êtes vous ?
Examinez le contenu du premier niveau de l’arborescence Unix avec les commandes suivantes:
ls /etls -l /
Le fichier Arbo.tar.gz est une archive compressée
d’un exemple de compte étudiant un peu désordonné. Pour désarchiver et
décompresser le fichier faites :
tar zxf Arbo.tar.gzExercice 4 : Exploration du répertoire Arbo
Listez le contenu du répertoire Arbo en chemin relatif et chemin absolu.
Placez vous dans 2EA-S7. Lister le contenu de ce répertoire.
Afficher le contenu de Arbo en restant dans 2EA-S7.
Dans cette partie du BE vous allez travailler sur le répertoire Arbo
qui contient un exemple d’arborescence. Celle-ci est composée de
fichiers récupérés par un élève de 1TR sur l’intranet.
Vous pouvez faire tous les tests proposés même si cela provoque des erreurs.
Exercice 5 : Commandes ls, pwd et chemin absolu
Listez le contenu du répertoireDownloadaveclsdepuisArbo, puis en étant dans celui-ci. Placez vous à la racine de votre compte (cdsans arguments). Vérifiez (pwd). Lister à nouveau le contenu deDownload, en indiquant son chemin en absolu puis en relatif. Pensez à utiliser l’astuce de la partie 2 pour gagner du temps et éviter les erreurs.
Exercice 6 : Commandes more, less, cat = visualiser des fichiers
En utilisant l’éditeur de textegedit, créez un fichierpremierdans le répertoireArbocontenant une ou deux phrases. Visualisez ensuite son contenu sans l’éditer avec les commandes suivantesmore,catetless. Quelles différences observez vous?
Exercice 7 : Commande cp
Placez vous dans le répertoire
3EA-S7/Systeme(cd). Vérifiez ou vous êtes (pwd).Utilisez la commande
cpavec l’option-rpour copier le répertoireArbodansSysteme. Allez dans le répertoireArbo.Que se passe-t-il si l’on veut faire une copie appelée
BDE/de son répertoireProg/, et que le répertoireBDE/existe déjà ?Que se passe-t-il si vous voulez faire une copie d’un fichier dans un répertoire où il existe déjà un fichier de ce nom ?
Est-il possible de taper une ligne du genre de :
cp tp-cesar.zip tp.tar Download/?Quel est l’effet de cette ligne? Quel sera le nom des nouveaux fichiers?
Exercice 8 : Commande mv
Changez le nom du répertoire
Arbosource de la copie enPoubelle(mv).Que se passe-t-il si le répertoire existe déjà ?
Comment faire pour à la fois déplacer un fichier et changer son nom ?
Renommez en
Introrezo.pdfet déplacez le fichierArbo/IntroL4.pdfdans le répertoireArbo/2EA-S7/Docs. Vérifiez avecls.Que se passe-t-il si on lance
mvavec les options-iet-fensemble?
Astuce : ce que vous avez saisi sur la ligne de commande est
mémorisé dans un historique. Utilisez les flèches haut et bas pour
retrouvez vos commandes et évitez de les ressaisir. Pour en savoir plus
sur le recours à l’historique info history.
Exercice 9 : Commande rm
Vérifiez que vous êtes toujours dans le répertoire
Arbo.Supprimez le fichier
be1.pdf.Vous voulez détruire
WEI,lsvous dit qu’il est vide. Cependant, quand vous tapezrm WEI, la machine vous répond :rm: impossible de supprimer «WEI»: est un dossier
Pensez à vérifier ce qui s’exécute derrière les commandes.
L’utilisation de caractères spéciaux dans la ligne de commande, notamment pour les noms de fichiers, permet de désigner des ensembles. Voici ces caractères appelés aussi méta-caractères : , ? , [] et ^.
| Syntaxe | Signification |
|---|---|
| * | remplace une chaîne de longueur qcq, même vide |
| ? | remplace un seul caractère qcq |
| [ar] [3-8] | un caractère qcq de la liste ou de l'intervalle, pas d'espace dans les crochets |
| [^gtc] [^a-z] | n'importe quel caractère sauf ceux de la liste, pas d'espace dans les crochets |
C’est le shell qui interprète ces caractères. Pour que ceux-ci soient
considérés seulement comme un caractère normal, il faut placer un
Il ne faut pas confondre ces méta-caractères permettant de désigner des
ensemble de fichiers avec les expressions régulières utilisées par
d’autres commandes telles que grep.
Le répertoire de travail est toujours Arbo. Vous avez remarqué que
tout est en vrac. Les commandes ci-dessous vont vous permettre de ranger
petit à petit ce répertoire.
Exercice 10
Listez les fichiers commençant par
tpoutd.Listez les fichiers finissant par
Les commandes qui fournissent de l’aide sont : man et info.
Ainsi si vous voulez savoir ce que fait la commande man, saisissez
man man.
Pour vous en sortir vous devez apprendre à lire un man et notamment savoir lire le synopsis d’une commande.
Un fichier a un propriétaire, un groupe et un ensemble de droits d’accès définissant les possibilités de lecture, écriture et exécution du fichier pour les utilisateurs du système.
Il existe trois ensembles d’utilisateur :
-
le propriétaire du fichier
-
les utilisateurs du même groupe de travail que le propriétaire
-
les autres utilisateurs ayant accès au système
Droits Signification pour un fichier Signification pour un répertoire Lecture (r) droit de lecture du contenu du fichier droit de lecture du contenu du répertoire Ecriture (w) droit de modification du fichier droit de modif. du contenu du répertoire (suppression ou création de fichier) Exécution (x) droit d'exécuter le fichier droit de passage dans le répertoire
Exercice 11:
Pouvez vous créer un répertoire sous
/home?Dans le répertoire
Systeme, exécutez la commandemkdir repdroitspour créer un sous-répertoirerepdroits. Quels sont les droits par défaut de ces répertoires ?Créez un fichier
droit.txt(touch droit.txtpour créer un fichier vide sinon utilisez un éditeur de texte) dans le répertoirerepdroits. Quels sont ses droits par défaut?
Les ordinateurs sous Linux offrent la possibilité de se connecter à distance (avec un environnement graphique) sur un autre poste.
Par exemple, la commande ssh nom_stationétablie une connexion
sécurisée avec un autre ordinateur dont le nom est nom_station puis
exécute un SHELL sur cet ordinateur.
La station à laquelle on désire se connecter peut avoir un nom de login
différent. Aussi, il faudra le spécifier lors de la connexion :
ssh login@nom_station!.
Enfin, il est possible aussi de « déporter » l’affichage, c’est-à-dire que l’affichage graphique d’une application lancée sur l’ordinateur auquel on s’est connecté se fera sur notre ordinateur :
ssh -X nom_station.
-
Connaître l’arboresence du système de fichier
-
Savoir se situer et se déplacer à l’aide des chemins absolus et relatif
-
Comprendre à quoi servent les droits sur les fichiers et les répertoires
-
Maîtriser la visualisation et la modification de ces droits
-
Avoir une idée du fonctionnement de l’interpréteur de commande (alias, méta-caractères, path ...)
-
Pouvoir lire un man pour trouver la syntaxe correcte d’une commande
-
Visualiser les processus
L'objectif de cette partie est de comprendre le lancement de processus, la notion d'identifiant de processus, la notion d'état de processus, ...
On considère le programme processus.c donné par le listing 1.
Ce programme est fourni, il n'est pas nécessaire de le réécrire, le copier/coller ou autre.
Il suffit de l'éditer avec votre outil d'édition préféré (gedit, pluma, gvim, emacs, codium, ...)
Listing 1 - le programme processus.c fourni :
int main(int argc, char *argv[]) {
int tempsPere, tempsFils;
pid_t pid_fork;
tempsPere= 120;
tempsFils= 60;
pid_fork= fork();
// bonne pratique : tester systématiquement le retour des primitives
if (pid_fork == -1) {
printf("Erreur fork\n");
exit(1);
/* par convention, renvoyer une valeur > 0 en cas d'erreur,
* différente pour chaque cause d'erreur, ici 1 = erreur fork
*/
}
if (pid_fork == 0) { /* fils */
printf("fils: processus %d, de père %d et code du fork %d\n",
getpid(), getppid(), pid_fork);
sleep(tempsFils);
printf("fin du fils\n");
exit(EXIT_SUCCESS);
/* bonne pratique :
terminer les processus par un exit explicite */
}
else { /* père */
printf("père: processus %d, de père %d et code du fork %d\n",
getpid(), getppid(), pid_fork);
sleep(tempsPere);
printf("fin du père\n");
}
return EXIT_SUCCESS; /* -> exit(EXIT_SUCCESS); pour le père */
}-
Compilez le programme en utilisant
gcc:> gcc processus.c -o processusExécutez le :
./processus(Pourquoi faut-il ajouter./pour que cela fonctionne ?) -
Utilisez la commande
ps -fjndans un autre terminal et indiquez2.1. l'identifiant du processus et de son père. Est-ce que les valeurs fournies par la commande
pssont similaires à celles affichées par le programme ?2.2. l’état des processus (
S:Sleeping, en attente ;R:Running, actif ;T:sTopped, terminé ;Z:Zombie, ...) :-
après le lancement du programme ;
-
après la fin du processus fils.
-
-
Modifiez le code en échangeant les valeurs de
tempsFilsettempsPereet exécutez le programme. En utilisant la commandeps -fjn, que constatez-vous lorsque le processus père a terminé ?
Modifiez le programme précédent avec :
-
variable= 10;au début du code du fils ; -
variable= 100;au début du code du père.
Affichez variable à la fin du code du fils et à la fin du code du
père. Que constatez-vous ?