# TP 1 Prenez le temps de découvrir votre environnement. Vous êtes connecté sous un gestionnaire de fenêtre qui s'appelle `Gnome`. Sous Linux, les gestionnaires de fenêtre sont légion. Quelques-uns sont disponibles à l'IUT. Nous vous conseillons d'essayer `Xfce`, et pour ceux qui connaissent déjà Linux, `i3`. On peut changer le gestionnaire de fenêtre sur l'écran de connexion, **après** avoir entré son *login*. ## Gameshell Gameshell est un petit jeu pour apprendre les bases de la ligne de commande. ### Installation Cette étape est à faire une seule fois. GameShell est un projet libre. Nous allons le récupérer avec `git`. Ouvrez un *terminal* et copiez-collez la ligne suivante (Vous pouvez simplement la sélectionner avec la souris puis la coller avec le bouton du milieu dans votre terminal). ``` git clone https://github.com/phyver/GameShell.git ``` ### Lancement du jeu ``` cd GameShell ./start.sh ``` ### Application directe du cours Faites les missions de 1 à 11. ### Il faut réfléchir un peu plus Avancez jusqu'à la mission 20. N'hésitez pas à ouvrir un autre terminal pour faire du `man` sur les commandes présentées. ## Un peu plus classique comme sujet ### 1 - utilisation du mode graphique Quelques précisions utiles : - Linux est le nom du noyau, GNU est le projet qui est à l'origine de l'essentiel de l'écosystème de logiciels autour du noyau (dont le shell et les commandes de base). Les contributeurs à l'ensemble du parc logiciel sont nombreux. - Il existe souvent beaucoup de logiciels candidats à la réalisation d'une même tâche. Ainsi, on peut choisir son gestionnaire de bureau parmi de nombreux candidats (*Gnome3* par défaut sous *debian stable*, mais aussi *kde*, *xfce*, *enlightenment*, *icewm*, *fvwm*, *fluxbox*...) qui n'auront pas tous la même apparence. De même, la plupart des outils sont disponibles sous plusieurs formes. Choisissez ce qu'il vous plait. GNU/Linux offre évidemment des outils permettant de naviguer dans l'arborescence des fichiers. Selon votre environnement graphique ces outils porteront des noms différents. Si vous utilisez l'environnement graphique *Gnome*, il s'agit de *nautilus* pour la navigation dans les fichiers (vous pouvez y accéder en cliquant, par exemple, sur l'icône poste de travail) et par exemple *gedit* pour l'édition de fichiers textes. **A** - Dans un premier temps, naviguez dans l'arborescence des fichiers de votre ordinateur et repérez qu'il n'y a pas de notion de partition apparente comme sous Windows (Exemple; "C:", "D:"). Jetez un œil particulier au répertoire `/home` qui contient les répertoires des utilisateurs, dont votre répertoire personnel dans `/home/UCA`. **B** - Dans un second temps, à l'aide de l'interface graphique vous allez créer l'arborescence suivante dans votre répertoire home. - `systeme` - `tp1` - `question1` - `question2` **C** - Utilisez ensuite un éditeur de texte de votre choix (`geany` par exemple) pour créer 2 fichiers textes que vous sauvegarderez dans le répertoire `question1` précédemment créé. Le premier fichier (`fichier1.txt`) va contenir le texte suivant: `UNIX : Système d'exploitation multi-utilisateur et multitâche mis au point en 1969 par Ken Thompson et Dennis Ritchie, au sein des laboratoires Bell, entité possédée à l'époque par AT&T et sa filiale Western Electric.` `Ce système a subi de nombreuses évolutions, dont la principale a été son écriture en langage C dans la première moitié des années 1970, ce qui a facilité son portage sur tout type de processeur. La plupart des grands constructeurs ont ensuite offert leur propre version d'Unix: AIX chez IBM, HP-UX chez Hewlett-Packard, Solaris chez Sun, etc.` `Il a inspiré le développement du système libre Linux. Le nom Unix serait un clin d'oeil à son prédécesseur, MULTICS (Multiplexed Information and Computing Service), développé à la fin des années 1960 au Massachusetts Institute of Technology.` `Celui-ci mettait en oeuvre pour la première fois le modèle de système d'exploitation en couches, encore en vigueur aujourd'hui. Pour afficher ses origines, Unix s'est d'abord écrit UNICS, pour UNiplexed Information and Computing Service.` Dans le second fichier (`fichier2.txt`) vous copierez 10 fois le texte ci-dessus. Pour ce faire, essayez la méthode usuelle (CTRL+C / CTRL+V) mais essayez aussi la méthode avec uniquement la souris, utilisable partout sous Linux : sélectionnez à la souris votre texte à copier (juste en surlignant le texte), puis placez votre curseur sur l'endroit où coller et pressez sur le bouton central de la souris (ou la molette) pour réaliser le « coller ». ### 2- utilisation du mode texte pour la gestion des fichiers Ouvrez un terminal (que nous appellerons parfois abusivement shell ). Par défaut le terminal s'ouvre en vous positionnant dans votre répertoire personnel, appelé « *home directory* ». Vous pourrez à tout moment vous y replacer en tapant la commande « `cd` » sans argument. A - Situez votre répertoire personnel en essayant la commande « `pwd` » B - En utilisant la commande « `cd` », rendez vous dans les répertoires suivants et visualisez leur contenu : `/` puis `/etc` puis `/etc/init.d` puis `/var/log` et enfin revenez dans votre home. Réalisez ces opérations en utilisant des chemins absolus et relatifs. C - Revenez dans votre home puis entrez dans le répertoire `systeme` précédemment créé \ La commande `cd -` permet de revenir dans le dernier répertoire quitté.\ D - Essayez la commande « `ls` » qui permet de lister le contenu du répertoire, vous devriez voir apparaître le répertoire `tp1` à l'écran. Affichez ensuite l'arborescence de ce répertoire en utilisant la commande « `tree` » ; Une autre façon d'effectuer cela est d'utiliser la commande ls en ajoutant l'option `-R` « `ls -R` » E - Déplacez vous dans le répertoire question1 et affichez le contenu des deux fichiers que vous avez créé en question n°1 ; pour le premier, la commande « `cat` » sera suffisante (mettez le nom de fichier en argument); pour le second, essayez avec les commandes « `cat`, `more` ou `less` » (tapez 'q' pour quitter `less`). F - D'autres commandes permettent un affichage sélectif d'un fichier, regardez les pages de manuel (commande man commande) de « `tail` » et « `head` ». A quoi servent ces commandes ? Affichez les 8 premières lignes et les 8 dernières lignes du second fichier. G - Déplacez vous maintenant dans le répertoire `question2` précédemment créé. La commande « `mkdir` » permet de créer un répertoire. Vous allez créer 6 sous répertoires appelés `reponseA`, `reponseB`, `...`, `reponseF` ; pour ce faire, vous utiliserez le rappel des commandes précédentes en utilisant les flèches haut et bas du clavier. H – Créez un répertoire supplémentaire : `reponseH/solution1` avec la commande suivante : « `mkdir [option à trouver] reponseH/solution1` » Pour ce faire vous devez trouver l'option permettant de créer à la fois le répertoire `reponseH` et le répertoire `solution1` sans quoi la commande vous renverra une erreur. Utilisez le manuel pour cela. I – Cherchez la commande permettant de supprimer un répertoire vide à l'aide de la commande "`apropos`". Utilisez les mots clefs `directory` ou `répertoire` selon la langue de vos pages de manuel. Supprimez le répertoire `reponseA`. J – La commande « `cp` » permet de copier des fichiers ; les pages de manuel vous indiqueront comment l'utiliser. A l'aide de cette commande, copiez les fichiers `fichier1.txt` et `fichier2.txt` dans le répertoire `reponseB` ; vérifiez que votre arborescence est bonne à l'aide de la commande (non standard) « `tree` » et éventuellement du navigateur graphique. K – Copiez maintenant le fichier `fichier1.txt` dans le répertoire `reponseB`, en le nommant `.fichier1.txt` (attention il y a un « `.` » devant le nom du fichier. Listez ensuite les fichiers du répertoire `responseB` ; voyez vous votre fichier ? essayez avec l'option « `-a` » qui permet d'afficher les fichiers cachés. Qu'en concluez vous ? L – La commande « `rm` » permet de supprimer des fichiers, essayez la pour supprimer le `fichier1.txt` qui se trouve dans le répertoire `question1`. M – Cette commande ne permet pas de supprimer un répertoire : faites l'essai en essayant de supprimer le répertoire `reponseH` ; cherchez dans le manuel quelle option doit alors être utilisée pour effacer les sous-répertoires. ### 3 - utilisation des alias Un alias est une commande stockée dans une variable. L'usage principal est de personnaliser ses commandes en ajoutant des options ou en définissant ses propres commandes. Les alias sont gérés directement par le shell lui même, vous trouverez donc plus de documentation dans la page de man de *bash*. \ Il est possible de faire des recherches dans les pages de manuel en tapant '/unMot' (pas d'espace sauf à condition de le faire précéder par un anti-slash '\\'), l'occurrence suivante sera atteinte en tapant simplement « n » . Pour "remonter" d'une occurrence 'p'. Pour revenir en début 'Home' et pour aller à la fin 'Fin'. Pour quitter le man tapez "`q`".\ A – Vous allez créer des alias de commande. Commençons par des choses inutiles : créez un alias appelé bonjour qui exécutera la commande suivante « `echo bonjour à toi xxxxx` » où `xxxx` est votre prénom. Exécutez ensuite la commande `bonjour`. B – Supprimez cet alias décidément inutile. C – Passez en revue les options de la commande « `ls` » à partir du manuel et créez des alias sur les options vous semblant intéressantes (3 options différentes de votre choix). D – Ouvrez une seconde fenêtre de terminal, vous constaterez que vos alias ne fonctionnent pas dans cette nouvelle fenêtre. Pour les rendre permanents, vos alias doivent être exécutés à chaque lancement de nouveau shell. Avec le navigateur graphique, éditez le fichier `.bashrc` situé dans votre répertoire home (Si vous ne le trouvez pas, copier /etc/skel/.bashrc dans votre \~). Ce fichier contient une liste de commandes qui seront exécutées par chaque nouveau shell. Ajoutez en fin de fichier vos alias, sauvegardez, ouvrez un nouveau shell et testez. ### 4 - Quelques questions en plus A – Quelle commande permet de déplacer des fichiers ? illustrez. B – Quelle commande permet de renommer un fichier ? illustrez. C – Comment afficher le manuel de la commande en langage C `printf` au lieu de celui de la commande Unix `printf` ? (regardez dans `man man` et choisissez la bonne section) D – Où se trouve le programme correspondant à la commande `ls` ? (commande `which`) E – Quel type de données contiennent les fichiers suivants ? `/sbin/ifconfig` et `/etc/hosts` ? (commande `file`) F – Quelle est la taille occupée par votre répertoire home et ses sous répertoires ? (commandes « `du` » et « `quota` » ) ### 5 - Personnalisation de votre environnement La personnalisation de votre environnement utilisateur sous Unix passe principalement par deux aspects: personnaliser son gestionnaire de fenêtre et personnaliser son shell. Si vous êtes responsable de votre compte (cf. la [charte informatique](http://ent.u-clermont1.fr/static/divers/charteInformatiqueUdA.pdf) que vous devez avoir validé), vous en êtes aussi le gestionnaire et vous êtes en droit d'en faire un outil agréable pour travailler. #### Personnaliser son shell Certaines variables permettent de configurer le shell. Elles sont définies dans les pages de manuel du shell, c'est à dire bash dans votre cas. Etudiez les valeurs que peut prendre la variable PS1. A quoi sert PS1 ? Essayez de modifier cette valeur dans votre shell en lui affectant une nouvelle valeur : PS1=... Remarque : attention à ne pas mettre d'espace avant et après le symbole « = » - Pour un plus joli prompt: changer son prompt: - Ajouter des alias (vu au dessus) ##### Fichier de configuration du shell - Chargé à chaque lancement du shell: `.bashrc` . Si ce fichier n'existe pas chez vous, copiez en une copie depuis '/etc/skel/: `cp /etc/skel/.bashrc ~` - Chargé à chaque connexion: `.bash_profile` - Chargé à chaque déconnexion: `.bash_logout` ##### Choisir son shell Au passage, vous avez aussi le choix dans les shell: nous utilisons *bash*, le shell utilisateur par défaut sous *debian*. Nous essayons néanmoins de nous restreindre à la partie normalisée (Posix) de *bash*. Vous pouvez aussi essayer *zsh*, un shell avec plein de fonctionnalités supplémentaires, ou *dash*, un shell simple, Posix, destiné à l'exécution rapide de scripts. #### Personnaliser son gestionnaire de fenêtre ##### Paramétrer Gnome3 Gnome3 est le gestionnaire de fenêtre par défaut sous Debian. Voici quelques liens pour vous aider à le configurer un peu plus que ce qui est possible avec une installation de base. - Présentation des outils utiles: - Site officiel des extensions de Gnome3: ##### Changer de gestionnaire de fenêtre Les goûts pour les gestionnaires de fenêtre/bureau, ça ne se discutent pas! À vous de trouver celui qui vous plaît le plus! Voici un liste de ce qui est disponible à l'IUT, avec plein de parti pris : - *gnome3* : + ergonomie novatrice, + plein de gadgets, - gros consommateur de ressources, - ergonomie en rupture avec nos habitudes, - besoin de 3d pour fonctionner. - *kde* : + beaucoup de fonctionnalités, + plein de gadgets, + grande intégration des applications entre elles, - gros consommateur de ressources. - *xfce*: + simple et efficace, + consomme peu de ressources & rapide, - pas le truc pour frimer (sobre). - *windowmaker*: + assez joli bien que simple, + consommation de ressources raisonnable, - évolution lente et WM vieillissant. - *enlightenment*: + consommation de ressources très faible, + très versatile, - manque d'utilitaires. ### Saines lectures linuxiennes ou libristes (et francophones... pour commencer) - [linuxfr](https://linuxfr.org), forum d'utilisateurs de logiciel libre. - [Linux Arverne](http://www.linuxarverne.org/), un GULL (Groupe d'Utilisateurs de Logiciels Libres) auvergnat (Association + mailing list). - [Lea Linux](http://lea-linux.org/), un site de présentations de logiciels libres avec pas mal de doc vraiment très simples. - [Framasoft](http://www.framasoft.net/), une association de promotion du libre avec pas mal de services proposés (livres en ligne, annuaire de logiciel, forums...)