Skip to content

le terminal

le premier outil que nous allons voir c’est ce qu’on appelle le terminal;
un terminal qu’est-ce que c’est ?

le terminal c’est tout simplement un process (programme) qui permet de lancer d’autres process

mais pourquoi ne pas juste cliquer ?

ça peut paraitre moins pratique que de cliquer sur les icones du bureau… mais en fait c’est beaucoup plus puissant !

  • d’abord c’est presque un langage de programmation, on peut faire en une ligne ce qui prendrait des heures avec un cliquodrome !
  • et aussi on va pouvoir passer des paramètres aux programmes - voir par exemple avec vs-code
  • enfin c’est de cette manière qu’on accède à des ressources distantes (cloud, cluster de calcul, …)

bash

il y a plein de types de terminal selon les systèmes d’exploitation
mais pour que nous travaillions tous ensemble sur le même objet, nous avons choisi un terminal qui s’appelle bash

  • bash vient avec l’installation de base sur MacOS et linux
  • sur Windows, il faut l’installer séparément, on l’a vu avec git for windows

dossiers et fichiers

comme vous le savez, le contenu du disque dur est organisé en dossiers et fichiers
le dossier est juste un cas particulier de fichier, qui contient d’autres fichiers (ou dossiers, donc) - au lieu de contenir des données

dossier utilisateur (home directory)

chaque utilisateur possède un dossier privilégié (on dit aussi parfois répertoire),
qui est la racine de l’arbre dans lequel il peut ranger ses affaires
indépendamment des fichiers propres au système d’exploitation

pour y aller le plus simple est de faire simplement cd sans paramètre

Terminal window
# pour aller dans mon homedir, je fais juste ceci
cd
rappels à propos du prompt

la plupart du temps on ne montrera plus le $ qui est affiché par le terminal (le prompt),
ça permet notamment de simplifier le copier-coller depuis le support de cours vers le terminal

Terminal window
# sans paramètre je vais tout en haut de mon espace
# c'est mon home-directory
cd

dossier courant

tous les programmes (processus) ont ce qu’on appelle un dossier courant
dans le terminal on peut le voir avec la commande pwd comme ceci

Terminal window
# pour voir où il est
# pwd = print working directory
pwd

une petite session

commençons par une petite promenade dans le contenu de ce cours
je suppose que vous l’avez déjà cloné, sinon retournez à cette section pour le faire

je vous invite à expérimenter tout ceci dans votre propre terminal (et sans taper les $ évidemment) :

chemins relatifs et absolus

. et ..

on nous donne deux outils pour naviguer dans l’arbre des fichiers; par convention:

  • . désigne le répertoire courant
  • .. désigne le répertoire “au dessus” du répertoire courant
    on l’utilise pour fabriquer des chemins du genre de
    Terminal window
    ls ../frere/neveu

cd -

pour revenir en arrière (avancé)

enfin, une astuce utile c’est pour revenir en arrière avec cd -
avec cette commande, vous retournez au dossier où vous étiez avant le dernier cd

Terminal window
$ pwd
/c/Users/Jean Mineur
$ cd cours-info/intro
$ pwd
/c/Users/Jean Mineur/cours-info/intro
$ cd -
$ pwd
/c/Users/Jean Mineur
$ cd -
$ pwd
/c/Users/Jean Mineur/cours-info/intro

astuces & conseils

un peu en vrac, quelques conseils généraux pour bien utiliser votre ordi

la complétion

ce qu’on appelle complétion, c’est la capacité d’un outil à vous aider à taper votre code, en complétant la phrase que vous avez commencée

exemple :

  • vous lancez un terminal, et si nécessaire vous allez dans votre home-directory

  • à cet endroit il y a en principe un dossier qui s’appelle cours-info

    Terminal window
    # vous tapez
    $ cd cours-
    # à ce stade-là, vous tapez sur la touche 'Tabulation` - parfois représentée avec le signe ⇥
    # et s'il n'y a qu'un nom de fichier qui commence comme cela, vous obtenez magiquement
    $ cd cours-info/

un raccourci vers cours-info

le homedir, c’est une racine tentante pour mettre ses affaires, mais souvent il y a pas mal de fourbis dès le départ
sur Windows par exemple si vous regardez son contenu (faites-le !), vous verrez que c’est pas mal encombré

c’est pourquoi on vous a demandé de créer un dossier cours-info dans lequel on va ranger vos différents dossiers:
chaque cours dans un repo, puis au besoin un dossier par exercice ou TP ou hackaton, etc…

je vous recommande de passer 5 minutes pour ajouter ce dossier dans les raccourcis de votre explorateur de fichiers
de cette façon vous y aurez un accès direct en un clic, comme ceci
(ici sur Windows, mais c’est une feature disponible sur tous les OS)

fig-quick-access-cours-info.png

ne pas abuser sur la profondeur des arbres

vous pouvez bien sûr décider de mettre le cours-info où vous voulez dans votre ordi, mais dans tous les cas, évitez de couper les cheveux en 4 en créant plein de sous-répertoires, genre :

/c/Users/Jean\ Mineur/Desktop/mines/première-année/info/ue12/cours-info

au contraire il est préférable de se limiter à une profondeur “raisonnable”, c’est bien plus pratique à l’usage…

noms de fichiers simples

c’est assez facile (avec l’explorateur de fichiers notamment) de créer des fichiers dont le nom contient des caractères biscornus, comme des espaces ou des accents

mais après ça devient rapidement compliqué de les utiliser, dans le terminal notamment

c’est pourquoi on recommande d’éviter les espaces et les accents dans les noms de fichiers

affichez les extensions dans les noms de fichier

dans l’explorateur Windows, si vous créez un fichier foo.txt, par défaut on va vous montrer
dans l’explorateur de fichiers une entrée qui s’affiche avec comme nom simplement foo

pourquoi ? dans son infinie sagesse Windows a jugé que c’était “plus simple” de ne pas montrer l’extension, ici .txt
personnellement je ne trouve pas ça très pratique…

voici comment on peut changer ce comportement, pour voir les noms de fichier en entier

par défaut, pas d'extension

fig-explorer-showext-1.png

mais on peut le changer

fig-explorer-showext-2.png

si bien qu’après vous voyez bien ce qu’il faut: fig-explorer-showext-3.png

creusons un peu bash

quelques commandes utiles

voici un résumé sur quelques commandes bash, parmi les plus simples et les plus utiles

commandefonction
cdaller dans le homedir
cd elsewherechanger de dossier courant
pwdafficher le dossier courant
lslister les fichiers et dossiers dans le dossier courant
ls elsewherelister les fichiers et dossiers dans un autre dossier
ls fi leslister les fichiers fi et les
mkdir newfoldercréer un dossier
rm oldfilesupprimer un (ou des) fichier(s)
attention ils sont supprimés pour de bon et non pas placés dans la corbeille
mv oldname newnamepour renommer un fichier (ou un dossier)
echo a messagepour afficher du texte
cat somefilepour afficher le contenu d’un (ou plusieurs) fichier(s)

globbing

si j’ai plusieurs fichiers qui se terminent en .txt, je peux les lister avec la notation en * comme ceci

Terminal window
# je crée (ou j'écrase) un second fichier bar.txt
$ echo "un autre fichier bidon" > bar.txt

de là je peux lister tous les fichiers qui se terminent en .txt

Terminal window
$ ls *.txt
bar.txt foo.txt

ou tous ceux qui commencent par un f

Terminal window
$ ls f*
foo.txt

ou toute combinaison du même genre

Terminal window
$ ls f*txt
foo.txt

à n’importe quelle profondeur

Terminal window
# si je veux chercher tous les fichiers en *.txt
# à n'importe quelle profondeur sous mon dossier courant
ls **/*.txt





bash - partie avancée

pour les curieux qui voudraient comprendre un peu mieux:

les crochets [] (avancé)

Terminal window
# on peut aussi utiliser les []
# ici tous les fichiers qui commencent par un f ou un b et qui finissent en .txt
ls [fb]*.txt
Terminal window
# et si on veut par exemple tous les fichiers qui commencent par une lettre minuscule
ls [a-z]*.txt
Terminal window
# ou par une lettre, qu'elle soit en minuscule ou en majuscule
ls [a-zA-Z]*.txt

redirections

plutôt que d’afficher le résultat d’une commande dans le terminal, il est parfois pratique de rediriger cela dans un fichier

par exemple si j’écris dans le terminal

Terminal window
# je crée ou j'écrase le fichier foo.txt
echo "un petit fichier bidon" > foo.txt

ce qui va se passer c’est que je vais créer (ou écraser) le fichier foo.txt pour y ranger dedans la chaine
un petit fichier bidon\n

le dernier cararactère (\n) correspond à un saut de ligne

la syntaxe de bash

pour décrire un peu mieux le langage bash, voici les caractères qui ont un rôle particulier dans une ligne de commandes bash:

  • (Espace): on l’a déjà évoqué, l’espace sert à découper la phrase en mots; et de là
    • le premier mot correspond à une commande (qu’on cherche selon le PATH); c’est le programme qu’on va lancer
    • les autres mots sont passés au programme
    • donc si vous tapez
      Terminal window
      dans cette phrase
      on va chercher un programme qui s’appelle dans et lui passer deux paramètres cette et phrase
  • ": avec les quotes, on peut éviter le découpage; ainsi
    Terminal window
    dans "cette phrase"
    va aussi exécuter la commande dans mais lui passer un seul paramètre qui contient un espace, cette phrase
  • > et <: servent à rediriger l’entrée et la sortie du programme
    comparez le résultat de
    Terminal window
    # sans redirection: le texte s'affiche dans le terminal
    echo un message
    # essayez de rediriger la sortie, cela va créer le fichier (s'il n'existait pas encore)
    echo un message > foo.txt
  • | avec le pipe on peut facilement brancher la sortie d’un programme sur l’entrée d’un autre:
    Terminal window
    prog1 arg1 | prog2 arg2
    signifie que la sortie de prog1 arg1 est branchée (comme avec un tuyau) dans l’entrée de prog2 arg2
  • ; pour faire deux commandes l’une après l’autre
    Terminal window
    prog1 arg1 ; prog2 arg2
    va lancer prog1, attendre qu’il ait terminé, puis lancer prog2; lorsque prog2 sera terminé le terminal nous redonne la main

et plein d’autres choses utiles, très rapidement:

  • le ~ pour faire référence à votre homedir (ex: cat ~/.ssh/id_rsa.pub)
  • le $ pour utiliser la valeur d’une variable (ex: echo $PATH)
  • le ' (simple quote) qui fontionne un peu, mais subtilement différemment de, la double quote
  • le & pour lancer un programme en background (en arrière-plan), permet de rendre la main immédiatement; sert en plus de séparateur comme le ;
  • on peut faire des boucles, des tests, des calculs, …
  • etc etc…, plein d’autres encore, mais ne nous égarons pas…

les paramètres

chaque commande est libre d’interpréter les paramètres comme elle veut; par exemple

  • avec la commande cat les paramètres sont tous interprétés comme des noms de fichiers
  • par contre avec git, le premier paramètre doit être le nom d’une (sous-)commande git - comme par exemple clone ou pull - et les autres paramètres sont à leur tour interprétés en fonction, justement, de la sous-commande…

les options

quasiment toujours, la commande va accepter des paramètres qui sont optionnels, et qui permettent de modifier légèrement le comportement
on en a vu déjà plusieurs, e.g.

  • ls [-l|-F] pour choisir un mode de présentation
  • python --version

le plus souvent également:

  • les options commencent par - ou --
  • elles apparaissent généralement avant les “vrais” paramètres
  • la tradition veut qu’une même option est souvent disponible sous les deux formes
    • - pour l’option courte
    • -- pour l’option longue
  • ainsi par exemple c’est équivalent de faire
    • python --version
    • python -V

c’est quoi l’OS ?

partie optionnelle

votre OS (Operating System), vous le savez bien sûr, c’est Windows, MacOS, ou linux
derrière quelques différences (très) visibles, ils possèdent en réalité de très nombreux concepts communs