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).
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.
Nous allons faire une première manipulation qui vous permettra de partager une partie de vos données et d’y accéder de chez vous.
La plupart des sites web ne sont accessibles que grâce à un certificat
fourni par la région. Il se trouve dans le fichier
"/usr/local/share/ca-certificates/RIDF CA.crt" (les guillemets
servent à déspécialiser l’espace). Vous devez importer ce certificat
sous firefox et spécifier qu’il doit servir à naviguer sur le web.
Si vous n’avez pas de compte sur l’ENT, passez la fin de cette partie et revenez-y quand vous en aurez un.
firefox à
https://drive.monlycee.net, et entrez
vos identifiant et mot de passe.nextcloud (en principe
une fenêtre s’ouvre et vous demande une url).https://drive.monlycee.net dans la fenêtre qui
vient de s’ouvrir cliquez sur le bouton de connexion.~/mondrive, mais vous faites ce que vous voulez) (en
principe ça ouvre un nouvel onglet sur firefox).firefox.C’est fini : tout ce que vous écrirez dans le répertoire ~/mondrive
sera copié sur votre drive et inversement.
À chaque connexion sur une nouvelle machine il faudra réinstaller le
certificat et reprendre ses étapes. Vos fichiers sur le drive seront
alors présents sur toutes les machines sur lesquelles vous avez
effectué ces opérations et se mettront à jour automatiquement (sauf
coupure réseau). Vous pourrez accéder à vos données chez vous soit à
travers un navigateur, soit en utilisant un client nextcloud comme
décrit ci-dessus.
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 :
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 3 :
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 4 :
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).
Exercice 5 :
root) ne puisse
lister votre répertoire personnel. (Testez avec votre voisin(e) en lui
prêtant votre clavier et en utilisant la commande su.)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 6 : 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 7 : Copier le fichier eternel.c. Lancer la
commande gcc avec ce fichier en argument. Un nouveau fichier a.out
est créé, qui est exécutable. L’exécuter en premier plan. Essayer
d’utiliser le terminal. Interrompre le processus en premier plan.
La commande gcc permet de compiler le fichier (on verra en cours
plus de détails sur cette opération).
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 8 :
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 9 : 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.