Exercices d`Unix avancé

publicité
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
Téléchargement