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é :

archive_td1.tar.gz

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 :

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 :

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 :

La seule différence dans les raccourcis claviers entre GEdit et Sublime Text est

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 :

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 :

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 :

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)

bashcrawl-master.tar.gz

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)