TP 4 Connexion distante et jeu devine un nombre César Rodríguez et Hedi Benzina rodriguez@lsv.ens-cachan.fr benzina@lsv.ens-cachan.fr 16 janvier 2012 1 Connexion distante avec ssh La commande ssh permet d ouvrir une session sur une machine différente de celle sur laquelle vous travaillez, c est-à-dire, elle vous permet de vous connecter sur une autre machine et avoir accès à une shell qui se exécute sur cette machine. Bien sûr, vous devez avoir une nom d utilisateur et mot de passe sur la machine distante. La syntaxe d invocation est ssh USER@HOST [CMD] où USER est votre nom d utilisateur sur la machine HOST. Par défaut, ssh exécutera une shell sur la machine HOST et renverra son propre entrée (respectivement, sa sortie standard, sa sortie standard d erreurs) vers l entrée (respectivement, sortie, sortie d erreurs) de cette nouvelle shell. De cette manière, les commandes que vous tapez sont exécutés sur la machine distante au lieu de la votre. Pour finir votre session, il faudra taper Ctrl+D ou exit. Lorsque vous voulez exécuter une seule commande CMD, vous pouvez le spécifier comme deuxième paramètre optionnel d invocation, de sorte que ssh exécutera la commande et retournera dès qu elle finisse. 1.1 Exemples 1. cesar@pollux:~$ ssh rodriguez@zamok.crans.org Password: Last login: Mon Nov 14 20:47:36 2011 from saiph.crans.org rodriguez@zamok:~$ exit logout Connection to ssh.crans.org closed. L utilisateur cesar, depuis la machine pollux, ouvre une nouvelle session sur la machine zamok.crans.org avec l utilisateur rodriguez. Ensuite il tape exit pour finir la session distante. 2. cesar@pollux:~$ ssh rodriguez@zamok.crans.org pwd > f.txt Password: cesar@pollux:~$ cat f.txt /home/rodriguez Exécuter la commande pwd sur zamok.crans.org et écrire son sortie standard dans le fichier f.txt sur la machine local (pollux). Ensuite, cat f.txt montre le contenu du fichier. 1.2 Exercices 1. Connectez vous sur l un des machines de la salle (utilisez le même utilisateur et mot de passe que sur votre machine), et indiquez qui est connecté au même temps que vous (indice : TP1). N oubliez pas de fermer la session pour continuer le travaille sur votre machine. 2. Affichez le contenu du fichier /etc/passwd existant sur l un des machines de la salle en utilisant le deuxième paramètre (CMD) de ssh. 3. Comment vous pouvez copier sur votre machine un fichier qui se trouve sur la machine distante? 1
4. Comment vous pouvez copier sur une machine distante un fichier qui se trouve sur votre machine? 5. Quelle est la syntaxe de la commande scp, et à quoi elle serve? 2 Rappel des TPs 1, 2 et 3 1. Que représente-t-il le symbol ~? Et..? Et *? 2. Téléchargez le fichier http://www.lsv.ens-cachan.fr/~rodriguez/teaching/linux/tp1234.tgz et renommez lui tps.tgz 3. Créez un nouvel ssier appelé tps et décompressez à l intérieur le contenu de tps.tgz. 4. Écrivez des expressions régulières qui représentent le mot livre, les mots de 5 lettres qui commencent par c et finissent par n, les mots qui commencent par d et finissent par s, les mots qui contiennent e et qui commencent par d et finissent par s, 5. Sur combien de lignes est-il présent le mot pron dans le fichier tps/freq.csv 1? 6. Affectez à la variable X la valeur de la variable PWD. 7. Affectez à la variable Y la sortie de la commande date -R. 8. Quelle est la différence entre la sortie du commande pwd et la valeur de la variable PWD 9. Que représente-t-elle la variable $3 dans un script de shell? 3 La commande read La commande read permet d affecter une variable avec un valeur lu de l entrée standard. Puis que l entrée standard d un script est souvent le clavier, read est souvent utilisé pour affecter à une variable un message introduit par l utilisateur : echo "Introduisez votre prénom:" read PRENOM echo "Bonjour $PRENOM" Pour plus d information sur la commande read, tapez help read. 3.1 Exercice Écrivez un script qui choisit un nombre aléatoire entre 0 et 32767 (indice : variable $RANDOM) et, sans le dévoiler, demande à l utilisateur de deviner si le nombre est plus grande que 16386 ou pas (indice : option -gt de test). Le script montre finalement si le choix étais correct. 1. Soit parce que la ligne représente un pronom ou bien parce que pron fait partie d un mot. 2
4 Exécution conditionnelle : les boucles while et for Nous avons déjà utilisé la commande if pour exécuter conditionnellement une ou plus commandes. Avec les commandes while et for nous pouvons répéter l exécution d une commande un certain nombre de fois, la différence entre les deux étant la manière de définir tel nombre. La commande while a la syntaxe while cmd cmds ne et exécute cmds tant que la commande cmd renvoie un état de sortie 0. C est-à-dire, elle exécute cmd et, soit elle termine, si l état de sortie est différent de 0, soit elle exécute cmds et répète l opération, s il est égal à 0. La commande for, avec la syntaxe for VAR in ITEM1 ITEM2... ITEMN cmds ne affecte itérativement la variable VAR a chaque item ITEM1,..., ITEMN et exécute, pour chaque valeur affecté, les commandes cmds. 4.1 Exemples 1. X="" while test "$X"!= "aaaa" X="a$X" echo $X ne Ajoute le caractère a à la variable X, initialisé vide, jusqu à former aaaa. Quelle est la sortie? 2. YN=n while test "$YN" == "n" R=$RANDOM echo $R if test $R == 12345 then YN=y fi ne Tirer des noms aléatoires jusqu à obtenir 12345. 3. for X in a b c d echo $X ne Pour X affecté a chaque valeur a, b, c, d, exécuter echo $X. for N in seq -w 1 20 echo $N ne Nous avons déjà étudié la syntaxe cmd, qui en ce cas serve à générer les nombres 1, 2,..., 20, à l aide de la commande seq. Quelle est la sortie? 4.2 Exercice/jeu Écrivez un script qui choisit un nombre aléatoire entre 0 et 32767 et, sans le dévoiler, demande à l utilisateur de le deviner. Pour cela, le script demande un nombre et indique si le nombre nné est plus grand ou plus petit, et lui permet de faire un autre essai s il est différent. 3
A Rappels des TPs 1 et 2 1.. Répertoire actuel. 2... Répertoire père du répertoire actuel. 3. ~ Répertoire maison. Alias de $HOME. 4. * Tous les fichiers et répertoires. 5. cd DIR Changer le répertoire actuel à DIR. 6. pwd Afficher sur la sortie standard le répertoire actuel. 7. ls [-l -a -R] DIR1 DIR2... FILE1 FIlE2... Affiche le contenu de répertoires et information administrative sur les fichiers. 8. cat FILE1 FILE2... Afficher, un par un, les fichiers FIlE1, FILE2,...sur la sortie standard. 9. rm FILE ou bien rm -R DIR Effacer des fichiers ou des répertoires. 10. mkdir DIR Créer des répertoires. 11. cp -v -R SOURCE DESTINATION Copier des fichiers et des répertoires (-R pour récursif). 12. mv SOURCE DESTINATION Déplacer ou renommer des fichiers ou répertoires. 13. chmod 0UGO FILE DIR... Modifier les droits d accès pour des fichiers ou des répertoires. Exemple : 0644 : rw- pour l Utilisateur, r-- pour le Group et r-- pour les Outres. 14. echo Bonjour monde ou echo "Bonjour monde" Aficher un ligne de texte sur la sortie standard. 15. wc [-l -w -c] SOURCE DESTINATION Afficher le nombre de lignes, de mots et d octets d un fichier. 16. grep EXPRESION FILE Afficher sur la sortie standard les lignes du fichier FILE qui correspond au motif EXPRESION. Si FILE est omis, lire de l entrée standard. 17. find DIR [-name EXPR -user USER -type [d f]] Rechercher des fichiers dans une hiérarchie de répertoires. 18. cut -d SEP -f N1,N2,... Supprimer une partie de chaque ligne d un fichier. 19. man COMMAND Consulter le manuel de référence de la commande COMMAND. 20. who Montrer qui est connecté sur la même machine. 21. gedit FILE Éditeur le texte du fichier FILE. 22. ln [-s] TARGET SOURCE Créer des liens (symboliques) entre fichiers. 23. tar czvf FILE.tgz DIR Archiver dans le fichier FILE.tgz le répertoire DIR et tous ses sous-répertoires. 24. tar xzvf FILE.tgz Extraire sur le répertoire actuel le contenu du fichier FILE.tgz. 25. ps [-ef] Présenter un cliché instantané des processus en cours. 26. kill [-15-9] PID Touer (avec la signal 15 ou 9) un processus identifié par son PID. 4
B Rappels du TP 3 1. wget [-O FILE] URL Télécharger le cument URL et l enregistrer sous le nom FILE 2. head -n N [FILE] Afficher les premières N lignes du ficher FILE, ou de l entrée standard si aucun fichier n est pas nné sur la ligne d arguments. 3. tail -n N [FILE] Faire de même avec les dernières N lignes. 4. less [FILE] Afficher le contenu du fichier FILE, ou de l entrée standard si aucun fichier n est pas spécifié. 5. grep REGEX [FILE] Afficher les lignes correspondant au motif (expression régulière) REGEX. Les lignes sont lues du FILE ou de l entrée standard si aucun fichier n est pas nné. 6. cut -d SEP -f N1,N2,... Supprimer une partie de chaque ligne d un fichier. 7. sed "s/regex/nouv/opt" < INFILE > OUTFILE Substituer une chaîne de caractères, procedente de INFILE et concordante avec l expression régulière REGEX par NOUV, et écrire le résultat sur OUTFILE. 8. VAR="this is the value" Affecter une valeur à une variable. 9. VAR= command arg1 arg2 Affecter la sortie standard de la commande command arg1 arg2 à une variable. 10. if cmd; then cmd-1; else cmd-2; fi Executer cmd et executer, ou bien cmd-1 si l état de sortie de cmd est 0, ou bien cmd-2 dans les autres cas. 11. $# Variable contenant le nombre d arguments d invocation d un script. 12. $1, $2,... Dans un script, premièr argument, deuxième argument,... 5