MO101 - Introduction à Linux - Feuille TD1
Bienvenue au premier TD de MO101 ! Durant cette séance, vous vous familiariserez avec le téléchargement de fichiers, l'éditeur de texte Visual Studio Code, puis — en ligne de commande — avec la navigation dans une arborescence de dossiers et fichiers et leur manipulation simple.
Partie 1 - Téléchargement et désarchivage
Tout d'abord dans votre navigateur Internet, cliquez sur le lien ci-dessous et choisissez d'enregistrer le fichier lié :
Montez votre espace de stockage avec SSHFS et lancez Visual Studio Code et connectez vous à la machine distante info1.ensta.fr à l'aide du terminal (ssh login@info1.ensta.fr). Le répertoire à ouvrir dans l'exporateur est votre répertoire personnel qui se situe dans X:.
Vous pouvez envoyer le fichier archive archive_td1.tar.gz sur votre espace personnel sur X: par un simple glisser/deposer. Et décompressez cette archive, un répertoire nommé td1 apparait dans votre explorateur.
Important: En anglais, le dossier personnel est souvent appelé "home folder" ou "home directory". À ne pas confondre avec "/home/", qui contient tous les dossiers personnels de tous les utilisateurs du système !
Dans le terminal pour accéder au contenu du répertoire td1, il faut taper la commande suivante
cd td1
Partie 2 - Introduction à la ligne de commande
Vous allez maintenant laisser de côté l'interface graphique pour vous concentrer sur le terminal et sa ligne de commande. Dans cette partie, nous allons aborder les commandes suivantes :
- pwd ("print working directory") : Indique le chemin d'accès au dossier dans lequel vous vous trouvez actuellement. On l'appellera le "dossier courant".
- ls ("list segments") : Liste les fichiers et dossiers dans le dossier courant.
- cd ("change directory") : Permet de changer de dossier courant.
Tout d'abord, lancez un terminal qui se trouve dans le menu des Applications de l'environment Gnome (ou, dans certaines configurations, avec les touches Ctrl-Alt-T). Vous devriez obtenir une fenêtre affichant une seule ligne de texte : l'invite de commande :
login@machine:~$
Dans cette invite, on retrouve toujours ces éléments :
- login : votre nom d'utilisateur.
- '@' : séparateur associant utilisateur et machine utilisée.
- machine : le nom du poste auquel vous êtes connecté, normalement ici le nom d'hôte (hostname) de votre PC.
- '~' : notation raccourcie désignant le chemin vers votre répertoire/dossier personnel, où l'application Terminal vous a initialement placé à son ouverture.
- ':' : séparateur.
- '$' : indique un utilisateur normal (ce serait '#' pour un administrateur).
Maintenant, tapez la commande "pwd", puis confirmez-la avec la touche Entrée.
Q9. Que s'affiche-t-il ?
Réponse : Le chemin complet, soit "/home/..." , vers le dossier courant, qui est la racine de votre répertoire/dossier personnel, où l'application "Terminal" s'est automatiquement ouverte.
Tentez maintenant d'afficher le contenu du dossier courant, sans ses sous-dossiers.
Q10. Quelle commande faut-il utiliser ?
Réponse : 'ls'
Normalement, vous devez voir le dossier "td1" ici. Sinon c'est que vous avez probablement commis une erreur précédemment et vous êtes invités à recommencer les étapes de la partie 1 jusqu'à obtenir un résultat correct. Par exemple, si vous n'avez pas changé le dossier cible lors de l'extraction, votre dossier "td1" se trouve probablement dans le dossier "Téléchargements".
** La commande 'ls' est très utile. ** Mémorisez la ! A l'origine, c'était un acronyme pour "list segments". Son sens courant est "list files. En tant que débutant, utilisez la systématiquement pour vérifier le résultat de toute commande de manipulation de fichier. Sinon vous saurez rarement ce qui s'est vraiment passé et ne pourrez voir cetaines de vos erreurs. En effet, ces commandes sont souvent "silencieuses" : elles ne fournissent aucun retour, contrairement au "look and feel" des (bonnes) interfaces graphiques.
Maintenant, on veut changer de dossier courant pour celui nommé "td1".
Q11.a) Quelle commande faut-il utiliser ?
Réponse : cd td1
Q11.b) Exploitant le résultat de Q9, pouvez-vous imaginer une commande qui fonctionnerait depuis n'importe quel endroit ?
Réponse (deux possibilités) : cd /home/[...]/td1 cd ~/td1 Il faut évidemment remplacer [...] par la première lettre de votre nom d'utilisateur, une barre oblique, et votre d'utilisateur. Par exemple: "cd /home/u/utilisateur/test".
Avant de passer à la prochaine partie, affichez à l'écran le contenu du dossier en cours ("~/td1/"). Est-ce que vous retrouvez les deux fichiers (man.txt et man_authors.txt) de la deuxième partie ? Sinon, recommencez les étapes précédentes!
Partie 3 - L'éditeur de texte
Ouvrir le fichier "man.txt" sur la partition SSHFS. Vous verrez son contenu apparaître dans l'éditeur de texte VSCode.
Quelques notions de base, communes à plusieurs éditeurs sous Linux :
- Pour sélectionner du texte, maintenez le bouton gauche de la souris et glissez-la sur le texte que vous souhaitez sélectionner, ou tenez la touche Shift enfoncée et parcourez le texte avec les flèches du clavier. Relâchez le bouton de la souris ou la touche quand vous avez terminé.
- Ctrl-A : Sélectionne tout le contenu du document.
- Ctrl-C : Copie le texte sélectionné dans le presse-papier (une mémoire de travail temporaire).
- Ctrl-X : Coupe (copie et supprime) le texte sélectionné dans le presse-papier.
- Ctrl-V : Colle le texte préalablement copié ou coupé du presse-papier. Ce texte ne disparaît pas du presse-papier, à moins d'effectuer une nouvelle copie ou coupe.
- Ctrl-F : Ouvre une fenêtre de recherche de mots. Entrez le mot désiré, et appuyez sur Entrée. Vous serez transporté à la première occurrence de ce mot.
- Ctrl-G : Poursuit la recherche lancée avec Ctrl-F jusqu'à la prochaine occurence.
- Ctrl-H : Lance la fenêtre de recherche et remplacement de texte.
- Ctrl-S : Sauvegarde le fichier ouvert.
La seule différence dans les raccourcis claviers entre GEdit et Sublime Text est
- F3 au lieu de Ctrl-G pour poursuivre une recherche.
Q5. À l'aide de l'éditeur VS Code, retrouvez la section nommée "AUTHOR". À quelle ligne se trouve ce titre de section ?
Réponse : Ligne 277.
Q6.a) Toujours à l'aide de l'éditeur, créez un nouveau document vide, sans fermer "man.txt". Que se passe-t-il ?
Réponse : Quelques choix : Ctrl-N, Fichier -> Nouveau ... Par défaut, un nouvel onglet apparaît.
Q6.b) Êtes-vous en mesure de dire où se trouve ce nouveau document dans l'arborescence de fichiers ?
Réponse : Non, car il n'a pas encore été sauvegardé.
Q7.a) Copiez la totalité de la section "AUTHOR" du fichier man.txt dans votre nouveau document.
Réponse : Ctrl-C, Ctrl-V, ou menu Édition.
Q7.b) Sauvegardez votre nouveau document dans le dossier td1 sous le nom de "man_authors.txt".
Réponse : Ctrl-S, ou menu Fichier.
Partie 4 - Manipulation simple de fichiers et dossiers
Maintenant que vous pouvez vous déplacer dans l'arborescence des dossiers, nous allons apprendre à y effectuer des manipulations.
Tout d'abord, un rappel de la séance en amphithéâtre : Avec la commande "cd", vous avez remarqué qu'il était important de séparer le nom de commande ("cd") du nom du dossier que vous souhaitiez atteindre. Le caractère d'espace a un rôle particulier à la commande : il permet de séparer entre autres la commande de ses arguments. La commande "cd" ne prend qu'un argument : le dossier souhaité. Nous verrons plus tard que certaines commandes peuvent prendre plusieurs arguments.
Or, comment pouvons nous accéder à un dossier comportant un espace dans son nom, par exemple "mon dossier" ? Deux possibilités s'offrent à vous :
cd "mon dossier"
cd mon\ dossier
Dans la première option, il suffit d'entourer le nom complet de votre dossier de guillemets, ce qui indique à la commande qu'il s'agit d'un seul argument. Dans la deuxième option, le caractère spécial "\" indique que le caractère suivant ne doit pas être considéré comme un des autres caractères spéciaux. (Exercice supplémentaire : Le "\", à ne pas confondre avec "/", est un caractère valide pour un nom de fichier. Comment le spécifier à la ligne de commande ?)
Avant d'aller plus loin, mémorisez la commande sans doute la plus utile pour ce cours : man ("manual"). Sauf pour quelques commandes de base (comme "cd"), elle affiche une page du manuel de l'utilisateur directement à l'écran. Essayez-la avec "man ls", vous apprendrez que plusieurs options s'ajoutant comme arguments à la commande "ls" peuvent modifier son affichage.
Nous reviendrons plus tard sur ce sujet des options de ls. Pour le moment, exécutez "ls -a" à partir du dossier "td1". Vous verrez deux dossiers additionnels qui ont une signification particulière, tel que discuté pendant la séance en amphithéâtre :
- "." : Le dossier courant.
- ".." : Le dossier parent du dossier courant.
Ces raccourcis relatifs, tout comme "~", peuvent être utilisés dans vos commandes. Pensez à les utiliser !
Voici la liste des commandes sollicitées dans cette partie :
- mkdir dossier (make directory) : Permet de créer des dossiers vides.
- rmdir dossier (remove directory) : Supprime des dossiers.
- touch fichier : Permet de créer des fichiers vides (entre autre chose).
- rm fichier (remove) : Supprime des fichiers.
- rm -r dossier : Supprime récursivement des dossiers et leurs fichiers (attention !)
- cp source cible (copy) : Copie des fichiers et/ou dossiers.
- mv source cible (move) Déplace et/ou renomme des fichiers et/ou dossiers.
Maintenant, quelques exercices :
Q12. Créez un dossier "test" dans le dossier td1.
Réponse : mkdir test
Q13.a) Allez dans ce nouveau dossier, à partir de votre dossier personnel.
Réponse : cd td1/test
Q13.b) Revenez maintenant au dossier personnel, en utilisant un raccourci relatif.
Réponse : cd .. cd .. Ceci vous retourne au dossier parent ("..") deux fois: Une fois pour revenir à ~/td1/, et l'autre pour ~/. Il est également possible de combiner les raccourcis en une seule commande: cd ../../
Q13.c) Refaites l'aller-retour vers "test", mais revenez à votre dossier personnel en utilisant un raccourci absolu.
Réponse : cd td1 cd test cd ~
Q13.d) Faites un dernier aller-retour vers "test", mais revenez à votre dossier personnel en utilisant le chemin complet.
Réponse : cd td1 cd test cd /home/[...]/ Note : Il faut effectuer la même transformation de "[...]" qu'en Q11.b).
Q13.e) Maintenant, allez dans le dossier "test" et créez deux fichiers vides "a" et "b"
Réponse : cd td1 cd test touch a touch b
Q13.f) Pouvez vous imaginer une variation de cette commande qui permettrait de créer les deux fichiers en même temps ? Et directement à partir de "td1" ?
Réponse (deux possibilités) : touch a b touch test/a test/b
Avant d'aller plus loin, revenez au dossier "td1" à l'aide de ".." ("cd .."). Nous allons maintenant aborder l'usage de la touche Tab. Commencez par tapper "cd t", mais terminez avec la touche Tab au lieu de Entrée. Qu'arrive-t-il?
La touch Tab permet de compléter automatiquement des noms, ce qui est bien pratique avec de long noms de dossiers. S'il y a ambiguïté, vous pouvez aussi taper la touche Tab deux fois de suite, le termnial vous affichera toutes les possibilités qui s'offrent à vous avec les caractères que vous avez entrés. Pratique si on oublie le nom complet d'une commande !
Q14. Supprimez le fichier "b" du dossier "test".
Réponse : rm b
Revenez maintenant au dossier "td1", et tentez de supprimer le dossier "test".
Q15.a) Qu'arrive-t-il si vous utilisez "rm" ?
Réponse : Le terminal réplique qu'il s'agit d'un dossier.
Q15.b) Et "rmdir" ?
Réponse : Le terminal indique que le dossier n'est pas vide.
Vous vous apercevrez bien vite que pour supprimer un dossier, il doit tout d'abord être vide. Or, ça peut devenir très fastidieux d'avoir à parcourir une arborescence complète pour supprimer le contenu de chacun des dossiers. Pour répondre à cela, l'option "-r", à placer comme premier argument à "rm", permet de supprimer récursivement un dossier et tous ses sous-dossiers. Par contre, cette commande ne vous demandera pas de reconfirmer le résultat, il faut donc faire très attention! Si vous craignez le résultat, vous pouvez ajouter l'option "i" ("rm -ri"), qui vous demandera votre avis à chaque fichier ou sous-dossier.
Créez maintenant deux sous-dossiers "test_a" et "test_b", et deux nouveaux fichiers "a" et "b", tous dans le dossier "td1".
Q16. Copiez le fichier "a" dans le sous-dossier "test_a".
Réponse : cp a test_a
Q17. Déplacez le fichier "b" dans le sous-dossier "test_b".
Réponse : mv b test_b
Q18. Créez un nouveau fichier "c", et copiez-le dans TD1, mais sous le nom de "C".
Réponse : touch c cp c td1/C
Ce dernier exercice vous aura fait remarquer que la casse est significative pour UNIX. En effet, les fichiers "c" et "C" sont deux entités différentes.
Q19. Renommez le fichier "C" en "D".
Réponse : mv C D. UNIX n'a pas de commande "renommer", mais la commande "mv" est équivalente. En effet, "mv", à moins de déplacer le fichier d'un support physique à l'autre, la commande "mv" laisse le contenu en place, mais ne change que la référence dans l'arborescence des fichiers.
Q20. Renommez le dossier "test_b" en "TEST B" (notez l'espace), et rendez-vous dans ce dossier. Pensez à utiliser la touche Tab.
Réponse : mv test_b "TEST B" cd "TEST B" ou mv test_b TEST\ B cd TEST\ B
Partie 5 - Fichiers
Savoir reconnaître le type de fichiers est important pour savoir quel traitement ou programme on peut lui appliquer.
Les commandes utiles pour cette partie sont :
- file: Permet de connaître le type de données contenues dans un fichier.
Q21. A l'aide de la commande "file", trouvez le type de fichier associé au fichier /bin/bash
Réponse : file /bin/bash Ca dépend de l'architecture matériel (i.e., du processeur), sur Mac on a /bin/bash: Mach-O 64-bit executable x86_64
Q22. A l'aide de la commande "file", trouvez le type de fichier associé au fichier /etc/passwd
Réponse : file /etc/passwd /etc/passwd: ASCII text
Q23. A l'aide de la commande "file", trouvez le type de fichier associé au fichier ./logo_ENSTA_100_px.jpg
Réponse : file ./logo_ENSTA_100_px.jpg un truc un peu long apparaît : logo_ENSTA_100_px.jpg: JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=7, orientation=upper-left, xresolution=98, yresolution=106, resolutionunit=2, software=Adobe Photoshop CS6 (Macintosh), datetime=2014:11:21 11:38:33], baseline, precision 8, 100x128, frames 4
Partie 6 - Un peu de ménage et récapitulatif
Aujourd'hui, nous vous avons dit qu'il était primordial de bien gérer le contenu de votre dossier personnel, notamment en classant vos fichiers par cours et en les organisant par dossiers bien nommés. Or, pendant ce TD, la première étape consistait à créer un dossier "td1" à la racine de votre dossier personnel. Ce sera bien peu pratique lorsque vous aurez un nouveau premier TD dans un autre cours... Faisons donc un peu de ménage !
Q24. Déplacez l'ensemble du travail d'aujourd'hui, le dossier "td1", dans un nouveau dossier nommé "mo101".
Réponse : cd ~ mkdir mo101 mv td1 mo101/ La première commande est facultative si vous étiez déjà dans votre dossier personnel.
Vous devriez maintenant avoir un dossier "mo101" dans votre dossier personnel, pensez à l'utiliser pendant les deux prochains TDs !
Comme exercice final, faites l'aller-retour vers le dossier "test_a" depuis votre dossier personnel...
Q25.a) En plusieurs commandes avec chemins relatifs.
Réponse : cd mo101 cd td1 cd test_a cd .. cd .. cd ..
Q26.b) En seulement deux commandes, mais avec un chemin absolu à l'aller et un raccourci absolu au retour.
Réponse : cd /home/[...]/mo101/td1/test_a cd ~ Note : Il faut effectuer la même transformation de "[...]" qu'en Q11.b).
Q27.c) En seulement deux commandes, mais avec des chemins et raccourcis relatifs
Réponse : cd mo101/td1/test_a cd ../../../ Notez ici que le raccourci pour le dossier parent, "..", peut être répété.
Partie 7 - Documentation
La liste des commandes accessibles en ligne de commandes (i.e., dans le terminal) est très longue. De plus, à chaque commande est associée des options qui peuvent en modifier le comportements. La commande man (pour manual) est utile pour connaître le comportement d'une commande et ses options.
Q1. Tapez la commande "man man" dans le terminal. Qu'est-ce que cela produit ?
Réponse : Cela affiche dans le terminal le manuel de la commande man. Pour quitter cet affichage il suffit d'appuyer sur la touche "q". Les flèches permettent de faire défiler le texte. En appuyant sur la touche "/" cela ouvre une bare de recherche dans la page de manuel. Il suffit de taper le texte chercher et puis taper sur "entrée". Une fois recherche lancer il suffit d'appuyer sur la touche "n" pour aller à la prochaine occurence.
Q2. Les pages de manuel sont organisées en sections, combien de sections existe-t-il ?
Réponse : Il existe 9 sections d'après la page manuel qui sont 1. Programmes exécutables ou commandes de l'interpréteur de commandes (shell) 2. Appels système (fonctions fournies par le noyau) 3. Appels de bibliothèque (fonctions fournies par les bibliothèques des programmes) 4. Fichiers spéciaux (situés généralement dans /dev) 5. Formats des fichiers et conventions. Par exemple /etc/passwd 6. Jeux 7. Divers (y compris les macropaquets et les conventions), par exemple man(7), groff(7) 8. Commandes de gestion du système (généralement réservées au superutilisateur) 9. Sous-programmes du noyau [hors standard]
Q3. Que permet l'option -k de la commande man ?
Réponse : Elle permet de faire une recherche d'un mot-clé dans toutes les pages de manuel et affiche les noms des pages trouvées.
Q4. Donnez l'option de la commande "ls" qui permet d'afficher la liste des fichiers dans l'ordre décroissant de leur taille ?
Réponse : En tapant man ls on trouve que c'est l'option "-s"
Partie 8 - Vérifier la compréhension en jouant
L'objectif de cette partie est de vérifier la compréhension de la nagivation dans l'arborescence de fichiers à l'aide d'un jeu Bash Crawl.
Q1) Récupérez l'archive en faisant comme pour le début de la séance (enregistrer le fichier dans le répertoire Téléchargements)
Q2) Désarchichez dans le répertoire ~/mo201/td1/
Q3) Allez dans le répertoire bashcrawl-master et lisez le fichier README
Q4) Jouez!! ;-)
Note : si vous voulez recommencer le jeu, supprimez le répertoire bashwrawl-master et recommencez à la question Q28.a)