info@mp2i-pv
Le but de ce TP est de manipuler les commandes de survie dans un shell.
Pour s’habituer à se servir de la ligne de commande, il faut au début se forcer à le faire. Entre autres : bannir tout navigateur de fichiers, regarder les pages de manuel des commandes et, si on n’a pas trouver par soi-même, demander comment effectuer une action dès qu’on en a besoin (voire utiliser les raccourcis claviers pour vos applications courantes).
Pour l’instant, vous avez un compte sur chaque machine de TP, avec le même mot de passe, mais les données ne sont pas partagées. Il est donc recommander de sauvegarder vos données en fin de séances, soit sur une clef usb, soit en ligne, soit en vous envoyant un mail à vous même.
Exercice 1 :
MP2I
et un répertoire MPI
dans votre répertoire
personnel (quand vous ouvrez un terminal, le répertoire courant est
par défaut votre répertoire personnel).Informatique
dans votre répertoire
MP2I
.mkdir
) quelle option permet
de créer tout un chemin de nouveaux répertoires, et utilisez-la
pour créer le répertoire ~/MP2I/Informatique/TP/TP1
en une seule
ligne de commande (rappel : dans le shell ~
désigne le répertoire
personnel de l’utilisateur).~/MP2I/Informatique/TP/TP1
votre répertoire
courant avec la commande cd
.SI
dans votre répertoire courant, puis
supprimez-le.Note : Prenez l’habitude de ranger vos données et de ne pas mettre tout en vrac dans votre répertoire personnel, cela facilitera grandement votre vie quotidienne sur machine au bout d’un moment.
Exercice 2 :
Lancez la commande setxkbmap us
dans votre terminal. Écrivez le
texte qwerty
maintenant. À vous de trouver comment régler à nouveau
votre clavier en azerty !
Exercice 3 :
En vous aidant de sa page de manuel, trouvez ce que fait la commande
tree
et l’option qui permet de limiter la profondeur d’exploration.
Exercice 4 :
La commande cp
permet de copier un fichier : son premier argument
est un chemin valide désignant un fichier source et son deuxième
argument est un chemin valide désignant une destination:
/tmp
.fic
.cat
suivi du nom du fichier (quand un fichier est long,
on peut utiliser less
qui permet du défilement page par page
grâce à la barre d’espace, ou ligne à ligne grâce à la touche
Enter
et aux touches flèches; on arrête le défilement avec la
touche q
)Exercice 5 :
Copier le fichier fic
dans un nouveau fichier
copie
. Ouvrez ce nouveau fichier l’éditeur de texte emacs
(voir
section Choisir son éditeur de texte ci-dessous), en
écrivant le nom de l’éditeur suivi du nom du fichier.
Vous remarquez que vous ne pouvez plus écrire de commandes dans le
terminal. Fermez votre éditeur de texte et relancez la commande
précédente en la faisant suivre du caractère &
(avec ou sans espace,
mais sur la même ligne de commande) : vous pouvez maintenant relancez
une commande (essayez avec la commande ls
par exemple).
La première fois, le processus lancé par votre commande était en premier plan 1, alors que la deuxième fois il était en arrière-plan 1. Le processus au premier plan dans un terminal est celui qui reçoit les informations qu’on fait passer par le terminal (c’est souvent le shell donc).
La commande ifconfig
permet d’obtenir l’adresse IP de sa machine
(c’est un identifiant unique qui identifie la machine sur le
réseau). En connaissant l’adresse IP d’une machine, on peut s’y
connecter à distance avec la commande ssh
(à condition que ce soit
autorisé).
Exercice 6:
Connectez-vous à la machine de votre voisin (attention:
ssh
ne fait pas d’echo pour le mot de passe, rien ne s’affiche) et
affichez la date et l’heure de la machine.
Exercice 7 :
Public
dans votre répertoire personnel de
telle sorte que tout le monde puisse lister le contenu de ce
répertoire. (Testez avec votre voisin(e).)public
et un fichier prive
dans ce
répertoire de telle sorte que votre voisin(e) puisse voir le
contenu du fichier public
et pas celui du fichier prive
.On a vu plus haut qu’on peut lancer dans un shell une commande en
arrière-plan avec le symbole &
afin de récupérer la main
directement (sinon le shell ne récupère la main que lorsque la
commande lancée se termine).
Comment faire quand on a oublié de mettre le symbole &
? On peut
suspendre le processus avec la combinaison de touches Ctrl-z
dans
le terminal (on peut maintenir Ctrl
appuyé et pendant ce temps-là
déclencher la touche z
), puis le relancer avec la commande
bg
(comme background). Quand un processus est suspendu, il
existe encore mais est bloqué dans le temps : son état n’est plus modifié.
Exercice 8 : Lancer emacs
au premier plan, puis passer le processus
en arrière-plan.
Pour interrompre un processus en premier plan, c’est-à-dire faire en sorte qu’il
s’arrête, on peut utiliser la combinaison de touches Ctrl-c
.
Exercice 9 : Copier le fichier eternel.c, le compiler et exécuter l’exécutable ainsi obtenu en premier plan. Essayer d’utiliser le terminal. Interrompre le processus en premier plan.
Tout processus (et en particulier toute commande) possède trois flux de données qui permettent d’interagir avec l’utilisateur :
ls
)Quelques exemples :
cat
écrit sur la sortie standard ce qu’elle reçoit sur l’entrée standard.date
ne prend rien sur le flot d’entrée et écrit sur le flot de sortie.cd
ne prend rien en entrée et ne renvoie rien en sortie.Le shell peut rediriger ces flux, c’est-à-dire faire en sorte qu’ils ne correspondent pas à l’interface habituelle (le terminal), mais à une autre interface, en général un fichier régulier.
Il est souvent nécessaire de sauver les données en entrée ou en sortie d’un processus dans des fichiers afin de pouvoir ensuite les réutiliser, les voir en totalité ou les traiter. Par défaut, les trois flots standard correspondent au terminal depuis lequel la commande est lancée : l’entrée standard est saisie au clavier et les sorties (standard et erreur) s’affichent à l’écran. Cependant, on peut changer la destination de ces flots à l’aide du mécanisme de redirection.
Pour rediriger le flux de sortie d’une ligne de commande vers un
fichier, il suffit d’écrire la ligne de commande suivie du caractère
>
et d’un chemin valide désignant le fichier (espaces ou non autour
de >
: c’est comme vous voulez).
Exercice 10 :
Récupérer les fichiers histogramme.c et
histogramme.h et les placer dans le même
répertoire. Compiler histogramme.c
et
faire en sorte de récupérer la sortie standard de l’exécutable dans un
fichier test.gnu
, puis lancer la ligne de commande gnuplot -p
test.gnu
.
Note : nous verrons plus tard comment écrire dans des fichiers, mais en attendant, vous pouvez récupérer tout ce qui est affiché sur la sortie standard en faisant une redirection de sortie.
Exercice 11 : Quand votre ligne de commande provoque une erreur, un message d’erreur est affiché la plupart du temps. Ce message n’est pas affiché sur la sortie standard, mais sur la sortie erreur standard.
ls schtroumpf
pour voir le message d’erreur.ls schtroumpf 2> toto
(sans espace
entre le 2
et le >
) et regardez le contenu de toto
avec la
commande cat
: vous venez de rediriger la sortie erreur.Le choix d’un éditeur de texte est personnel. Pour l’instant il y a (au moins) trois éditeurs installés sur les ordinateurs du lycée :
"Entrée"
(sans les
espaces, une touche à la fois, dans
l’ordre) : Esc : q !
Avantages : il est probable que ces deux éditeurs perdurent encore, vous les trouverez partout et ils ont une grosse communauté d’utilisateurs irréductibles. Ils sont faciles à installer et souvent installés par défaut dans les distributions linux grand public.
Il y a sûrement des avantages à utiliser VS Code, mais si ça se trouve dans deux ou trois ans j’en mettrai un autre à la place (qui se souvient encore d’atom?)
Comment choisir un éditeur ? Il faut les tester.
Mise en garde :
vim
et emacs
,1 : Ceci est un abus de langage, ce n’est pas le processus à proprement parlé qui est en premier-plan ou en arrière-plan, c’est la tâche à laquelle il appartient, notion qui est hors programme. Si certains veulent un complément, j’avais fait des vidéos là-dessus (complètement hors programme bien sûr et vous ne comprendrez pas tout) : https://youtu.be/Uz7wE1Zk8zU et https://youtu.be/dgqc8TLyqJE.