Consignes

Pour ce TP (et les suivants), il faut que vous ayez un système Linux fonctionnel. Si vous utilisez votre portable, vous pouver utiliser la machine virtuelle installée pendant le TP1.

Liens utiles

Objectifs du TP

L'objectif de ce TP est de commencer à se familiariser avec l'utilisation intéractive de l'invite de commande (le shell) pour les opérations courantes :

Il est bien entendu impératif de manipuler ces commandes et ces concepts en dehors du TP pour les assimiler.

Afin de rendre le TP plus "ludique", il est présenté en mode "serious game". GameShell est un "serious game" créé spécialement pour ce cours ! Ce jeux (programmé lui même en shell) ajoute quelque fonctionnalité au shell standard sous Linux (bash). Sous couvert de "jeu d'aventure", vous devrez utiliser les outils du shell ou les commandes du système pour manipuler des fichiers et dossiers, lancer des programmes, gérer des processus, etc.

Vocabulaire

terminal

L'émulateur de terminal (souvent appelé terminal tout court) est un programme qui s'exécute dans le gestionnaire de fenêtre. Il sert à exécuter des programme en mode texte, c'est à dire où toute l'interaction avec l'utilisateur se fait avec l'écran (pour afficher du texte) et le clavier (pour lire du texte). Un terminal peut par exemple exécuter un programme Python comme le pendu du TP2 d'info201.

Par défaut le terminal exécute un shell.

Il existe de nombreux émulateurs de terminaux sous Unix: xterm, rxvt-unicode, LXTerminal, gnome-terminal, konsole, xfce4-terminal, ...

shell

Le shell (aussi appelé invite de commande ou interpréteur de commandes) est un programme avec une interface en mode texte. Le shell affiche un prompt (représenté par le symbole $) et lit les commandes tapées par l'utilisateur. Ces commandes permettent d'effectuer des tâches courantes sur les fichiers, de lancer d'autres programmes, etc. Le shell offre aussi un langage permettant d'effectuer des tâche conditionnelles et / ou répétitive à l'aide de structures de controle (conditionnelles, boucles for et while, etc.) Les suites de commandes que l'on souhaite réutiliser peuvent être sauvegardées dans un fichier appelé script.

Il existe de nombreux shell sous Unix. Les plus utilisés dans le monde Linux sont bash et zsh. D'autres exemples sont csh, ksh, tcsh.

commande

Une commande est un général un petit programme externe lancé par le shell. Par exemple, la commande ls permet d'afficher la liste des fichiers contenus dans le répertoire courant. Il est également possible d'exécuter des programme très complexe (comme un traitement de texte ou un navigateur internet), mais cela est rarement fait depuis le shell.

Certaines commandes ne correspondent pas à des programmes externes mais sont interprétées directement par le shell. (La commande echo qui affiche une chaine à l'écran en est un exemple...)

1. GameShell : un petit jeu d'aventure

1.1. Lancement du jeu

Si vous faites le TP sur les machines Linux de l'université, il ne devrait pas y avoir de problème (?!!).

Si vous faites le TP sur l'une des machines virtuelles Ubuntu du TP1, ou sur un autre système Linux, il est nécessaire d'installer les paquets suivants

À part les 2 premiers paquet, tous sont installés par défaut par Ubuntu.

Comme vu au TP1, il suffit de faire

$ sudo apt install gettext gcc man-db procps psmisc nano tree bsdmainutils x11-apps wget

depuis un shell.

Lancez un terminal et exécutez les commandes suivantes

$ wget https://www.lama.univ-savoie.fr/~hyvernat/Enseignement/2122/info201/TP2/gameshell.sh
$ bash ./gameshell.sh

(La première ligne télécharge le fichier gameshell.sh, et la seconde ligne exécute le fichier gameshell.sh dans un shell.)

Dés que GameShell a démarré, passez à la suite du TP.

1.2. Déroulement du jeu

Vous allez maintenant devoir remplir un certain nombre de missions en utilisant le shell. Ces missions vous permettront de vous familiarisez avec certaines commandes. Toutes les commandes que vous utiliserez seront des commandes standard du shell disponibles depuis n'importe quelle version de Linux. Les seuls commandes spécifiques à ce TP sont celle qui commencent par le mot clé gsh :

La commande gsh help vous permet d'afficher cette liste de commandes, ainsi que quelques autres.

Il est important de garder à l'esprit que les "missions" sont simplement des tâches que l'on rencontre couramment lors de l'utilisation d'un ordinateur :

Dans GameShell, les "objets" que vous rencontrerez sont simplement des fichiers standard (souvent avec un contenu aléatoire) et les "lieux" que vous visiterez sont simplement des répertoires. Ainsi, "construire une cabane" revient simplement à créer un répertoire, et "mettre les pièces dans le coffre" revient simplement à déplacer les fichiers "pièce" dans le répertoire "coffre".

Commencez les premières missions...

Aux alentours de la mission 14, vous devrez créer un fichier "journal". Pour toutes les missions précédentes, il n'est pas nécessaire de renseigner les détails de votre solution : le fait que vous avanciez dans vos missions est suffisant.

À partir de cette question, vous devrez ajouter un petit commentaire dans votre fichier "journal" à chaque mission : ce commentaire devra donner la ou les commandes que vous avez utilisées pour effectuer la mission, ainsi que vos remarques éventuelles. La qualité de votre "journal" aura un impact sur votre note de TP...

ATTENTION, n'oubliez pas d'indiquez vos nom, prénom et groupe de TP en haut de votre fichier journal !

1.3. Finir le TP

30 minutes avant la fin de la séance, votre encadrant vous demandera d'arrêter les missions de GameShell. Vous devrez alors prendre le temps de répondre aux questions suivantes, dans votre journal.

Attention, les réponses à ces questions sont prioritaires sur l'avancement de vos missions !

  1. Listez les commandes que vous avez utilisé, en donnant, en quelques mots seulement, leur utilisation.

    Par exemple :

      ls : liste le contenu du répertoire courant
  2. Listez les éléments du jeu que vous avez rencontré / utilisé, et expliquez à quoi ils correspondent vraiment.

    Par exemple :

      lieu : répertoire
  3. Donnez plusieurs situations dans lesquelles l'utilisation du shell peut être plus efficace qu'une interface graphique du style "gestionnaire de fichiers".

    Essayez autant que possible de donner des exemples de situations que vous avez rencontrées réellement.

Votre note de TP sera faite sur le contenu de votre compte-rendu (fichier "journal") ainsi que vos résultats aux missions effectuées. La commande

$ gsh exit

doit générer un fichier gameshell-save.sh. Si vous souhaitez poursuivre votre partie, il faudra relancer ce fichier plutôt que le fichier gameshell.sh original.

C'est ce fichier que vous devrez envoyer à votre encadrant de TP.