TP séances n 5 & 6 Prcessus & Variables d envirnnement Intrductin à la prgrammatin shell M. Rezgui L2MASS 2013-2014 Ceci est un duble TP qui est destiné à vus familiariser avec la gestin de prcessus et les variables d envirnnement sus Unix ainsi qu à la prgrammatin shell. En ce qui cncerne la prgrammatin shell, vus avez un rappel furni avec ce TP. 1 Gestin de prcessus - Exécuter l applicatin xemacs. Puvez-vus exécuter une autre cmmande dans le même shell? Justier vtre répnse. L interpréteur de cmmande est blqué en attente de la terminaisn du prcessus ls qui exécute xemacs - Suspendre l applicatin xemacs en appuyant sur les tuches <ctrl>+z. Peut-n exécuter une autre cmmande dans le même shell? Justier. <ctrl>+z Le prcessus ls est suspendu. Le prcessus père peut alrs cntinuer sn exécutin pur exécuter d autres cmmandes - Reprendre l exécutin de l applicatin suspendue en premier plan. fg %n ù n est le numér de la tâche (qui est différent du PID) - Suspendre à nuveau l applicatin puis reprendre sn exécutin en tâche de fnd. Peut-n exécuter une autre cmmande dans le même shell? justier. <ctrl>+z puis bg %n ù n est le numér de la tâche Le prcessus ls est lancé en parallèle avec le père, dnc le père peut exécuter d autres cmmandes. - Dnner une cmmande qui permet d arrêter l applicatin graphique exécutée. kill PID ù PID est l identiant du prcessus. - Exécuter l applicatin gedit cmme tâche de fnd. Fermer la fenêtre de l interpréteur de cmmandes à partir de laquelle l applicatin est lancée. Quel est l effet de cette actin sur l applicatin gedit? Justier vtre répnse. acrread & Lrsque l n arrête l interpréteur (le père) tus ses prcessus ls s arrêtent aussi. - Dans un nuveau terminal, exécuter la cmmande nhup gedit ; quel est le prcessus père de gedit? Ensuite, arrêter le prcessus du shell. Quel est l e ff et sur l applicatin gedit? Quel est le (nuveau) prcessus père de l applicatin gedit? Le prcessus ls survit à l arrêt de sn père. Le nuveau père devient le prcessus init (1), ce que l n a grâce à ps -ef. 1 1
- Afcher en temps réel les infrmatins sur l ensemble de prcessus exécutés sur vtre machine. tp - En utilisant la cmmande ps, afcher les infrmatins détaillées sur tus vs prcessus. ps -ef grep vtre_lgin - Lancer à nuveau l applicatin xemacs en tâche de fnd. Dnner une cmmande qui renvie uniquement le PID du prcessus qui exécute cette applicatin. ps -ef grep xemacs tr \n head -5 tail -1 (pas bn si l n est dans un autre terminal que celui qui a lancé xemacs!)
TP séances n 5 & 6 Prcessus & Variables d envirnnement Intrductin à la prgrammatin shell M. Rezgui L2MASS 2013-2014 2 Variables d envirnnements - Afcher l ensemble des variables d envirnnements dénies dans vtre shell avec leurs va-leurs assciées. env - Dnner une cmmande qui renvie la liste des nms des variables d envirnnement sans les valeurs assciées. La liste dit être triée en rdre alphabétique. env cut -d= -f1 srt - Afcher la valeur assciée à la variable PATH. Quel est le rôle de cette variable? ech $PATH Cette variable dnne la liste des répertires dans lesquels le système cherche à lcaliser des exécutables. Le symble " :" est utilisé cmme séparateur. - Dnner une cmmande qui renvie le nmbre de répertires déclarés dans la variable PATH. ech $PATH tr : \n wc -l - À l aide de la cmmande which, lcaliser le cmpilateur gcc. which gcc - A l aide de la cmmande which, essayer de lcaliser la cmmande ifcng. Justier le résultat btenu. wich ifcng ne returne rien, car la cmmande n est pas dans référencée dans la variable PATH. - A l aide de la cmmande alias, renmmer la cmmande ls pur que le résultat de sn appel sit équivalent à la cmmande ls -l. alias ls= ls -l 3 Afchage et interprétatin des variables - Dans un shell, exécuter la cmmande X="ls -l". Ensuite exécuter les cmmandes suivantes et pur chacune justier le résultat btenu : ech X X ech $X ls -l ech $X $X ech "$X" ls -l
ech `$X` Afche la liste des chiers dans le répertire curant 4 Prtée des variables - Dans un shell bash taper les cmmandes suivantes et justier les afchages btenus : X1=3 Y1=10 Z1=4 exprt Y1 env grep X1 ech $X1 ; ech $x1 env grep Y1 ; unset Y1 ; exprt X1 bash; env grep X1 ; ech $Z1 ; exit ech $Z1 Crrectin. X1 est la même variables dans les deux shells. Par cntre la variable Z1 est incnnue dans le deuxième shell puisque cette variable n a pas été exprtée. 2 2
TP séances n 5 & 6 Prcessus & Variables d envirnnement Intrductin à la prgrammatin shell M. Rezgui L2MASS 2013-2014 5 Premier script shell Dévelpper un script shell bnjur.zsh qui : - Afche le message Hell suivi de la liste des nms passés cmme paramètres. Par exemple, l appel bnjur.zsh Yann Lri a le message Hell Yann, Lri if [ $# -gt 0 ] ech -n "Hell " while [ $# -gt 1 ] d ech -n $1, shift 1 dne ech $1 - Mdier le script pur qu il afche en première ligne le nm du script et le numér du prcessus qui l exécute, et en deuxième ligne le message suivant : Salut à x persnnes ù x est le nmbre de nms passés cmme paramètres. ech "Salut a $# Persnnes" ech "Le script $0 est exécuté par le prcessus $$" if [ $# -gt 0 ] ech -n "Hell " while [ $# -gt 1 ] d ech -n $1, shift 1 dne ech $1 6 Gestin d un drapeau Un drapeau est un simple chier texte qui peut cntenir sit la valeur 1, sit la valeur 0. On dit que le drapeau est psitinné si le chier cntient la valeur 1. On vudrait dévelpper une cmmande nmmée flag qui a le fnctinnement suivant : flag <nm_du_drapeau> : returne l état actuel du drapeau. Si le chier crrespndant n existe pas, il afche un message d erreur. flag <nm_du_drapeau> n : psitinne le drapeau (c.-à-d. met dans le chier crrespndant la valeur 1). Si le chier n existe pas, la cmmande dit le créer. flag <nm_du_drapeau> ff : enlève le drapeau (c.-à-d. met dans le chier crrespndant la valeur 0). Si le chier n existe pas, la cmmande dit le créer. flag <nm_du_drapeau> flp : inverse l état du drapeau. Si le chier crrespndant n existe pas, la cmmande afche un message d erreur.
#errr functin, n va utiliser la functin errr en cas d erreur errr(){ ech "Usage: $0 le [n ff flp]" } case "$#" in 1) if [ -f $1 ]; cat $1 ech "Le chier $1 n existe pas" 2) case "$2" in n) ech "On met le flag $1 à ON" ech 1 > $1 ff) ech " On met le flag $1 à OFF" ech 0 > $1 flp) if [ -f $1 ] ech "Flpping $1" if [ cat $1 -eq 1 ]; ech 0 > $1 ech 1 > $1 ech "Le chier $1 n existe pas" *) errr #appel de la fnctin errr esac *) errr #appel de la fnctin errr esac 7 Gestin de sauvegarde Écrire un prgramme shell nmmé savetxt.zsh qui permet de cpier dans un répertire nmmé ~/backup tus les chiers qui se truvent dans l arbrescence du répertire de cnnexin et qui se terminent par le sufxe «.txt». Si le répertire ~/backup n existe pas alrs la cmmande dit le créer. if [ -e ~/.backup -a -d ~/.backup ] ech "String int.backup" mkdir ~/.backup nd ~ -name "*.txt" -exec cp {} ~/.backup \;
Mdier le prgramme précédent an de ne pas écraser les chiers existant dans le répertire ~/backup. if [ -d ~/.backup ] ech "Utilisatin du.backup" mkdir ~/.backup #n utilise un autre script zsh pur cpier les chiers nd ~ -name "*.txt" -exec./cpier.zsh {} \; ù le script «cpier.zsh» est : #basename est une cmmande permettant d afcher le nm du chier sans le chemin #par exemple : basename rep1/rep2/tt.txt => afche tt.txt f= basename $1 if [! -e "~/.backup/$f" ] cp $1 ~/.backup 8 Pubelle Dévelpper une cmmande nmmée pubelle qui permet de transférer les chiers à effacer dans un répertire nmmé ~/trash. La syntaxe de cette cmmande est la suivante : pubelle f1 f2 f3... fn a pur effet de transférer les chiers de f1 à fn dans le répertire ~/trash. pubelle -f a pur effet d effacer le cntenu du répertire ~/trash. pubelle (sans argument) a pur effet d afcher un message d aide décrivant la syntaxe crrecte de la cmmande. if [! -d ~/.trash ]; mkdir ~/.trash case "$#" in 0) ech "usage: $0 target_les mve target_les t trash" ech " $0 -f empty trash" *) if [ "$1" = "-f" ]; rm -r ~/.trash/* mv $* ~/.trash esac 3