Aller au contenu

Interpréteur de commandes (shell)

Introduction

Humains et ordinateurs interagissent de différentes façons, que ce soit par l'intermédiaire d'une souris et d'un clavier, ou d'un écran tactile. Pour utiliser un ordinateur personnel, la majorité des utilisateurs passent par une interface graphique (en anglais GUI pour graphical user interface). Avec une interface graphique, nous donnons directement des instructions en cliquant sur la souris et en naviguant dans des menus.

Bien que l'aide apportée par l'aspect visuel des GUI rend l'utilisation des ordinateurs plus intuitive, ce mode de fonctionnement peut vite se montrer limité. Pour gagner du temps, réaliser des tâches répétitives ou complexes, nous utiliserons une interface en ligne de commande (en anglais, CLI pour command-line interface).

L'objectif de ce TP est de mieux comprendre l'utilisation du terminal sous Linux. Pour être précis, le terminal est une application graphique depuis laquelle il est possible d'interagir avec un programme particulier qui interprète des commandes systèmes, un shell. Il existe différents programmes pouvant servir de shell, par exemple sh, bash, ou zsh.

  1. Ouvrir un terminal.
  2. Taper la commande ls, puis appuyer sur Entrée.

    Que fait la commande ls ? 3. Taper la commande ks, puis appuyer sur Entrée. Commenter. 4. Nelle Nemo est une biologiste marine, elle revient d’une campagne d’étude de 6 mois dans Gyre subtropical du Pacifique nord où elle a récupéré des échantillons de la faune et de la flore marine. Elle a récupéré des données venant de ces échantillons, qui se trouvent dans 1520 fichiers différents, elle souhaite de plus écrire un article dans une revue scientifique. Elle a stocké en ligne une archive de tous ses fichiers de recherche, data.zip.

    Exécuter les commandes :

    🐍 Code Python
    1
    2
    wget https://edurl.fr/XbjXq0HJ -O data.zip
    unzip data.zip
    

    Que fait la commande wget ? La commande unzip ? Vous pouvez ouvrir un explorateur de fichier pour mieux comprendre ce qu'il s'est passé.

Répertoire de travail, chemin absolu, chemin relatif

  1. Exécuter la commande pwd, puis la commande ls.
  2. Exécuter la commande cd data-shell, puis exécuter à nouveau les commandes de la question 1.
  3. Que fait la commande cd ?

À chaque instant dans notre terminal, nous nous trouvons dans un lieu, nommé répertoire de travail. Une grande partie des commandes que nous allons voir interagit avec des fichiers et est sensible à l’endroit où l’on se trouve. La commande pwd (print working directory) affiche le chemin absolu correspondant au répertoire de travail.

Sur votre ordinateur, l’organisation des fichiers ressemble au schéma ci-contre (on parle d'arborescence de fichiers). Le système d’exploitation gère nos données en les organisant sous forme de fichiers et de répertoires (on parle aussi de dossiers) à l’aide de son gestionnaire de fichier.

img

Au sommet de l'arborescence se trouve le répertoire racine qui contient tout le reste. On y fait référence en utilisant le symbole slash / tout seul.

À l’intérieur de ce répertoire se trouve différents dossiers:

  • bin pour les programmes de base du système
  • dev pour les fichiers représentants les dispositifs matériels (devices).
  • etc pour les fichiers de configuration du système
  • home pour les répertoires personnels des différents utilisateurs

Remarquons qu’il y a deux sens pour le symbole /, quand il est au début d’un nom de fichier ou de dossier, c’est le répertoire racine, quand il apparait à l’intérieur d’un nom, c’est un simple séparateur.

Dans votre cahier de TP, représenter sous forme d'arborescence les sous-dossiers du répertoire data-shell (la racine de votre arborescence sera le répertoire data-shell). Vous pouvez explorer cette arborescence depuis le terminal ou bien à l'aide de l'explorateur de fichiers.

Ouvrir un nouveau terminal, puis exécuter les commandes suivantes (remplacer prenom par le résultat de la commande whoami).

🐍 Code Python
1
2
3
4
whoami
ls data-shell/creatures
ls /home/prenom/data-shell/creatures
ls /home/

Commenter l'affichage obtenu.

On dit que le chemin data-shell/creatures est relatif (il ne commence pas par /), et que le chemin /home/prenom/data-shell/creatures est absolu (il commence par /). Ils correspondent au même dossier si le résultat de la commande pwd est /home/prenom.

La commande ls est une commande qui permet de faire énormément de choses.

Exécuter les commandes ci-contre, puis décrire avec vos mots les effets des options -s, -h, --help et -a, ainsi que de la commande man.

🐍 Code Python
1
2
3
4
5
ls -s -h          
ls --help
ls -a
ls -sh data-shell/
man ls

Fichiers et dossiers spéciaux

La commande ls -a affiche tout le contenu d'un répertoire. Par rapport à la commande ls on voit que certains fichiers et dossiers sont apparus : ceux-ci commencent par un ., on parle de fichiers et de dossiers cachés.

Deux dossiers sont très particuliers :

  • le dossier ./ : il désigne le répertoire lui-même.
  • le dossier ../ : il désigne le répertoire parent du répertoire.

De plus, si prenom est le résultat de la commande whoami (nom d'utilisateurice courant.e), alors tous les fichiers et dossiers de l'utilisateurice courant.e sont stockés dans le répertoire /home/prenom. On parle de répertoire personnel (home directory en anglais). On peut utiliser l'abréviation ~/ à la place d'écrire /home/prenom/.

Il est possible d'utiliser ces dossiers spéciaux à la fois dans un chemin relatif et dans un chemin absolu.

  1. Dans un nouveau terminal, exécuter les commandes suivantes :

    🐍 Code Python
    1
    2
    3
    4
    5
    6
    ls ./
    ls ../
    ls data-shell/creatures/../
    ls ~/data-shell/data
    ls /home/prenom/data_shell/../
    ls /home/prenom/./
    
  2. Parmi les arguments des commandes ls de la question 1, préciser quels sont les chemins relatifs, quels sont les chemins absolus.

  3. Donner les chemins absolus équivalents aux chemins de la question 1 sans utiliser les notations ./, ../ et ~/.

Pratiquons en jouant !

GameShell est un jeu pour apprendre et mémoriser l'utilisation des commandes unix. Dans ce jeu, vous aurez à vous rendre dans la plus haute tour du plus haut donjon, exterminer des nuées araignées féroces, voler des pièces et explorer une sombre forêt, le tout en ligne de commande.

  1. À l'aide des instructions présentes dans le fichier README.md du dépôt github GameShell, exécuter la dernière version du jeu GameShell dans un terminal.
  2. Terminer les 12 premiers niveaux.

Si cela vous a amusé, un jeu très similaire se trouve à l'adresse

https://luffah.xyz/bidules/Terminus/

Permissions

Plusieurs utilisateurices peuvent utiliser une même machine. Sous Linux, il existe un utilisateur spécial, nommé root. Il s'agit de l'administrateur de la machine. Son répertoire personnel a pour chemin /root/.

Exécuter la commande ls /root/ puis commenter l'affichage de la console.

Sous Linux, chaque fichier et chaque dossier possède des permissions (ou droits d'accès). On peut connaître les permissions d'un fichier à l'aide de la commande ls -l nom_fichier.

On peut modifier les permissions d'un fichier à l'aide de la commande chmod modification_permission nom_fichier, où modification_permission est de la forme :

  • qui+droits : donner les droit à qui
  • qui-droits : retirer les droits à qui
qui droit
u (​u​ser) r (​r​​ead)
g (​g​​roup) w (​w​rite)
o (​o​​ther) x (e​x​​ecute)
  1. Créer un nouveau fichier test.txt à l'aide de la commande touch test.txt, puis l'éditer à l'aide de la commande nano test.txt (y écrire le texte que vous souhaitez, puis sauvegarder avec Control s et quitter avec Control x).

  2. Exécuter la commande ls -l test.txt

    Recopier dans votre cahier de TP les 10 premiers caractères du résultat.

  3. Exécuter la commande cat /home/prenom/test.txt. Demander à un camarade d'exécuter la même commande que vous (avec votre prénom).

  4. Exécuter les commandes chmod a-rw puis chmod u+r, puis reprendre la question 3.

    Commenter.

  5. Éditer le fichier test.txt, puis sauvegarder les modifications.

    Que constate-t-on ? Comment résoudre ce "problème" ?

Exercices

En supposant que le répertoire de travail soit /home/amanda/data, quelles commandes Amanda pourrait utiliser pour rejoindre son répertoire personnel ?

  • cd ./
  • cd /
  • cd /home/amanda/
  • cd ../../
  • cd ~
  • cd home
  • cd ~/data/../
  • cd
  • cd ../

On considère l'arborescence ci-dessous.

img

  1. Le répertoire de travail est /home/thing/

    Qu'affiche ls ../backup ?

  2. Le répertoire de travail est /home/backup/

    Quelle(s) commande(s) permet(tent) d'afficher le résultat :

    🐍 Code Python
    1
    sub/ final/ original/      
    

On pourra utiliser l'option -F pour afficher le caractère / après le nom du dossier et on lira la documentation de la commande ls afin de trouver l'option permettant d'inverser l'ordre du tri de l'affichage des fichiers et dossiers.

L'affichage ci-contre est une version simplifiée du résultat de la commande ls -l qui donne les noms et droits d'accès des fichiers et dossiers du répertoire courant. Le premier caractère est d pour les répertoires, - pour les fichiers, les trois caractères suivants sont r, w, x ou - si l'utilisateur a le droit de lecture/écriture/exécution du fichier ou répertoire.

🐍 Code Python
1
2
3
4
5
-rw- f1
--w- f2
-rwx f3
drw- d1
dr-x d2

Parmi les commandes ci-dessous, lesquelles sont permises et pourquoi ?

  1. cat f4
  2. cp f1 d2/f
  3. cp f2 d1/f
  4. cp f3 d1/f
  5. ls d1
  6. cat f1
  7. cp f3 f2
  8. cat f3
  9. cd d1