par défaut, pas d'extension

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
ça peut paraitre moins pratique que de cliquer sur les icones du bureau… mais en fait c’est beaucoup plus puissant !
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 linuxcomme 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
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
# pour aller dans mon homedir, je fais juste ceci
cd
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
# sans paramètre je vais tout en haut de mon espace# c'est mon home-directory
cd
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
# pour voir où il est# pwd = print working directory
pwd
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) :
.
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 courantls ../frere/neveu
cd -
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
$ 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
un peu en vrac, quelques conseils généraux pour bien utiliser votre ordi
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
# 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/
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)
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…
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
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
mais on peut le changer
si bien qu’après vous voyez bien ce qu’il faut:
bash
voici un résumé sur quelques commandes bash
, parmi les plus simples et les plus utiles
commande | fonction |
---|---|
cd | aller dans le homedir |
cd elsewhere | changer de dossier courant |
pwd | afficher le dossier courant |
ls | lister les fichiers et dossiers dans le dossier courant |
ls elsewhere | lister les fichiers et dossiers dans un autre dossier |
ls fi les | lister les fichiers fi et les |
mkdir newfolder | créer un dossier |
rm oldfile | supprimer un (ou des) fichier(s) attention ils sont supprimés pour de bon et non pas placés dans la corbeille |
mv oldname newname | pour renommer un fichier (ou un dossier) |
echo a message | pour afficher du texte |
cat somefile | pour afficher le contenu d’un (ou plusieurs) fichier(s) |
si j’ai plusieurs fichiers qui se terminent en .txt
, je peux les lister avec la notation en *
comme ceci
# 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
$ ls *.txtbar.txt foo.txt
ou tous ceux qui commencent par un f
$ ls f*foo.txt
ou toute combinaison du même genre
$ ls f*txtfoo.txt
# si je veux chercher tous les fichiers en *.txt# à n'importe quelle profondeur sous mon dossier courant
ls **/*.txt
pour les curieux qui voudraient comprendre un peu mieux:
[]
(avancé)# 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
# et si on veut par exemple tous les fichiers qui commencent par une lettre minuscule
ls [a-z]*.txt
# ou par une lettre, qu'elle soit en minuscule ou en majuscule
ls [a-zA-Z]*.txt
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
# je crée ou j'écrase le fichier foo.txtecho "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
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à
dans cette phrase
dans
et lui passer deux paramètres cette
et phrase
"
: avec les quotes, on peut éviter le découpage; ainsi
dans "cette phrase"
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# sans redirection: le texte s'affiche dans le terminalecho 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:
prog1 arg1 | prog2 arg2
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
prog1 arg1 ; prog2 arg2
prog1
, attendre qu’il ait terminé, puis lancer prog2
; lorsque prog2
sera terminé le terminal nous redonne la mainet plein d’autres choses utiles, très rapidement:
~
pour faire référence à votre homedir (ex: cat ~/.ssh/id_rsa.pub
)$
pour utiliser la valeur d’une variable (ex: echo $PATH
)'
(simple quote) qui fontionne un peu, mais subtilement différemment de, la double quote&
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 ;
chaque commande est libre d’interpréter les paramètres comme elle veut; par exemple
cat
les paramètres sont tous interprétés comme des noms de fichiersgit
, 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…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ésentationpython --version
le plus souvent également:
-
ou --
-
pour l’option courte--
pour l’option longuepython --version
python -V
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
on ne peut créer un process .. que depuis un process
(comme on l’a vu plus haut par exemple, le terminal passe son temps à créer des process)
et donc entre autres un process contient l’identité de son process parent - qu’on appelle le ppid
pour parent process id (ce qui du coup, donne à l’ensemble des processus une structure d’arbre)
pourquoi c’est important pour nous ?
parce que ça explique cette histoire scabreuse de la variable PATH
car en effet les variable d’environnement - comme PATH
- sont héritées du processus parent
le terme OS - Operating System a plein de significations différentes dans le langage courant
mais nous ici lorsqu’on parle d’OS, on désigne seulement ce qu’on appelle aussi le
noyau
c’est-à-dire techniquement :
le seul programme dans l’ordinateur qui a accès direct aux périphériques
qui “fait tourner” les programmes en leur donnant tour à tour accès au processeur
et qui fait en sortes qu’ils soient isolés les uns des autres
tous les autres programmes (user land) accèdent à ces ressources au travers d’abstractions:
mémoire : mémoire virtuelle
la case mémoire ‘1’ est redirigée vers un bout de mémoire allouée au programme
système de fichiers
le disque dur est accessible au travers de dossiers et fichiers
interface réseau
les applications utilisent “gratuitement” les protocoles réseau - comme TCP/IP
qui sont en fait implémentés dans le noyau
périphériques exotiques
les constructeurs de composants - comme par ex. une carte vidéo ou une carte son - fournissent ce qu’on appelle un driver
(qui est intègré au noyau) pour exposer aux applications une interface indépendante du matériel