• Aucun résultat trouvé

TD : Programmation sous Linux — semaine 1

N/A
N/A
Protected

Academic year: 2022

Partager "TD : Programmation sous Linux — semaine 1"

Copied!
4
0
0

Texte intégral

(1)

Module ISUP-2019sept TD 1 – page 1/4

TD : Programmation sous Linux — semaine 1

20 Septembre 2019

Objectif(s)

O S’approprier l’environnement UNIX/Linux en utilisant diverses commandes consoles.

O Apprendre `a ´ecrire un script bash.

Exercice 1 – Pr´eliminaires

Tout au long de ce TD nous allons utilisez de nombreuses commandes UNIX. Il est essentiel pour vous de prendre des notes, afin de lister ces commandes afin de ne pas les oublier et de documenter toutes les difficult´es rencontr´ees.

1. Ouvrez un terminal `a l’aide du raccourciCTRL+ALT+Tou via le menu graphique.

2. le terminal permet de naviger dans les r´epertoires et fichiers de votre syst`eme. Nous allons effectuer, en console, les

´etapes suivantes :

— Cr´eer un r´epertoireISUPavecmkdir ISUP

— Rentrer dans ce r´epertoire aveccd ISUP

— Cr´eer un autre r´epertoireinformatiqueet puistd1`a l’int´erieur de ce dernier.

— Retourner dans le r´epertoire parent aveccd ..et lancer la commandels; quelle est sa fonction ?

— Taper maintenantcd ~. O`u ˆetes-vous ? Que signifie le~?

— Retourner danstd1.

3. Vous ˆetes normalement dans le r´epertoire~/ISUP/informatique/td1, v´erifiez que c’est bien le cas en tapant pwd. Nous allons dans la suite utiliser l’´editeur de texteEmacs. Par curiosit´e, v´erifions o`u se situe le programme emacs:

whereis emacs

Cette commande affiche le chemin vers le programme ex´ecutableemacs. En principe, nous devrions taper tout ce chemin pour lanceremacs, mais le r´epertoire dans lequel est contenu emacs1est en fait automatiquement parcouru par le shell chaque fois qu’une commande est entr´ee par l’utilisateur. Cette particularit´e est dˆue au fait que ce r´epertoire est pr´esent dans la variable d’environnementPATH.

– Utilisez la commandeechopour afficher le contenu de cette variable : echo $PATH

Ainsi, il n’est pas utile d’entrer syst´ematiquement l’int´egralit´e de ce chemin chaque fois qu’on veut lancerEmacs: tapez simplement la commandeemacspour lancer l’´editeur de texteEmacs.

– Cr´eer et sauvegarder un fichier dans ce mˆeme r´epertoire comprenant plusieurs lignes avec, par exemple, la liste de vos musiques pr´ef´er´ees.

4. Retourner dans le terminal. Vous remarquez que, si vous n’avez ferm´e Emacs, vous ne pouvez plus utiliser le terminal. En effet, celle-ci se bloque jusqu’`a ce que le programme lanc´e (iciEmacs) se termine. FermerEmacs dans le terminal `a l’aide de l’interruption CTRL + C. Maintenant, relancez le avec la commande emacs &, ce caract`ere&`a la fin de toute commande permet de lancer un programme via le terminal et que celui-ci soit toujours utilisable (le programme est lanc´e en tˆache de fond).

5. `A partir de maintenant, toutes les commandes ne seront plus d´ecrites en d´etail `a chaque fois. Afin de vous aider, vous disposez d’un outil tr`es utile pour (re)trouver une commande et/ou la d´etail de ses options : la commandeman (abr´eviation demanual), qui permet de donner la documentation d’une commande. Par exemple si vous tapezman cdvous aurez des informations surcd. Si vous ne savez pas le nom de la commande que vous cherchez, l’option-k vous permet de chercher toutes les pages du manuel qui contiennent une certaine chaˆıne de caract`eres (par exemple

1. ainsi qu’un certain nombre d’autres r´epertoires

Sorbonne Universit´e/Master d’Informatique/ISUP-2019sept 20 Septembre 2019

(2)

Module ISUP-2019sept TD 1 – page 2/4 man -k <mot>vous permet de chercher toute les pages qui contiennent<mot>)2. Dans une page de manuel, vous pouvez faire une recherche en tapant le caract`ere “/” suivi de votre recherche, puis en appuyant sur la touche entr´ee. Vous vous d´eplacez ensuite de r´esultat en r´esultat vers l’avant avec la touchen(pournext), et vers l’arri`ere avecshift-n. On quitte le manuel en appuyant sur la toucheq.

La commandemanb´en´eficie elle-mˆeme d’une page de manuel, accessible avec la commandeman man.

6. Arm´es de cet outil, cherchez et utilisez la commande ad´equate pour afficher le nombre de caract`eres pr´esents dans le fichier que vous venez de cr´eer.

7. Trouvez dans votre fichier les lignes qui contiennent la lettre “e” (avec la commandegrep).

Exercice 2 – Cr´eation, modification et archivage de fichiers 1. Familiarisez-vous avec les options des commandesls,cp,mvetrm.

Cr´eez un sous-r´epertoiresubtd1danstd1et quelques fichiers dans le r´epertoire.

– D´eplacez un des fichiers contenu dans subtd1 vers le r´epertoire p`ere (td1).

– Cr´eez une archivetarcontenant tous les fichiers du r´epertoiresubtd1avec la commandetar: tar --create --file archive.tar subtd1

Une fac¸on plus courte d’´ecrire la mˆeme commande consiste `a utiliser les abr´evations des options : tar -c -f archive.tar subtd1, ou mˆemetar -cf archive.tar subtd1 – Supprimez le r´epertoiresubtd1

– Extrayez les fichiers contenus dansarchive.tar

– Quelle option permet `a la commandetarde compresser les fichiers au formatgzip?

2. Afin de ne pas supprimer un fichier par erreur, il est plus prudent d’utiliser les commandesrm,mvetcpavec l’option -i(“interactive”). Cr´eer s’il n’existe pas d´ej`a le fichier~/.bashrc(le fichier de configuration du shell) et y d´efinir des alias (avec la commandealias) pour ces trois commandes incluant l’option -i.

3. Saisir les commandes suivantes en alternance avec la commandepwd: 1. ls *,ls .,ls ..,ls ../..,ls ~,ls /usr,

ls /usr/*,ls /u*r/*,ls /u*/*,ls /u*/l*/lib[b-e]*.

2. cd,cd .,cd ..,cd ../..,cd /, etcd ~. 3. En d´eduire ce que signifient..,.,*, et/

Exercice 3 – Manipulation de fichiers Souvenez-vous que :

— commande > fichierva copier la sortie de la commandecommandedans le fichierfichier.

Par exemple ls -l > files.txt va enregistrer dans files.txt la liste des fichiers pr´esents dans le r´epertoire courant.

— commande1 | commande2donne en param`etre decommande2la sortie de la commandecommande1.

Par exemple,echo ‘‘bonjour tout le monde’’ | wc -wcompte le nombre de mots contenus dans la chaˆıne “bonjour tout le monde”.

1. (Commandecut) Soit le fichierproverbe.txtcontenant le texte suivant : Rien ne sert de courir

Il faut partir `a point.

La Fontaine.

1. Cr´eer le fichierproverbe.txt.

2. `A d´efaut, un moteur de recherche et internet constituent ´evidemment une solution tr`es puissante

Sorbonne Universit´e/Master d’Informatique/ISUP-2019sept 20 Septembre 2019

(3)

Module ISUP-2019sept TD 1 – page 3/4 2. Donner la commande pour n’afficher que les 5 premiers caract`eres de chaque ligne.

3. Donner la commande pour n’afficher que les 2 premiers mots de chaque ligne.

4. Quel sera le r´esultat de la commande :cut -f 2-3 -d ’ ’deproverbe.txt? 2. (Commandestailetsort) Soit le fichierreal.csvcontenant le texte suivant :

Nom ; Prenom ; Naissance Hitchcock ; Alfred ; 1899 Welles ; Orson ; 1915 Kubrick ; Stanley ; 1928 Fellini ; Federico ; 1920 Godard ; Jean-Luc ; 1930 Coppola ; Francis ; 1939 Renoir ; Jean ; 1899 Bergman ; Ingmar ; 1918 Ford ; John ; 1894

1. Donnez la commande qui permet d’obtenir le fichierliste.csvqui est une copie dereal.csvsans la premi`ere ligne (utiliser<et>).

2. Donnez la commande pour obtenir un affichage de la liste des r´ealisateurs par noms croissants (voir commande cat, et utiliser|).

3. Donnez la commande pour obtenir un affichage de la liste par dates d´ecroissantes 3. Allez dans votre r´epertoirehomeet taper la commandels -l -F -a.

— Donnez une explication rapide de chaque colonne.

— Que signifie le point devant un fichier ou dossier ?

4. Cr´eez un r´epertoire avec, dedans, le fichierfichier.txt. Utiliser la commandechmodpour (et v´erifier aveclsquels attributs changent sur le fichier) :

1. Mettre aucun droit d’acc`es `a tout le monde au fichierfichier.txt(v´erifier si c¸a marche en essayant de le lire avec cat),

2. y mettre les droits de lecture, d’´ecriture et d’ex´ecution au seul cr´eateur du fichier, 3. y mettre les droits de lecture seul au groupe du cr´eateur et aux autres,

4. y ajouter le droit d’ex´ecution aux autres,

5. y retirer les droits d’´ecriture et d’ex´ecution au cr´eateur.

5. Cr´eer un fichiermots.txtcontenant les mots suivants, un seul par ligne :

boot book booze machine boots bungie bark aardvark broken$tuff robots

— ´Ecrire la commande qui affiche les lignes contenant le motifboo.

— Idem mais avec en plus les num´eros de ligne.

— Le nombre de lignes o`ubooapparait.

— Le motif qui permet de reconnaitre soitbootsoitboots.

— La commande qui affiche les lignes qui ne contiennent pasboo, avec leur num´ero.

Exercice 4 – ´Ecriture de scripts Bash

Un aspect tr`es int´eressant de le terminal est qu’il est contrˆol´e par un langage de programmation qui s’appelle leBash.

Depuis le d´ebut vous ´ecrivez des programmes enbashtr`es simple.

1. Cr´eez un nouveau fichier dans le r´epertoiretd1, nomm´ehw.sh.

On mettra syst´ematiquement tout au d´ebut de nos scripts (les fichiers finissant en.sh) la ligne suivante :

#!/bin/bash

Sorbonne Universit´e/Master d’Informatique/ISUP-2019sept 20 Septembre 2019

(4)

Module ISUP-2019sept TD 1 – page 4/4 qui permet d’indiquer quelle variante du langage on utilise.

– Ajoutez la ligne suivante danshw.sh: echo "Hello World !"

– Notre script, tr`es simple, est ainsi un programme qui affiche la chaˆıne “Hello World !” `a l’´ecran. Essayez de l’ex´ecuter en tapant./hw.sh. Que se passe-t-il ? Pourquoi ? Comment y rem´edier ?

2. Cr´eez un nouveau fichier dans le r´epertoiretd1nomm´enext.shqui va effectuer les actions suivantes : 1. Aller dans le dossier parent ;

2. Cr´eer un dossiertd2; 3. Aller dans ce dossier.

Pour r´ealiser une succession de commandes, on s´eparer ces derni`eres par l’op´erateur de s´equence;. Par exemple mkdir Test; rm -r Testcr´ee et puis, successivement, supprime le r´epertoireTest.

3. On voudrait am´eliorer le dernier script pour qu’il fasse les actions suppl´ementaires suivantes :

— Cr´ee automatiquement un dossiertdN o`uN est le num´ero du TD courant + 1.

— Se duplique dans le nouveau dossier.

A vous de trouvez les commandes n´ecessaires pour automatiser ce traitement.`

Exercice 5 – Se ressourcer

1. R´ep´eter un traitement un certain nombre de fois peut ˆetre r´ealis´e avec une boucle. Soit une variablelstd´efinie par : lst="1 2 3 4"

V´erifiez le contenu de lst (avec echo $lst). Expliquer la diff´erence entre les r´esultats des deux commandes suivantes :

— for i in $lst ; do echo $i ; done

— for i in "$lst" ; do echo $i ; done

2. Cr´eer un scriptloop.shqui prend en argument un nombreN et qui :

— Cr´ee un fichierbench.txt;

— AjouteN lignes contenant “Hello world” dans ce fichier ;

— Supprime ce fichier.

Pour programmer ce script, vous avez besoin de ces nouvelles notions :

— Quand vous appellez un script avec un argument, par exemple./loop.sh 100, l’argument100est r´ecup´erable

`a l’int´erieure du script dans une variable nomm´ee$1pour le premier argument et, en g´en´eral,$N pour leN`eme argument.

— On ajoute dans un fichier (sans ´ecraser ce qu’il y a d´ej`a dedans) avec l’op´erateur>>.

— for i in $(seq 1 4); do ... ; donepour r´ep´eter un traitement4fois.

3. Cr´eer un autre script qui appellera le pr´ec´edent avec comme arguments1, puis10, puis100, . . . .

4. Un aspect parfois important lorsqu’on programme est de v´erifier la rapidit´e d’ex´ecution d’un programme. En modi- fiant le script pr´ec´edent, mesurer et afficher le temps d’ex´ecution de chaque it´eration (commandetime).

5. Cr´eer un script qui collecte automatiquement les r´esultats obtenus dans le script pr´ec´edent dans un fichier. Une ligne du fichier contientN tmpo`uN est le nombre de “Hello world” ettmpest le temps d’ex´ecution.

6. Finalement vous utilisezGNU plot(commandeplot) pour afficher ces r´esultats dans un graphique.

7. Encore du temps ? Essayer de rendre ce script debenchmarkg´en´erique pour qu’il puisse ˆetre utilis´e dans d’autres pro- jets, avec d’autres programmes, param`etres, . . . Peut-ˆetre veut-on plus d’information ´egalement comme la consom- mation m´emoire. Soyez cr´eatif !

Sorbonne Universit´e/Master d’Informatique/ISUP-2019sept 20 Septembre 2019

Références

Documents relatifs

Cette partie à pour objectif la création d’un module permettant de définir un périphérique caractère manipulable à partir du shell ou d’un programme c. 4.1 Paramétrage

Syntaxe de l’adressage indirect par registre.- Comme nous l’avons d´ej` a vu, pour d´esigner une valeur constante on ´ecrit cette valeur (en hexad´ecimal), pour une valeur se

Syntaxe de l’adressage indirect par registre en langage symbolique.- Comme nous l’avons d´ej` a vu, en langage symbolique, pour d´esigner une constante on ´ecrit celle-ci

Cr´eer un programme Python permettant de r´ealiser le chiffrement ROT13 d’un fichier texte, puis cr´eer un programme Python permettant de r´ealiser le d´echiffrement.

Sur le coup, je comprends pas trop (en fait, il s'avèrera qu'ils ont zappé cette section et sont déjà sur la suivante), et poursuis vers la 11, même si cela m'inquiète: nous ne

La deuxième nous fait le coup de poisson (normal sur l'eau!), que nous apprécions guère, c'est pourquoi nous les doublons dans la foulée. Puis une 3ème! Il nous en reste une, la plus

imprime toutes les lignes contenant le mot analyse suivi du mot lexical dans tous les fichiers de suffixe .tex. (L’option -i

• EAGAIN: ce code d’erreur peut être dû a deux raisons: soit il n’y a pas suffisamment de ressources systèmes pour créer le processus, soit l’utilisateur a déjà trop