Découvrir le terminal

1. Le terminal

1.1. Qu’est-ce que le terminal ?

Le terminal est un outil intimidant aux premiers abords, mais au final se révèle pas compliqué. C’est une version texte de l’explorateur de fichiers : on peut ouvrir des dossiers, créer des fichiers, les lancer, les renommer, installer des programmes, et bien d’autres choses. On dit que c’est une CLI (Command Line Interface), comparée à la GUI (Graphical User Interface) de l’explorateur normal. Tout est fait via clavier, donc pas besoin de souris dans le terminal.

Dans ce tuturiel, nous allons voir comment lancer et utiliser les bases du terminal, puis je te donnerai quelques ressources pour aller plus loin.

Voici une version vidéo du tutoriel :

 

1.2. Comment le lancer ?

Sur Linux : CTRL + ALT + T
Sur macOS : CMD + SPACE, puis écrire Terminal (ou iTerm), Enter.

1.3. Premières fonctions ?

Pour faire marcher le terminal, rien de plus simple : il suffit de rentrer le texte correspondant à la fonction et cela s’exécutera. Par exemple si dans l’explorateur en GUI il suffit de double cliquer sur mon_fichier.txt pour l’ouvrir, il faudra faire dans le terminal open mon_fichier.txt (sur macOS) ou xdg-open mon_fichier.txt (sur Linux) pour l’ouvrir avec le terminal. On va tester avec notre première fonction :

$ echo "Hello world !"

(je commence toutes les commande du terminal avec un $, c’est une convention, et c’est plus facile à reconnaitre comme ceci)

Si tu exécutes cette commande le terminal devrait te renvoyer Hello world ! (cette phrase est un grand classique de la programmation). Et là, tu viens d’exécuter ta première commande de terminal 🎉
Maintenant nous allons voir les premières commandes de base.

PWD

pwd est l’acronyme de Print Working Directory, une commande qui affiche le dossier dans lequel tu es actuellement.

$ pwd

Pour moi, pwd me renvoie :

/Users/felix

C’est comme dans l’explorateur en GUI, quand tu double-cliques sur felix, il te déplace dans le dossier felix qui est dans le dossier Users.

Astuce : pwd est généralement la première commande que l’on tappe quand on arrive dans le terminal de quelqu’un : c’est idéal pour s’y retrouver ✌️

LS

ls est le diminutif pour list, cette fonction affiche les fichiers et dossiers qu’il y a dans mon dossier actuel.

$ ls

Pour moi, ls me renvoie :

Applications/     Dropbox/          Music/            Desktop/
Pictures/         Documents/        Library/          Public/
Downloads/        Movies/

Dans le terminal, nous pouvons donner des options aux fonctions, en faisant $ fonction -option. Par exemple, je peux faire ls -a, ce qui a pour effet d’afficher aussi les fichiers commençant par un . (fichiers de devs en général), ou je peux faire ls -l pour afficher la liste au format long. Et je peux même combiner les deux en faisant ls -al pour afficher aussi les fichiers commençant par un ., tout au format long.

MAN

man est le diminutif de manual. Man lance un programme qui permet de lire la manuel d’une fonction précise. Pratique pour savoir toutes ses spécificités. Pour s’en servir il suffit de tapper : man fonction. Par exemple pour afficher le manuel de ls, je dois taper :

$ man ls

Ce qui m’ouvrira son manuel, qui je peux quitter à tout moment en tapant q.

1.4. Où sommes-nous ?

Une notion fondamentale pour le terminal : la notion de géographie. Comme dans l’explorateur en GUI, on se déplace de dossiers en dossiers dans le terminal. Si jamais tu veux ouvrir un fichier en tappant open file.txt (sur macOS) ou xdg-open file.txt (sur Linux) et que tu ne te trouves pas dans le bon dossier, le terminal te renverra une erreur. Un peu comme si tu essayais de double-cliquer sur file.txt dans le mauvais dossier : impossible car il n’y est pas.

Tu vas devoir te déplacer donc de dossiers en dossiers pour ouvrir et intéragir avec les bons fichiers.

1.5. CD

cd est l’acronyme de Change Directory, qui te permet de naviguer entre dossiers. L’équivalent d’un double-clic sur un dossier en quelque sorte 😁

$ cd nomdudossier

Te te déplacera dans le dossier nommé nomdudossier (s’il existe dans le dossier dans lequel tu te trouves).

Protip : utiliser la touche TAB permet de faire de l’autocompletion, très pratique pour cette méthode. Aussi, faire cd + [ESPACE] + TAB + TABaffiche les dossiers disponibles.

1.6. Autres fonctions

1.6.1. Créer un fichier

En tapant :

$ touch nomdufichier

Cela aura pour effet de créer un fichier qui s’appelle nomdufichier

1.6.2. Copier

Pour copier un fichier ou un dossier d’un endroit à un autre, il suffit de rentrer :

$ cp fichier_à_copier lieu_de_destination
1.6.3. Déplacer

Pour déplacer (couper) un fichier ou un dossier d’un endroit à un autre, il suffit de rentrer :

mv [fichier_à_déplacer] [lieu_de_destination]

Protip : mv est très pratique pour renommer un fichier. Imaginons que tu as créé un fichier « hello.rv » au lieu de « hello.rb ». Oups, malheur. Heureusement, faire $ mv hello.rv hello.rb résoud ceci en quelques coups de clavier !

1.6.4. Remove

Supprimer un fichier :

$ rm nomdufichier

Il est possible d’effacer un dossier ainsi que son contenu en ajoutant la récursion en option :

$ rm -r nomdudossier

Info utile : rm est à l’origine d’une blague vieille comme le monde, en effet, ajouter l’option -f permet de forcer la suppression d’un fichier, même s’il est important pour l’ordinateur, et finir par / ou * dit à votre ordinateur de prendre absolument tous les fichiers. Ainsi, si tu tapes $ rm -rf / ou $ rm -rf * dans ton terminal, tu dis à ce dernier de tout prendre et de tout effacer, en forçant. Et figure toi que rm est très rapide, et donc effacera l’intégralité de ton ordinateur en quelques secondes à peine. À ne jamais jamais jamais faire donc.

1.6.5. Vim

Vim est un des éditeurs de texte les plus respectés au monde. Comme il passe uniquement par le terminal, il se marie extrêmement bien avec cet outil. Et comme vim utilise exclusivement le clavier, ses raccourcis permettent d’aller extrêmement vite, pour qui ose grimper la très dure courbe d’apprentissage (6 mois à plein temps). De ce fait, je te montrerai vim pour ta culture générale, mais te demanderai de passer par un autre éditeur de texte 😉

$ vim nomdufichier

Permet d’ouvrir vim sur le fichier nomdufichier et de l’éditer. Pour quitter vim, il faut rentrer :q!.

1.7. Autres astuces

CTRL + C annule la fonction en cours. Pratique quand on a une boucle infinie.

La casse est très importante, idem pour les espaces.

Il y a des raccourcis pratiques, par exemple CTRL + U efface la ligne en cours.

Les touches du haut et du bas permettent de naviguer dans l’historique des commandes. Très pratique pour par exemple re-éxécuter une commande que tu viens de faire.

1.7. Aller plus loin

Voici quelques ressources pour être le champion du terminal :

2. Git et GitHub

2.1. Git ?

Git est un outil de versionning de code, c’est à dire que c’est une commande qui permet de faire des sauvegardes, avec commentaires d’un projet. Ainsi, il est facile de revenir d’une version de sauvegarde à l’autre, et c’est même optimisé pour les projets où tout le monde travaille sur le même fichier !

En gros, c’est la même chose quand vous faîtes une grosse présentation PPT. Vous faites tellement de modifications dessus que vous vous retrouvez à la fin avec le nom « VF_avec_retours_Jean01_final.ppt ». Le versionning vous permet d’avoir toutes les versions sauvegardées, et de revenir à celles que vous voulez à tout moment, et de nous éviter ces tracas.

Voilà à quoi Git sert : à mieux gérer ses versions entre les fichiers d’un projet (bonus : Git marche pour tous les fichiers d’un dossier concerné, donc c’est encore plus suivant que CTRL + S). Et GitHub permet de mettre en ligne ton projet, comme ça vous pourrez travailler facilement en équipe dessus.

Dans cette leçon, nous allons te montrer comment installer Git, comment s’en servir, et comment le faire marcher. Pour ceci, nous allons nous aider de l’excellent cours sur OpenClassrooms de Marc Gauthier, CTO de Drivy, sur Git et GitHub.

2.2. Installer Git

Avant de pouvoir se servir de Git, il faut l’installer. Cela tombe bien, il y a un chapitre éponyme dans le cours sur OC.

2.3. Le premier cours à Git

J’ai fait une petite vidéo d’introduction à Git, que tu pourras retrouver ci-bas :

 

Ensuite, tu peux suivre le cours de Marc Gauthier jusqu’à la partie Récupérez des modifications. Nous verrons ansl a formation THP comment faire les branches et autres joyeusetés 😇

2.3.1. Les commandes pratiques

Voici un récap des commandes de base :

  • $ git init : il faut TOUJOURS commencer par initialiser git avec cette commande. Avec cette commande, le répertoire courant est considéré comme un repository git
  • $ git add [fichier] : ajoute aux sauvegardes le fichier mentionné. Protip : si tu as plusieurs fichiers à ajouter, tu peux utiliser $ git add . qui ajoute au repository tous les fichiers du dossier
  • $ git commit -m [commentaire] : créé un commit (commit = sauvegarde suivie d’un commentaire).
  • $ git status : te dit le status actuel de git.
2.3.2. Lire l’historique

$ git log : permet de voir l’historique et de voir tous les commits. Les commits sont rangés avec :

  • SHA : liste de chiffres et lettres qui indentifient de façon unique le commit.
  • Auteur
  • Date
  • Message donné durant le commit : avec ce message, tu vas comprendre ce que faisait le commit. C’est pour cela qu’il est important d’avoir un bon nom.

Pour quitter le log, il faut appuyer sur Q.

2.3.3. Se positionner sur un commit donné

Imaginons que l’on doit revenir en arrière. On va utiliser la commande $ git checkout, utilisée comme ceci :

  • $ git checkout 45581cebdd2cae494f80f44010af9e4a86c9b8fa : on dit à git de se positionner sur ce sha précis.
  • $ git checkout master : une fois que l’on a fini de se balader, il faut revenir à la version présente de notre repository avec cette commande

⚠️ git checkout ne marche que si vous n’avez pas de modifications non sauvegardées. Si vous êtes entre deux commits, git checkout ne marchera pas. Du coup il vous faudra soit faire une sauvegarde (== faire un commit), soit effacer tout pour revenir au commit d’avant.

⚠️ git checkout n’est pas une commande pour revenir en arrière et faire des modifications sur les anciens commits. Si tu fais ça, tu vas te retrouver avec une erreur qui a donné lieu à l’un des threads les plus célèbres de Stack Overflow. Pour tout effacer et revenir en arrière, le chapitre précédent sera là pour toi.

2.3.4. Revenir en arrière

J’ai fait des trucs, mais cela ne me convient pas. Comment revenir sur en arrière ? (inspiré par cette excellente réponse de Stack Overflow)

2.3.4.1. EFFACER POUR REVENIR AU COMMIT D’AVANT

La fonction $ git reset --hard permet de revenir au commit précédent, en effaçant tout. C’est une commande pratique quand on veut essayer de nouvelles choses à la volée, puis de revenir en arrière comme si de rien n’était ✌️

2.3.4.2. TOUT EFFACER ET REVENIR À UN ANCIEN COMMIT

On peut faire ceci avec : $ git reset --hard 45581cebdd2cae494f80f44010af9e4a86c9b8fa, avec 45581c le SHA sur lequel tu veux revenir.

2.4. Pour aller plus loin

Voici quelques ressources pour ceux qui veulent continuer à découvrir Git :

  • Au vu des apologies que l’on lui loue, le cours de OpenCalssrooms sur Git est un très bon point pour aller plus loin.
  • TryGit est un tutoriel extrêmement connu, qui donne des bases solides en Git. Il est recommandé de faire ce tutoriel quand tu as vu les bases d’abord : il t’aidera sur la syntaxe, mais pas sur la compréhension
  • Voici un cours sur Git de la Viking Code School

Place à l’action

Ce projet te permettra de mettre en avant ce que tu as vu sur le terminal, Git, et Github. C’est un projet assez simple, mais qui te permettra de te faire découvrir l’univers du code avant de passer à la suite.

Dans ce premier projet, tu vas créer ton premier repository et le mettre en ligne. Oh yeah !

1. Créer le repo sur GitHub

Si ce n’est pas fait, va créer un compte sur GitHub, puis va créer un nouveau repository.

Au moment de la création, GitHub te demandera :

  • le Repository name : donne-lui un nom du genre git-thp
  • une description, optionnelle : laisse-la vide
  • s’il sera public ou privé : public (sauf si tu as envie d’upgrade ton compte et le rendre privé)
  • si tu veux initialize with a README : non, nous allons l’ajouter à la main

🎓 Instant culture gé : un README est un fichier que l’on retrouve toujours dans un repository Git. Il permet à une personne qui débarque sur le projet de mieux le comprendre, de voir comment il marche, d’avoir une documentation exhaustive. Par exemple, tu peux voir ici la page de React JS, un framework de JavaScript, avec son README qui explique ce que fait React JS. Dans ce premier dossier, le README sera juste un texte pour dire que c’est un projet d’introduction à GitHub, Git, et le terminal.

Une fois ceci fait, tu devrais arriver à une page incompréhensible comme celle-ci :

 

 

Cette page te dit juste que ton repository est prêt, mais vide et prêt à être couplé à un dossier sur ton ordinateur. Nous allons donc prendre ce repo, puis le mettre sur ton ordinateur.

Comme tu es le propriétaire de ce repo, tu as juste à le cloner, et tu pourras travailler dessus facilement. Avec ton terminal, positionne-toi dans un dossier qui contiendra les projets de THP, puis créé le dossier de ce premier projet avec mkdir. Va à l’intérieur avec la commande cd.

Une fois à l’intérieur, te voici prêt à cloner ton repo vide. Pour ceci, tu peux utiliser la fameuse commande git clone :

$ git clone https://github.com/ton_username/le_nom_de_ton_repo

Et voilà, tu as ton premier dossier, lié à un repo GitHub. À partir de là, tu pourras faire des commits, et push ces commits sur le repo GitHub.

2. Travailler sur le projet depuis ton ordinateur

Bon tu as ton dossier, et si l’on lui donnait un peu de pep’s ? Il est vide, on va commencer par faire un README pour expliquer ce que notre dossier fait.

 

🤓 Et dis-donc Jamy, pourquoi je ne dois pas faire git init, qui est en théorie LA première commande à faire dans tout nouveau repo ?
Excellente question chef, on voit que tu suis. Git init sert à dire à ton ordinateur « hey bro, ici je vais avoir un dossier qui sera git, donc je vais faire des sauvegardes fréquentes », mais comme tu as fait un clone, ton ordinateur sait déjà que c’est un dossier git. Donc pas besoin de faire git init.

 

2.1. Création du premier fichier

Avec la commande touch, crée un nouveau fichier qui s’appelle README.md. Ouvre-le avec open (sur macOS) ou xdg-open (sur Linux), ce qui devrait lancer un éditeur de texte bidon (on verra demain comment installer des éditeurs de texte de grand BGs pour faire du code de BG), écris-y les lignes suivantes :

Ceci est mon tout premier repo GitHub, waow !
2.2. Ajout du premier fichier

Si tu fais la commande git status, ton ordinateur devrait te dire un truc du genre : « hey ! je suis sur la branche master, sur le premier commit, et j’ai remarqué qu’il y a un nouveau fichier qui s’appelle README.md. Ce fichier n’est pas répertorié dans le dossier git quand tu fais des sauvegardes, donc fais git add si tu as envie que je le prenne en compte lors de ton prochain commit ! ». Trop cool, on va donc ajouter ce fichier avec git add.

2.3. Premier commit

Une fois que tu as ajouté ton fichier avec git add, tu peux refaire git status, et tu auras un écran similaire, mais différent. Là, ton ordinateur te dire « hey ! Je suis sur la branche master, sur le premier commit, et tu as au moins un fichier ajouté au dossier git qui est différent au précédent commit, si tu fais un commit, ce fichier sera sauvegardé ! ». Je te laisse faire ton premier commit avec la commande git commit. Comme commentaire, nous te conseillons « Ajout du README », qui est explicite.

Si tu fais $ git log, tu pourras voir l’historique de tes différents commits. Si tu as bien fait le commit précédent, tu devrais le voir affiché dans ton historique.

2.4. Création de fichiers, add, commit, késako ?

Là tu dois te demander la différence entre add, création de fichier, commit, et c’est vrai que l’on s’y perd. Nous allons prendre une analogie : imagine que ton projet représente une soirée, et chaque fichier correspond à une personne présente à la soirée. Git te sert de capturer des photos de la soirée, et de savoir précisément qui tu vas prendre en photo.

LES GENS SUR LA PHOTO

Des fois des personnes vont arriver dans la soirée (création de fichier), mais il faut dire à ton ordinateur que tu veux les prendre en photo, tu vas donc utiliser git add pour choisir qui tu vas prendre en photo. Des fois certains fichiers ne seront pas prêts pour la photo, ils seront différents par rapport à la dernière photo, mais tu ne veux pas les capturer. Quand tu feras git status, ils seront untracked, mais tu veux les laisser tels quels et ajouter d’autres fichiers avec git add.

PRENDRE LA PHOTO

Une fois que ton cadre est prêt et tu as bien les personnes que tu veux prendre en photo, tu peux faire git commit pour prendre la photo, avec un joli commentaire « la bande à féfé ».

Tu pourras prendre une autre photo avec d’autres fichiers en faisant git add, et git commit.

3. Mettre ton projet en ligne

Maintenant que tu as fait ton premier commit, nous allons mettre tout ceci en ligne, et admirer le travail bien fait.

Pour ceci, rentre la commande $ git push origin master, et Git devrait te le mettre en ligne. Si tu vas sur la page de ton projet du genre : https://github.com/ton_username/le_nom_de_ton_repo, tu devrais avoir le dossier à jour, avec un super README.md !

GIT PUSH ORIGIN MASTER ?

Cette commande utilise 4 mots que nous allons décortiquer :

  • git : tu utilises le programme git de ton terminal. Jusqu’ici, tout va bien
  • push : tu fais un push, c’est à dire que tu vas pousser ton projet..
  • origin : .. à la remote origin de ton projet. En faisant git clone, tu as mis ta remote origin par défaut au dossier GitHub, mais tu aurais pu push vers ta genesis, ou ta my_super_name_cool. Tu peux voir tes remotes en faisant $ git remote -v.
  • master : sur la branche master

Ainsi, si tu avais fait $ git push origin other_branch, tu aurais fait un git push dans ton remote origin sur la branche other_branch.

4. Ajouter un fichier

Maintenant, ajoute un nouveau fichier nommé kikou.txt, ajoute-le à ton repository, fais un commit, puis push le tout sur ton remote origin. Confirme que cela a été fait en allant sur ton repo GitHub et en actualisant.

5 Apprécier le travail bien fait

Pfiou, c’était un beau projet ! Et bien figure toi que tu viens de finir ta première journée d’introduction au code, dans laquelle tu auras vu de belles choses :

  • Le terminal, et comment s’en servir
  • Comment gérer son projet comme un pro avec Git
  • Mettre son projet en ligne avec GitHub

Tu veux en savoir plus ? => http://www.thehackingproject.org

 

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s