M1/M2 Biologie Informatique - Année 2007/2008 Exercices d’Unix avancé Exercices d’Unix avancé 1) Changement de Shell Unix Avant tout, vous je vous invite à apprendre à changer de Shell : 1. Regarder le contenu du fichier /etc/passwd au niveau de votre nom d’utilisateur ; changer de shell (par exemple en tcsh) à l’aide de la commande chsh. Regardez à nouveau le fichier /etc/passwd. Qu’est-ce qui a changé ? 2. ‘Délogger’ vous, puis vérifier que le changement de shell a bien été opéré à l’aide de la variable $SHELL. 3. Si vous le souhaitez, revenez à votre shell de prédilection (i.e. bash ?) ! 2) Commandes et processus a) Filiation des processus 4. Ouvrez un shell et imprimez à l’écran la filiation des processus. Repérez alors dans cet arbre le processus du shell dans lequel vous vous trouvez. Où se trouve la commande que vous avez lancée pour afficher la filiation ? 5. Lancez un xterm à partir de votre shell. Dans ce nouvel xterm, imprimez de nouveau à l’écran l’arbre des processus et repérez où se trouve cet xterm. Tuez le shell père (à l’aide de la petite croix). Que s’est-il passé ? Pourquoi ? b) Etat des processus (1) 6. Lancez nedit dans un shell (juste en tapant nedit) et saisissez une phrase. Revenez dans le shell et tentez de lancer la commande ls. Que se passe-t-il ? Pourquoi ? 7. Stoppez le processus nedit en tapant Ctrl-Z dans le shell. Retournez dans la fenêtre nedit et tentez de saisir une phrase. Que se passe-t-il ? Pourquoi ? 8. Lancez un nouvel nedit (juste en tapant nedit). Stoppez le à l’aide de Ctrl-Z. Imprimez à l’écran dans votre shell les processus en cours à l’aide de la commande jobs. Dans quel état sont ces jobs ? 9. Lancez un troisième nedit, mais cette fois-ci en arrière plan (en tapant nedit &). Imprimez les processus de votre shell avec jobs. Quelle est la différence entre les 2 premiers nedit et le troisième ? Comment l’expliquez vous ? 10. Tuez le premier nedit avec la commande kill et son numéro de job. 11. Passez en arrière-plan le deuxième nedit avec la commande bg. Contrôlez l’état de vos 2 nedit avec la commande jobs. c) Etat des processus (2) 12. Maintenant que vous êtes des experts en C, créez un petit programme ‘infinite’ qui affiche des nombres de 1 à l’infini. 13. Lancez infinite. Stoppez le à l’aide de Ctrl-Z. Contrôlez son état avec jobs. 14. Repassez infinite en avant-plan avec la commande fg. Le programme affiche-t-il les nombres depuis 1 ? Pourquoi ? Tuez infinite avec Ctrl-C. d) Priorités des processus 15. Lisez la page de manuel de la commande yes. Imprimez à l’écran la phrase de votre choix avec la commande yes. Tuez yes avec Ctrl-C. 16. Lancez votre merveilleux programme infinite en silencieux et en arrière plan (n’oubliez pas le trou noir de l’ordinateur /dev/null). Contrôlez que infinite tourne effectivement avec top. Quel est son ‘nice level’ ? 1 M1/M2 Biologie Informatique - Année 2007/2008 Exercices d’Unix avancé 17. Lancez un yes en silencieux et en arrière-plan avec un ‘nice level’ de +10 (commande nice). Relancez top. Quel est le niveau de priorité du yes par rapport à infinite ? 18. Lancez un autre yes en silencieux et en arrière-plan avec un ‘nice level’ de +19. Contrôlez avec top : quels sont les niveaux de priorité des 3 processus ? 19. Modifiez le ‘nice level’ de infinite à +10 (commande renice). Faites un top. Observez bien les 2 processus de même ‘nice level’ (à +10). L’un est-il plus prioritaire que l’autre ? 20. Tentez de modifier le ‘nice level’ du deuxième yes (celui que vous avez lancé à +19) à +15. Que se passe-t-il ? Pourquoi ? Rappel : on peut remettre à jour la commande top avec la touche espace, et vous pouvez quitter avec la touche q. 3) Fichiers et flux. 21. Tapez cat puis un texte et finissez par Ctrl-D (pour EOT, End Of Text). Que se passe-t-il ? Pourquoi ? 22. En utilisant cat et l’opérateur de redirection >, créez un fichier tmp contenant le texte Salut les copains. Vérifiez le contenu de tmp avec more. 23. Python est un langage informatique interprété ; ceci signifie que l’on peut utiliser son intéerpréteur en mode interactif, c’est à dire rentrer des commandes et tester leurs effets directement (nous aborderons ce langage plus en détail Lundi prochain !). Lancez python ; tapez les 2 commandes interactivement print ‘Salut les copains’ et print 2 + 3. Observez bien la sortie que python génère. 24. Enregistrez les 2 commandes (print ‘Salut les copains’ et print 2 + 3) dans un fichier toto. Lancez python en redirigeant l’entrée standard depuis le fichier toto (python < toto). Que se passe-t-il ? Pourquoi ? 25. Lancez python avec cette série de commandes : python << Fin_des_commandes print ‘Salut les copains’ print 2 + 3 Fin_des_commandes Que se passe-t-il ? Pourquoi ? 26. Créez un fichier avec nedit contenant une liste de courses (10 ingrédients, avec un ingrédient par ligne). Affichez le fichier avec cat. Affichez le fichier trié par odre alphabétique. Affichez les 2 dernières lignes du fichier après l’avoir trié (attention, pour cet exercice, il est interdit d’écrire dans un fichier !) 27. Recherchez un fichier nedit à partir de la racine (find / -name "nedit") en redirigeant la sortie dans le fichier recherche. Que se passe-t-il ? Pourquoi ? 28. Refaites la même recherche en redirigeant les sorties standard et d’erreur dans un fichier. Comment expliquez-vous la différence ? Regardez dans le fichier recherche. 4) Variables et variables d’environnement. a) Affectation et portée des variables 29. En bash, affectez la valeur 3 à la variable u et affichez le contenu de u. Quittez bash. 30. En tcsh, affectez la valeur turlututu à la variable t et ecrivez le contenu de t. 31. Dans le même shell, lancez un xterm et affichez le contenu de t. Que se passe-t-il ? Pourquoi ? 32. En bash, affectez la valeur Youplaboum à la variable d’environnement PROSPER. Contrôlez la valeur de PROSPER. Lancez un xterm dans lequel vous afficherez à 2 M1/M2 Biologie Informatique - Année 2007/2008 Exercices d’Unix avancé nouveau la valeur de PROSPER. Y accédez-vous ? Pourquoi ? Quittez le xterm et renouvelez l’exercice en tcsh. b) Caractères spéciaux. 33. Exécutez les 2 commandes suivantes : echo ’Bonjour $HOST, je suis $USER’ et echo "Bonjour $HOST, je suis $USER". Comment expliquezvous la différence ? 34. Affichez le texte suivant avec des doubles guillemets : L’usage des ", \, #, $, etc... est interdit !. 5) Parsing et Expressions Régulières. a) Programme egrep / extraction du nombre de gènes d’un fichier genbank. 35. Copiez un fichier genbank dans votre répertoire. Ouvrez le fichier avec nedit et observez son format. 36. Avec grep, affichez le nom de l’organisme. 37. Exécutez la commande grep gene file.gbk. Pensez-vous que cette méthode soit satisfaisante pour extraire le nombre de gènes ? 38. Avec egrep et le méta-caractère ‘^’, extrayez le nombre de gènes de ce fichier genbank (avant d’utiliser wc –l, vérifiez bien la sortie de egrep !). 39. En vous basant sur l’expression régulière précédente, extrayez le nombre de gènes sur le brin principal ainsi que sur le brin complémentaire. b) Extraction de la séquence d’ADN d’un fichier genbank avec egrep et sed. 40. Pour démarrer avec sed, reprenez le egrep de l’exercice 5)a)38 (qui extrait toutes les lignes contenant gene). Avec un pipe et sed, transformez tous les mots gene de la sortie de egrep par oh le beau gene. 41. Avec egrep, extrayez toutes les lignes commençant par un nombre de 1 à 8 chiffres. En développant cette expression régulière, extrayez seulement les lignes contenant la séquence en bases. 42. En utilisant la commande précédente et le programme sed, extrayez la séquence en bases sans aucun autre caratère. c) ‘Dé-htmliseur’. 43. Sauvez une page web de votre choix et regardez le code html dans nedit. Créez avec sed un ‘dé-htmliseur’ (i.e. qui détruit toutes les balises HTML). Vous devez détruire tous les caractères de < à > (en HTML, les balises sont de la forme <balise> ou </balise>). Bonne chance ! Appelez moi si vous ne trouvez pas la regex ! d) Petite introduction à awk. 44. Avec awk, récupérez le nom de l’organisme de votre fichier genbank. 45. Avec awk, parsez le fichier genbank de manière à ne récupérer que la séquence en bases. 6) Programmation Shell a) Programmation c-shell de base. 46. Ecrivez un script c-shell qui affiche les 3 arguments qui lui sont donnés. 47. Créez un script csh qui prends en argument un fichier genbank ; le script doit afficher le numéro d’accès (champ ACCESSION) suivi de la définition (champ DEFINITION). Le script doit aussi afficher un message d’erreur si l’extension du fichier en argument n’est pas .gbk. 3 M1/M2 Biologie Informatique - Année 2007/2008 Exercices d’Unix avancé 48. Ecrivez un script c-shell avec une boucle foreach qui affichent tous les fichiers du répertoire courant sous cette forme : le nom du fichier 1 est … le nom du fichier 2 est … etc… 49. Ecrivez un script c-shell avec une boucle while et un test if, qui n’affiche que les nombres de 1 à 3 et 7 à 9. 50. Créez 10 fichiers toto1.txt, toto2.txt...toto10.txt dont 3 qui contiennent le mot virus. Créez un répertoire virus_file. Avec une boucle foreach, déplacez les fichiers qui contiennent le mot virus. 51. Avec une boucle foreach, et la commande grep, imprimez dans un fichier tous les noms de fichiers genbank dont l'organisme est un virus (faites un foreach sur les fichiers genbank de votre projet C). b) Bouquet final : Création d’un script de conversion genbank à fasta. Le format de séquence fasta est de la forme siuvante : ------------------------------------------------------------>ligne de commentaire atctggatgtatctggatgtatctggatgtatctggatgtatctggatgtatctggatgtatctggatgt atctggatgtatctggatgt... (60 caractères de long) ------------------------------------------------------------- 52. A l’aide de grep, sed et de la programmation c-shell, créez un script c-shell gbk2fasta.csh qui convertit un fichier gbk en fichier fasta. Le script affichera un message d’erreur si l’extension du fichier d’entrée n’est pas gbk. La ligne de commentaire contiendra le numéro d’accès (champ ACCESSION) suivi de la définition (champ DEFINITION). 4