{"id":77,"date":"2014-04-12T21:51:36","date_gmt":"2014-04-12T21:51:36","guid":{"rendered":"https:\/\/www.aya.io\/ayablog\/?p=77"},"modified":"2022-02-07T12:49:14","modified_gmt":"2022-02-07T12:49:14","slug":"terminal-console-cli","status":"publish","type":"post","link":"https:\/\/www.aya.io\/blog\/terminal-console-cli\/","title":{"rendered":"Le Terminal et ses usages"},"content":{"rendered":"<p>Voici un dossier, accompagn\u00e9 d'un tutoriel, sur le Terminal et ses usages.<\/p>\n<p>Je m'adresse particuli\u00e8rement aux 'd\u00e9butants' qui n'osent pas l'utiliser ou qui ne savent pas trop \u00e0 quoi \u00e7a sert.<\/p>\n<p>Cette introduction \u00e0 l'univers de la &quot;ligne de commande&quot; vous r\u00e9v\u00e8lera, je l'esp\u00e8re, comment envisager l'usage de la &quot;console&quot; de mani\u00e8re ludique et efficace.<\/p>\n<p><!-- more --><\/p>\n<h1>Le Terminal<\/h1>\n<h2>Introduction<\/h2>\n<h3>Le mode graphique, c'est bien<\/h3>\n<p>Il y a des ann\u00e9es, des personnes tr\u00e8s intelligentes et talentueuses ont cr\u00e9\u00e9 des <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Interface_graphique\">interfaces graphiques<\/a> pour nous aider \u00e0 communiquer plus facilement avec nos ordinateurs.<\/p>\n<p>Gr\u00e2ce \u00e0 la souris, au trackpad, au tactile, aux fen\u00eatres et autres menus d\u00e9roulants, icones et codes couleur, nous pouvons ais\u00e9ment trouver notre route parmi les commandes complexes et nombreuses options disponibles d'un logiciel professionel ou d'un syst\u00e8me d'exploitation.<\/p>\n<h3>Le mode texte, c'est bien<\/h3>\n<p>Plusieurs g\u00e9n\u00e9rations auparavant, d'autres g\u00e9nies de la m\u00eame trempe avaient cr\u00e9\u00e9 la <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Interface_en_ligne_de_commande\">ligne de commande<\/a>, qui permet de s'exprimer logiquement et efficacement lorsque l'on a des requ\u00eates \u00e0 transmettre \u00e0 son ordinateur.<\/p>\n<p>&quot;Parler&quot; en anglais naturel \u00e0 ses machines \u00e9tait bien s\u00fbr impossible&nbsp;: ils ont donc con\u00e7u un syst\u00e8me ou les commandes ressemblent \u00e0 des mots et des verbes, permettant \u00e0 <em>l'utilisateur<\/em> et non pas seulement \u00e0 l'administrateur, de construire des requ\u00eates \u00e9labor\u00e9es.<\/p>\n<p>Une poign\u00e9e de mots suffisent \u00e0 d\u00e9clencher des s\u00e9quences complexes, de par la puissance de ce concept.<\/p>\n<h3>L'un n'est pas &quot;mieux&quot; que l'autre<\/h3>\n<p>Taper des commandes en mode texte est tr\u00e8s puissant mais necessite d'\u00eatre rigoureux (les fautes de frappe sont plut\u00f4t malvenues) et d'apprendre un vocabulaire qui peut devenir complexe avec l'ampleur des t\u00e2ches que l'on souhaite confier \u00e0 la machine.<\/p>\n<p>Cliquer dans une interface graphique est tr\u00e8s pratique mais necessite d'apprendre les positions et contenus des menus et boites de dialogue, par exemple, mais plus g\u00e9n\u00e9ralement d'apprendre \u00e0 utiliser l'application ; ainsi que de d\u00e9velopper une certaine dext\u00e9rit\u00e9 manuelle (souris\/trackpad), et d'avoir beaucoup de patience.<\/p>\n<p>Le mod\u00e8le tactile a apport\u00e9 une fra\u00eecheur certaine depuis quelques ann\u00e9es, mais l'on se rend bien compte que l'on ne peut pas tout faire non plus avec un tel appareil.<\/p>\n<blockquote>\n<p>J'estime pour ma part qu'il faut utiliser le bon outil dans le bon contexte, et que toute querelle partisane est nulle et non avenue.<\/p>\n<\/blockquote>\n<h2>Un peu d'histoire<\/h2>\n<p>Alors je ne vais pas me lancer ici dans l'histoire de l'informatique et des interfaces Homme\/Machine, \u00e7a pourrait prendre un peu de temps...<\/p>\n<p>Non, nous allons tr\u00e8s simplement voir d'o\u00f9 vient ce fameux Terminal.<\/p>\n<h3>Mainframe\/Terminal<\/h3>\n<p>Les premiers ordinateurs vraiment puissants, il y a \u00e0 peine plus de quarante ans, \u00e9taient \u00e9normes&nbsp;: ils remplissaient facilement une salle enti\u00e8re.<\/p>\n<p>Ces machines avaient g\u00e9n\u00e9ralement un poste d\u00e9di\u00e9 qui permettait de leur donner des instructions: le <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Terminal_informatique\">terminal<\/a>, c'est-\u00e0-dire un simple \u00e9cran avec clavier qui envoie ce qui est tap\u00e9 \u00e0 la vraie machine, le <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Ordinateur_central\">mainframe<\/a>, qui re\u00e7oit les instructions, les traite, et renvoie le r\u00e9sultat sous forme textuelle vers le terminal.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/terminal.gif\" alt=\"\" \/><\/p>\n<p>Le Terminal est compl\u00e8tement idiot et ne sait strictement rien faire de part lui-m\u00eame&nbsp;: c'est juste un pont entre vous et la machine.<\/p>\n<p>A cette \u00e9poque, le Terminal \u00e9tait physiquement s\u00e9par\u00e9 des mainframes, avec son propre \u00e9cran et son propre clavier.<\/p>\n<p>Quand les syst\u00e8mes devinrent multi-utilisateurs, les terminaux se sont multipli\u00e9s dans les bureaux, s'adressant aux grosses machines install\u00e9es dans les d\u00e9partements IT des entreprises.<\/p>\n<h3>GUI<\/h3>\n<p>Puis vinrent les Graphical User Interface -- les interfaces graphiques, avec les fen\u00eatres, les icones, etc.<\/p>\n<p>C'\u00e9tait une <em>vraie<\/em> r\u00e9volution !<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/xerox.jpg\" alt=\"\" \/><\/p>\n<p>Auparavant, les machines n'\u00e9taient tout simplement pas assez puissantes pour pouvoir afficher autre chose que du texte.<\/p>\n<p>Ensuite, m\u00eame une machine avec des capacit\u00e9s graphiques (par exemple pour afficher des courbes, des chartes, etc) n'\u00e9tait pas forc\u00e9ment <em>commandable<\/em> par sa couche graphique.<\/p>\n<p>Il a fallu l'invention de la souris et d'autres r\u00e9volutions par <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Douglas_Engelbart\">Douglas Engelbart<\/a> et la mise au point des nouveaux paradigmes par <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Xerox_PARC\">Xerox, Apple et autres<\/a> pour que ce que vous trouvez normal aujourd'hui devienne une r\u00e9alit\u00e9&nbsp;: le bureau, les menus d\u00e9roulants, la corbeille, les boites de dialogue, etc.<\/p>\n<h3>Compl\u00e9mentarit\u00e9<\/h3>\n<p>Mais ces interfaces n'avaient pas pour but de remplacer les lignes de commande.<\/p>\n<p>Et ne l'ont d'ailleurs pas fait.&nbsp;\ud83d\ude42<\/p>\n<p>Elles se sont ajout\u00e9es aux outils textuels d\u00e9j\u00e0 disponibles.<\/p>\n<p>Par exemple, je ne me vois pas cliquer dans des dizaines de sous-menus et\/ou d\u00e9placer plein de fen\u00eatres pour aller trouver un malheureux fichier.<\/p>\n<p>De la m\u00eame mani\u00e8re je ne vais pas utiliser le Terminal pour cr\u00e9er des montages vid\u00e9o ou retoucher des photos.<\/p>\n<p>Il serait de m\u00eame irresponsable d'utiliser un syst\u00e8me fen\u00eatr\u00e9 avec plein d'animations graphiques pour manipuler des fichiers de configuration sur un serveur \u00e0 l'autre bout du monde... question de bon sens.<\/p>\n<p>Bref, la tron\u00e7onneuse ce n'est pas <em>mieux<\/em> que le scalpel, c'est <em>diff\u00e9rent<\/em>.<\/p>\n<h2>Usage<\/h2>\n<p>Mais alors, qu'est-ce qu'on y tape comme texte dans cette ligne de commande, comment \u00e7a marche&nbsp;?<\/p>\n<p>La plupart du temps vous y tapez <code>nom_de_la_commande<\/code> + <code>param\u00e8tres<\/code> + <code>cibles<\/code>.<\/p>\n<p>Euh... hein&nbsp;?<\/p>\n<p>Par exemple&nbsp;:<\/p>\n<pre><code class=\"language-bash\">ls -l Documents<\/code><\/pre>\n<p>va demander de montrer les fichiers (ls) en mode liste (-l) du dossier Documents.<\/p>\n<p><em><code>ls<\/code> est le nom de la commande; <code>-l<\/code> est une option; <code>Documents<\/code> est la cible.<\/em><\/p>\n<h3>Exemples<\/h3>\n<p>La commande <code>more<\/code> :<\/p>\n<pre><code class=\"language-bash\">more Documents\/bidule.txt<\/code><\/pre>\n<p>va afficher le contenu page par page (more) du fichier bidule.txt dans le dossier Documents.<\/p>\n<p>La commande <code>mv<\/code> :<\/p>\n<pre><code class=\"language-bash\">mv Photos\/portrait.jpg Documents<\/code><\/pre>\n<p>va demander de d\u00e9placer (mv) un fichier du dossier Photos vers le dossier Documents.<\/p>\n<p><code>mv<\/code> est le nom de la commande, qui signifie 'move', <code>Photos\/portrait.jpg<\/code> est l'emplacement du fichier \u00e0 d\u00e9placer, <code>Documents<\/code> est le nom du dossier dans lequel on veut le d\u00e9placer.<\/p>\n<p>La commande <code>rm<\/code> :<\/p>\n<pre><code class=\"language-bash\">rm -i Documents\/machin.txt<\/code><\/pre>\n<p>va supprimer (rm) le fichier machin.txt d\u00e9finitivement, en demandant confirmation (-i).<\/p>\n<p>Que sont ces commandes, <code>ls<\/code>, <code>mv<\/code>, etc&nbsp;?<\/p>\n<p>Des applications.<\/p>\n<p><code>ls<\/code> est une application, tout comme <code>mv<\/code>, <code>rm<\/code>, <code>more<\/code> et les milliers d'autres install\u00e9es dans votre syst\u00e8me.<\/p>\n<p>Les syst\u00e8mes Unix ont une myriade de toutes petites applications qui font chacune une seule chose mais la font <a href=\"https:\/\/web.archive.org\/web\/20140408082841\/http:\/\/www.faqs.org\/docs\/artu\/ch01s06.html\">extr\u00eamement bien<\/a>.<\/p>\n<p>C'est toute la philosophie Unix&nbsp;: on manipule de minuscules programmes qui deviennent, de fait, des commandes presque 'naturelles' quand on les combine.<\/p>\n<p>Les plus utilis\u00e9es de toutes sont certainement <code>ls<\/code> et <code>cd<\/code>&nbsp;: ce dernier permet de se d\u00e9placer dans les fichiers et dossiers (cd = Change Directory).<\/p>\n<p>Saurez-vous deviner le r\u00e9sultat de cette s\u00e9quence d'instructions&nbsp;?<\/p>\n<pre><code class=\"language-bash\">cd ~\/Desktop\nls\nmv lolcat01.jpg ~\/Pictures\nrm lolcat*<\/code><\/pre>\n<ol>\n<li>j'entre dans le dossier Desktop<\/li>\n<li>je liste les fichiers<\/li>\n<li>je d\u00e9place le fichier lolcat01.jpg vers le dossier Pictures de mon compte utilisateur<\/li>\n<li>je supprime du Desktop tous les fichiers commen\u00e7ant par &quot;lolcat&quot;<\/li>\n<\/ol>\n<p><strong>Au fait, tr\u00e8s important: on ne tape pas toutes les lettres !<\/strong><\/p>\n<p>Vous rigolez ou quoi&nbsp;?<\/p>\n<p>Vous vous imaginez qu'on va s'amuser \u00e0 taper<\/p>\n<pre><code class=\"language-text\">\/Users\/myname\/Desktop\/ohlepitindenomdefichierpaspossible.txt<\/code><\/pre>\n<p>en entier \u00e0 chaque fois&nbsp;?&nbsp;\ud83d\ude42<\/p>\n<p>Non, vous allez utiliser la touche TAB comme tout le monde (la fl\u00e8che coll\u00e9e au taquet, \u00e0 gauche du clavier, g\u00e9n\u00e9ralement au-dessous de la touche '@' sur un Mac), ce qui vous permettra <strong>d'auto-compl\u00e9ter<\/strong> les commandes et les cibles.<\/p>\n<p>Si je reprends mon exemple pr\u00e9c\u00e9dent, voil\u00e0 ce que j'ai en fait tap\u00e9&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cd ~\/De (TAB)\nls\nmv l (TAB) 01 (TAB) ~\/P (TAB)\nrm l (TAB) *<\/code><\/pre>\n<p>Alors oui, \u00e7a a l'air \u00e9trange d\u00e9crit comme \u00e7a, mais \u00e0 faire \u00e7a va super vite et on se rend compte imm\u00e9diatement que la logique est imparable.<\/p>\n<p>Petite astuce bien utile&nbsp;: les fl\u00e8ches HAUT et BAS du clavier vous d\u00e9placent dans l'historique des commandes que vous avez d\u00e9j\u00e0 tap\u00e9.<\/p>\n<p>Par exemple vous avez fait un ls bien compliqu\u00e9 deux commandes plus t\u00f4t et vous voulez recommencer, vous faites HAUT HAUT.<\/p>\n<p>R\u00e9sum\u00e9 des commandes que nous avons vues :<\/p>\n<p><code>cd<\/code> = change directory (changer de dossier)<\/p>\n<p><code>ls<\/code> = list (lister les fichiers)<\/p>\n<p><code>cp<\/code> = copy (copier)<\/p>\n<p><code>mv<\/code> = move (d\u00e9placer)<\/p>\n<p><code>rm<\/code> = remove (supprimer)<\/p>\n<p><code>more<\/code> = lire page par page<\/p>\n<h2>Applications<\/h2>\n<p>Nous venons d'\u00e9voquer des applications, certes, mais ce sont des utilitaires syst\u00e8me&nbsp;: copier ou d\u00e9placer des fichiers, etc.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/lynx-aya.jpg\" alt=\"\" \/><\/p>\n<p>Cependant il existe \u00e9videmment toutes les autres gammes logicielles en ligne de commande, du navigateur web (h\u00e9 oui!) au client email, du cloneur de disques durs \u00e0 la calculatrice scientifique, tableur, jeu, serveur, etc.<\/p>\n<p>La seule diff\u00e9rence avec les logiciels que vous utilisez couramment, tels que Microsoft Word ou Apple Mail, est que ces derniers affichent leur texte dans des fen\u00eatres graphiques, alors que les applications en ligne de commande n'affichent que du texte.<\/p>\n<h2>Le Terminal<\/h2>\n<p>Aujourd'hui le Terminal n'est plus une machine physique connect\u00e9e \u00e0 une salle des machines, mais une application connect\u00e9e \u00e0 un ordinateur.<\/p>\n<p>Bien s\u00fbr, gr\u00e2ce au r\u00e9seau, ce Terminal logiciel peut aussi (c'est sa nature de Terminal) se connecter \u00e0 une autre machine, ce qui vous permet de la diriger comme si vous \u00e9tiez sur son clavier. Ce n'est pas de la 't\u00e9l\u00e9commande'&nbsp;: c'est plut\u00f4t de la prise en main \u00e0 distance.<\/p>\n<p>En effet, quand vous \u00eates dans le Terminal et que vous vous connectez \u00e0 un serveur, et vous vous retrouvez avec le prompt de ce serveur; <em>vous n'\u00eates plus dans votre machine mais dans la machine distante<\/em>. C'est tr\u00e8s diff\u00e9rent de 'je commande une machine \u00e0 partir de la mienne', qui est aussi tr\u00e8s pratique, \u00e9videmment.<\/p>\n<p>Bref, passons l\u00e0-dessus, \u00e7a m\u00e9riterait des livres entiers.<\/p>\n<p>Il existe de nombreuses applications de Terminal, et avec Mac OS X est livr\u00e9e une version qui se d\u00e9fend bien, qui se trouve dans le dossier Applications\/Utilitaires et qui se nomme simplement &quot;Terminal.app&quot;.<\/p>\n<p>J'utilise pour ma part <a href=\"http:\/\/www.iterm2.com\/\">iTerm2<\/a>, mais c'est un d\u00e9tail cosm\u00e9tique et pratique, et ne change rien au contenu de ce tutorial.<\/p>\n<p>Certaines applications de Terminal vous permettent d'utiliser la souris dans une certaine mesure, par exemple pour s\u00e9lectionner du texte ou cliquer sur un lien, mais n'oubliez pas que par design un Terminal n'est qu'une machine idiote destin\u00e9e \u00e0 envoyer et recevoir du texte.<\/p>\n<h1>Tutoriel<\/h1>\n<h2>D\u00e9placement et affichage<\/h2>\n<p>Nous avons \u00e9voqu\u00e9 ce sujet dans l'introduction mais nous allons maintenant entrer un peu dans le d\u00e9tail.<\/p>\n<p>Vous vous retrouvez donc devant le Terminal, qui vous affiche quelque chose comme&nbsp;:<\/p>\n<pre><code class=\"language-text\">Last login: Wed Apr 9 14:21:28 on ttys010\nyourlogin@yourmachine:~ $<\/code><\/pre>\n<blockquote>\n<p>Et l\u00e0 vous vous dites, tiens je mangerais bien des chips, moi.<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/robocop.jpg\" alt=\"\" \/><\/p>\n<p>Bon, supposons que vous soyez encore en train de lire ceci...<\/p>\n<p>Traditionnellement, \u00e0 l'ouverture, un Terminal vous affiche l'heure de votre derni\u00e8re connection et l'identifiant du Terminal utilis\u00e9.<\/p>\n<p>Ensuite, optionnellement, &quot;You've got mail&quot; ou similaire (ce qui est faux la plupart du temps car mal configur\u00e9).<\/p>\n<p>Puis finalement le <em>prompt<\/em>, en fran\u00e7ais &quot;l'invite&quot;, c'est-\u00e0-dire l'emplacement ou vous pouvez commencer \u00e0 taper votre texte: juste apr\u00e8s le signe &quot;$&quot; qui suit les indications d'identit\u00e9 (votre login et le nom de votre machine).<\/p>\n<p>Bien s\u00fbr, selon le syst\u00e8me utilis\u00e9 et selon le Terminal utilis\u00e9, cela peut grandement diff\u00e9rer&nbsp;: cependant le principe restera le m\u00eame, vous tapez votre texte \u00e0 l'invite, au prompt, et nulle part ailleurs dans le Terminal.<\/p>\n<p>Vous allez certainement d'ailleurs rapidement remarquer que l'\u00e9cran du Terminal est plut\u00f4t passif&nbsp;: le seul endroit interactif est la ligne de commande, le reste de l'\u00e9cran ne sert qu'\u00e0 l'affichage.<\/p>\n<p>Chaque nouvelle ligne ajout\u00e9e en bas de l'\u00e9cran fait remonter les lignes pr\u00e9c\u00e9dentes d'un cran.<\/p>\n<p>L'\u00e9cran se d\u00e9place par sauts de ligne.<\/p>\n<h3>Le tilde<\/h3>\n<p>Vous avez remarqu\u00e9 ce petit caract\u00e8re dans le prompt, le tilde&nbsp;? Celui-ci&nbsp;:<\/p>\n<p><code>~<\/code><\/p>\n<p><strong>Ce symbole repr\u00e9sente le dossier utilisateur, souvent d\u00e9nomm\u00e9 &quot;home&quot;, la maison.<\/strong><\/p>\n<p>C'est traditionnellement l\u00e0 que s'ouvre un Terminal.<\/p>\n<p>Au lieu d'afficher ou de taper par exemple &quot;\/Users\/yourname\/&quot;, on fait <code>~<\/code>, \u00e7a va plus vite. (sur un clavier Mac, on tape un tilde en faisant ALT+n puis espace).<\/p>\n<p>H\u00e9 bien le Terminal affiche, par d\u00e9faut, le r\u00e9pertoire courant, et donc il nous affiche ici un tilde.<\/p>\n<p>Exemple&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cd ~<\/code><\/pre>\n<p>vous ram\u00e8ne dans votre dossier utilisateur, d'o\u00f9 que vous soyez.<\/p>\n<p>Autre exemple&nbsp;: vous \u00eates dans le Bureau mais vous voulez entrer dans le dossier T\u00e9l\u00e9chargements qui est dans votre dossier utilisateur.<\/p>\n<p>Vous faites&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cd ~\/Downloads<\/code><\/pre>\n<p>(en effet les noms de dossiers de Mac OS X sont traduits par l'interface graphique mais pas par l'interface texte !).<\/p>\n<p>Lister les fichiers du dossier Home&nbsp;?<\/p>\n<pre><code class=\"language-bash\">ls ~<\/code><\/pre>\n<p>Du dossier T\u00e9l\u00e9chargements&nbsp;:<\/p>\n<pre><code class=\"language-bash\">ls ~\/Downloads<\/code><\/pre>\n<p>C'est la m\u00eame chose que de faire <code>ls \/Users\/yourname\/Downloads<\/code>.<\/p>\n<h3>Les deux points<\/h3>\n<p>Voici une autre astuce&nbsp;: le symbole <code>..<\/code> (deux points), qui repr\u00e9sente le <em>dossier sup\u00e9rieur<\/em>.<\/p>\n<p>Par exemple, vous \u00eates dans le dossier Downloads (on va rester hors traductions maintenant) et vous voulez &quot;remonter&quot; dans le dossier Home. Vous faites&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cd ..<\/code><\/pre>\n<p>Vous voulez remonter de deux niveaux&nbsp;?<\/p>\n<pre><code class=\"language-bash\">cd ..\/..<\/code><\/pre>\n<p>Le concept est simple mais puissant, vous vous en rendrez compte rapidement.<\/p>\n<h3>Le point<\/h3>\n<p>Associ\u00e9 \u00e0 ce principe, nous avons le point: <code>.<\/code> qui repr\u00e9sente le <em>dossier courant<\/em>.<\/p>\n<p>Ce point signifie litt\u00e9ralement 'ici'.<\/p>\n<p>Par exemple si vous \u00eates dans le dossier Pictures et que vous voulez d\u00e9placer ici (dans le dossier Pictures, donc) une image qui est sur le bureau, vous faites&nbsp;:<\/p>\n<pre><code class=\"language-bash\">mv Desktop\/lolcat.jpg .<\/code><\/pre>\n<h3>Le slash<\/h3>\n<p>Je ne l'ai pas expliqu\u00e9 mais vous l'aviez d\u00e9j\u00e0 compris&nbsp;: le caract\u00e8re <code>\/<\/code>, le slash, repr\u00e9sente une s\u00e9paration dans le chemin des fichiers et dossiers.<\/p>\n<p>Par exemple, pour repr\u00e9senter le fichier machin.txt qui est dans Downloads qui est dans Home, on \u00e9crit<\/p>\n<p><code>~\/Downloads\/machin.txt<\/code><\/p>\n<p>On peut bien \u00e9videmment lister n'importe quel dossier \u00e0 partir de n'importe o\u00f9&nbsp;:<\/p>\n<pre><code class=\"language-bash\">ls \/Applications<\/code><\/pre>\n<p>vous donnera toujours le contenu du dossier Applications qui se trouve \u00e0 la racine du disque, o\u00f9 que vous soyez vous-m\u00eame, <em>parce que vous avez mis le caract\u00e8re <code>\/<\/code> devant<\/em>.<\/p>\n<p><strong>Le caract\u00e8re <code>\/<\/code> en d\u00e9but de chemin signifie &quot;racine du disque dur&quot;.<\/strong><\/p>\n<p>Quand on ne pr\u00e9cise pas ce caract\u00e8re en d\u00e9but de chemin, le Terminal assume que nous partons du dossier actuel et utilisera un chemin relatif.<\/p>\n<p>Si je tape <code>ls Applications<\/code> cela signifie que je demande \u00e0 voir les fichiers du dossier Applications qui se trouve dans le dossier courant ! S'il n'y en a pas =&gt; erreur.<\/p>\n<h3>Exemples<\/h3>\n<pre><code class=\"language-bash\">cd \/\nls ~\/Downloads\ncd ~\nls Downloads\nls ..\/..\ncd ..<\/code><\/pre>\n<p>Explication ligne par ligne&nbsp;:<\/p>\n<ul>\n<li>j'entre \u00e0 la racine du disque<\/li>\n<li>je liste les fichiers qui sont dans Home \/ Downloads<\/li>\n<li>j'entre dans Home<\/li>\n<li>je liste encore le contenu de ce m\u00eame dossier Downloads<\/li>\n<li>je liste le dossier qui se trouve deux niveaux au-dessus de moi, c'est-\u00e0-dire le dossier \/User<\/li>\n<li>je 'remonte' dans Home (c'est-\u00e0-dire \/User\/yourname)<\/li>\n<\/ul>\n<p>Note&nbsp;: je rappelle, une derni\u00e8re fois, que je ne tape jamais toutes les commandes en entier !<\/p>\n<p>La touche TAB est votre grande amie, ne l'oubliez pas.<\/p>\n<p>Elle sait compl\u00e9ter les commandes mais aussi <em>et surtout<\/em> elle sait compl\u00e9ter les chemins.<\/p>\n<p>Petite astuce&nbsp;: si vous \u00eates perdus, tapez <code>pwd<\/code> (qui signifie Print Working Directory) et le Terminal vous affichera le chemin du dossier courant en entier.<\/p>\n<p>Maintenant que nous avons vu les bases, d\u00e9couvrons quelques commandes suppl\u00e9mentaires.<\/p>\n<h2>Les essentiels<\/h2>\n<p>Les commandes essentielles sont tous simplement des \u00e9quivalences \u00e0 ce que vous avez l'habitude de faire avec la souris.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/chat.jpg\" alt=\"\" \/><\/p>\n<p>Par exemple, d\u00e9placer un fichier t\u00e9l\u00e9charg\u00e9 vers le dossier documents.<\/p>\n<p>Vous ouvrez le Finder, double-cliquez sur Downloads (ou d\u00e9pliez sa fl\u00e8che en cliquant), cliquez sur le fichier (par exemple <em>truc.txt<\/em>), maintenez cliqu\u00e9, appuyez sur la touche CMD et maintenez appuy\u00e9, d\u00e9placez la souris jusqu'au dossier cible, rel\u00e2chez le clic puis la touche.<\/p>\n<p>Ce n'est pas exactement trivial, en fait... et bonne chance si vous avez la tremblote. \ud83d\ude09<\/p>\n<p>Avec le Terminal&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cd ~\nmv Dow (TAB) tr (TAB) Doc (TAB)<\/code><\/pre>\n<p>Voil\u00e0, environ trois secondes. \ud83d\ude42<\/p>\n<p>Mais alors, la souris c'est quand m\u00eame plus pratique pour d\u00e9placer plusieurs fichiers \u00e0 la fois, non&nbsp;?<\/p>\n<p>Pas toujours. Et souvent pas du tout, en fait.<\/p>\n<p>Voyons quelques exemples de ce qui fait la force de l'interface textuelle.<\/p>\n<h3>L'englobeur<\/h3>\n<p>Vous pouvez utiliser le symbole <code>*<\/code>, que j'appelle l'englobeur, en fran\u00e7ais l'ast\u00e9risque (l'\u00e9toile), pour repr\u00e9senter <em>tous<\/em> les objets d'un ensemble.<\/p>\n<p>Par exemple, tous les fichiers dans Downloads qui commencent par les lettres &quot;Tru&quot;&nbsp;:<\/p>\n<pre><code class=\"language-bash\">ls Downloads\/Tru*<\/code><\/pre>\n<p>Ici, par exemple, \u00e7a va englober les fichiers Truc.txt, Trucmachin.jpg, Truduc.doc, etc.<\/p>\n<p>Ou encore, une copie de toutes vos photos de vacances que vous avez balanc\u00e9es sur le Bureau, vers une cl\u00e9 USB&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cp Desktop\/*.jpg \/Volumes\/USB\/<\/code><\/pre>\n<p>On demande \u00e0 <code>cp<\/code> de copier tous les fichiers .jpg du Bureau vers le volume nomm\u00e9 USB qui se trouve dans \/Volumes, comme tous les volumes externes dans Mac OS X.<\/p>\n<p>D\u00e9placer mes notes du mois de janvier vers un dossier de backup&nbsp;:<\/p>\n<pre><code class=\"language-bash\">mv Documents\/notes-2014-01-*.txt \/Volumes\/HDDExterne\/Backups\/notes\/<\/code><\/pre>\n<p>Ici \u00e7a va englober notes-2014-01-01.txt, notes-2014-01-02.txt, notes-2014-01-03.txt, etc.<\/p>\n<p>Supprimer, sans demander confirmation, tous les fichiers zip t\u00e9l\u00e9charg\u00e9s&nbsp;:<\/p>\n<pre><code class=\"language-bash\">rm -f Downloads\/*.zip<\/code><\/pre>\n<p>On demande d'effacer (rm) sans demander de confirmation (-f) tous les fichiers zip (*.zip) du dossier Downloads.<\/p>\n<blockquote>\n<p>Attention ! Pas de corbeille ni de 'undo' ici ! On fait gaffe \u00e0 ce qu'on tape...&nbsp;\ud83d\ude42<\/p>\n<\/blockquote>\n<h3>Le redirecteur<\/h3>\n<p>Attention, fonction puissante mais qui exige attention et rigueur&nbsp;: on peut rediriger le <em>contenu<\/em> d'un fichier vers un autre fichier avec le symbole<\/p>\n<p><code>&gt;<\/code><\/p>\n<p>Mais apprenons d'abord une nouvelle commande&nbsp;: <code>echo<\/code>.<\/p>\n<p>La commande <em>echo<\/em> permet d'\u00e9crire du texte.<\/p>\n<pre><code class=\"language-bash\">echo &quot;Wesh gro ou bien&quot;<\/code><\/pre>\n<p>Notre exemple va simplement \u00e9crire &quot;Wesh gro ou bien&quot; \u00e0 l'\u00e9cran.<\/p>\n<p>En effet, quand on ne pr\u00e9cise pas \u00e0 une commande \u00e0 quel endroit elle doit montrer sa sortie, elle le fait \u00e0 l'\u00e9cran.<\/p>\n<p>Mais on peut lui demander de sortir son texte non pas \u00e0 l'\u00e9cran, mais dans un fichier, par exemple.<\/p>\n<p>L'application , elle, ne sait pas si elle affiche \u00e0 l'\u00e9cran ou ailleurs : elle se contente de balancer ses donn\u00e9es en sortie, et c'est vous qui d\u00e9cidez de quelle sera cette sortie.<\/p>\n<p>Par exemple, vous voulez cr\u00e9er un fichier texte nomm\u00e9 &quot;wesh.txt&quot; dans votre dossier Documents pour y sauvegarder cette merveille de la litt\u00e9rature fran\u00e7aise&nbsp;?<\/p>\n<pre><code class=\"language-bash\">echo &quot;Wesh gro ou bien&quot; &gt; ~\/Documents\/wesh.txt<\/code><\/pre>\n<p>Si le fichier n'existe pas, il sera cr\u00e9\u00e9.<\/p>\n<p>Nous avons utilis\u00e9 la m\u00eame commande <code>echo &quot;Wesh gro ou bien&quot;<\/code> que pr\u00e9c\u00e9demment, mais nous avons cette fois pr\u00e9cis\u00e9 une route de sortie <em>vers un fichier<\/em>.<\/p>\n<p>Notre phrase sera ici &quot;affich\u00e9e&quot; dans un fichier, et donc... enregistr\u00e9e.<\/p>\n<p>Le redirecteur fonctionne aussi avec les fichiers au lieu de phrases.<\/p>\n<p>Nous aurons besoin de la commande <code>cat<\/code> qui ne miaule pas mais qui lit le contenu de tout fichier&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cat ~\/Documents\/wesh.txt\ncat ~\/Documents\/wesh.txt &gt; ~\/Desktop\/yo.txt<\/code><\/pre>\n<p>Dans la premi\u00e8re ligne, <code>cat<\/code> lit le contenu de wesh.txt et l'affiche \u00e0 l'\u00e9cran.<\/p>\n<p>Dans la deuxi\u00e8me ligne, <code>cat<\/code> lit le contenu de wesh.txt, et le redirige non pas vers l'\u00e9cran mais vers yo.txt sur le Bureau, cr\u00e9ant de ce fait une copie de wesh.txt avec un nouveau nom \u00e0 ce nouvel emplacement.<\/p>\n<p>Attention, si yo.txt existe d\u00e9j\u00e0, il sera remplac\u00e9 !<\/p>\n<p>Dernier point tant que nous sommes l\u00e0&nbsp;: le double redirecteur, <code>&gt;&gt;<\/code>, permet <em>d'ajouter<\/em> du texte <em>\u00e0 la fin<\/em> d'un fichier.<\/p>\n<pre><code class=\"language-bash\">echo &quot;Premi\u00e8re ligne&quot; &gt; pens\u00e9es.txt\necho &quot;La suite, ...&quot; &gt;&gt; pens\u00e9es.txt\necho &quot;Sign\u00e9 le zinkou&quot; &gt;&gt; pens\u00e9es.txt<\/code><\/pre>\n<h3>Le pipe<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/magritte_pipe.jpg\" alt=\"\" \/><\/p>\n<p>Le pipe, en fran\u00e7ais... le pipe. Ca signifie &quot;le tuyau&quot;, et c'est le symbole<\/p>\n<p><code>|<\/code><\/p>\n<p>Cette barre verticale s'obtient par combinaison de touches. Sur Mac, c'est SHIFT+ALT+L.<\/p>\n<p>Ce symbole de tuyau... symbolise un tuyau, qui envoie le <em>r\u00e9sultat<\/em> d'une commande, sa sortie, vers <em>une autre commande<\/em>.<\/p>\n<p>De plus, on peut encha\u00eener autant de commandes et de pipes que l'on veut. Voici un exemple concret.<\/p>\n<p>Disons que vous avez un fichier qui contient plusieurs mots, et que vous voulez les trier par ordre alphab\u00e9tique.<\/p>\n<p>Il existe la commande <code>sort<\/code> qui permet de faire du tri, et cette commande accepte des donn\u00e9es en entr\u00e9e.<\/p>\n<p>Je vais donc <em>lire<\/em> le contenu de mon fichier texte avec <code>cat<\/code> et rediriger la sortie de &quot;cat&quot; vers <code>sort<\/code> comme ceci&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cat mots.txt | sort<\/code><\/pre>\n<p><em>&quot;cat&quot; lit le contenu et l'envoie \u00e0 &quot;sort&quot; qui le trie puis l'affiche.<\/em><\/p>\n<p>La liste tri\u00e9e est longue, et vous voulez la lire page par page&nbsp;? Envoyez la \u00e0 <code>more<\/code>&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cat mots.txt | sort | more<\/code><\/pre>\n<p>Et si vous vouliez, ensuite, compter les mots qu'il y a dans le fichier&nbsp;? Il existe la commande <code>wc<\/code> (qui signifie Word Count et non pas, euh, bon arr\u00eatez de ricaner b\u00eatement l\u00e0) qui permet de compter les mots (ou lignes, ou caract\u00e8res, etc).<\/p>\n<pre><code class=\"language-bash\">cat mots.txt | wc -w\ncat mots.txt | wc -l\ncat mots.txt | wc -m<\/code><\/pre>\n<p>La premi\u00e8re ligne compte les mots, la deuxi\u00e8me compte les lignes, la troisi\u00e8me compte les caract\u00e8res. En effet, la commande <code>wc<\/code> comme de nombreuses commandes, accepte un certain nombre d'options, parmi elles <code>-l<\/code>, <code>-w<\/code> et <code>-m<\/code>.<\/p>\n<h3>Exemples<\/h3>\n<p><em>Voici quelques exemples de commandes pour clore cette section.<\/em><\/p>\n<p>Lister tous les fichiers d'un dossier, tri\u00e9s, dans un fichier texte :<\/p>\n<pre><code class=\"language-bash\">ls -A ~\/Pictures\/*.jpg | sort &gt; ~\/Desktop\/liste.txt<\/code><\/pre>\n<p>Je vous encourage \u00e0 faire <code>man sort<\/code> pour d\u00e9couvir les options de <code>sort<\/code>.<\/p>\n<p><em>Astuce<\/em>: la commande <code>man<\/code> (pour Manual) permet d'obtenir le manuel d'utilisation d'une commande (s'il existe \u00e0 ce format).<\/p>\n<p>Lire et afficher le contenu d'un fichier sur Internet :<\/p>\n<pre><code class=\"language-bash\">curl https:\/\/aya.io\/blog\/files\/salut.txt<\/code><\/pre>\n<p><code>curl<\/code> est une commande qui permet de r\u00e9cup\u00e9rer des donn\u00e9es \u00e0 partir d'un serveur. On peut lire toutes sortes de fichiers, \u00e9galement uploader, aussi par exemple t\u00e9l\u00e9charger des sites web entiers, etc.<\/p>\n<p>Ici, j'ai simplement mis une phrase dans le fichier 'salut.txt' puis partag\u00e9 ce fichier avec Dropbox, dont vous lisez le contenu sans 't\u00e9l\u00e9charger' le fichier.<\/p>\n<p>Savez-vous que vous avez un dictionnaire de mots install\u00e9 dans Mac OS X et Linux&nbsp;?<\/p>\n<pre><code class=\"language-bash\">cat \/usr\/share\/dict\/words | grep &#039;text&#039;<\/code><\/pre>\n<p>D'abord nous lisons le contenu de ce fichier de mots avec <code>cat<\/code>, puis nous utilisons une nouvelle commande, <code>grep<\/code>, qui permet de s\u00e9lectionner des \u00e9l\u00e9ments dans des donn\u00e9es.<\/p>\n<p>Ici, la commande <code>cat \/usr\/share\/dict\/words<\/code> envoie <em>tous<\/em> les mots du fichier de mots \u00e0 la commande <code>grep<\/code> qui s\u00e9lectionn les mots contenant la s\u00e9quence de lettres 'text'.<\/p>\n<p>Quand votre Terminal est plein de sorties texte illisibles, il est temps de passer un coup de chiffon&nbsp;:<\/p>\n<pre><code class=\"language-bash\">clear<\/code><\/pre>\n<p>Ensuite on peut se d\u00e9tendre devant un bon vieux film...<\/p>\n<pre><code class=\"language-bash\">telnet towel.blinkenlights.nl<\/code><\/pre>\n<h3>Sudo<\/h3>\n<p>Tout ce que nous avons effectu\u00e9 jusqu'\u00e0 pr\u00e9sent, nous l'avons fait avec nos <em>droits d'utilisateur<\/em>.<\/p>\n<p>Comme vous le savez probablement d\u00e9j\u00e0, pour installer une application au niveau syst\u00e8me ou pour modifier des param\u00e8tres cl\u00e9s du syst\u00e8me, il faut avoir les <em>droits d'administrateur<\/em>.<\/p>\n<p>Dans la ligne de commande, pour obtenir les droits d'administrateur <em>le temps d'une commande<\/em>, il faut pr\u00e9c\u00e9der la commande de <code>sudo<\/code> (qui signifie Super User Do).<\/p>\n<pre><code class=\"language-bash\">sudo rm -f ~\/.Trash\/*.jpg<\/code><\/pre>\n<p>Ici, nous demandons de supprimer (rm) tous les fichiers JPG (*.jpg) de la Corbeille (le dossier <code>.Trash<\/code> qui se trouve dans Home) sans demander de confirmation (-f).<\/p>\n<p>Comme nous le faisons avec les droits d'admin (sudo), cela permet par exemple de supprimer des fichiers que votre <em>corbeille utilisateur<\/em> ne pouvait pas supprimer (ce qui arrive parfois \u00e0 cause de conflits de droits d'acc\u00e8s).<\/p>\n<p>Le Terminal vous demandera alors votre mot de passe syst\u00e8me, que vous taperez \u00e0 l'aveugle (pas de petites \u00e9toiles pour signifier les caract\u00e8res).<\/p>\n<p>Est-il utile de pr\u00e9ciser qu'il faut faire <em>tr\u00e8s<\/em> attention \u00e0 ce que l'on tape quand on est en sudo&nbsp;? \ud83d\ude09<\/p>\n<h3>Warning<\/h3>\n<p>Par ailleurs, \u00e7a ne fait pas de mal, un petit warning&nbsp;: attention aux espaces !<\/p>\n<p>Par exemple, regardez cette commande qui supprime tous les fichiers du dossier <code>temp<\/code> qui est \u00e0 la racine du disque&nbsp;:<\/p>\n<p><code>rm \/temp\/*<\/code><\/p>\n<p>On demande \u00e0 <code>rm<\/code> d'effacer tous les fichiers et dossiers du dossier \/temp.<\/p>\n<p>Si vous faites un faute de frappe et que vous mettez un espace entre le slash et le nom du dossier, comme ceci&nbsp;:<\/p>\n<blockquote>\n<p>Attention, ne tapez pas cette commande !<\/p>\n<\/blockquote>\n<p><code>rm \/ temp\/*<\/code><\/p>\n<p>vous demandez alors deux choses \u00e0 'rm' :<\/p>\n<ul>\n<li>\n<p>la premi\u00e8re est d'effacer tous les dossiers et fichiers <em>de la racine du disque<\/em> (\/), <strong>donc de tout le disque<\/strong>&nbsp;!<\/p>\n<\/li>\n<li>\n<p>la seconde est d'effacer le contenu du dossier temp.<\/p>\n<\/li>\n<\/ul>\n<p><strong>Mais quand 'rm' essaiera d'effacer le dossier temp, celui-ci n'existera plus, pas plus que... le contenu de votre disque dur.<\/strong><\/p>\n<blockquote>\n<p>M\u00e9fiance !!!<\/p>\n<\/blockquote>\n<p><iframe loading=\"lazy\" title=\"Nooooooooooooo - The SuperCut\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/Ek2IZlyAwwM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<h2>Allons plus loin<\/h2>\n<p>Et essayons d'utiliser de v\u00e9ritables situations.<\/p>\n<p>Nous allons \u00eatre oblig\u00e9s de voir de nouvelles commandes&nbsp;: vous n'\u00eates pas oblig\u00e9s de les apprendre !<\/p>\n<p>L'essentiel est de saisir le fonctionnement global, les conventions, et ensuite vous apprendrez tranquillement par la pratique et la documentation.<\/p>\n<h3>Alias<\/h3>\n<p>Vous utilisez maintenant la touche TAB en permanence pour compl\u00e9ter les noms de fichiers et les commandes, c'est bien.<\/p>\n<p>Il existe aussi, pour continuer \u00e0 se faciliter la vie, une fonction nomm\u00e9e &quot;alias&quot; qui permet de cr\u00e9er des nouveaux noms pour des commandes existantes.<\/p>\n<p>Par exemple, vous vous rendez compte que vous tapez souvent <code>ls -l ~\/Documents<\/code>.<\/p>\n<p>Vous pouvez cr\u00e9er un alias comme ceci&nbsp;:<\/p>\n<pre><code class=\"language-bash\">alias ldoc=&#039;ls -l ~\/Documents&#039;<\/code><\/pre>\n<p>Et si maintenant vous tapez <code>ldoc<\/code>, le Terminal ex\u00e9cutera <code>ls -l ~\/Documents<\/code> \u00e0 la place.<\/p>\n<p>J'ai choisi le nom &quot;ldoc&quot; totalement arbitrairement, vous pouvez mettre ce que vous voulez, \u00e0 condition que \u00e7a ne remplace pas une commande existante...<\/p>\n<p>Car si vous faites <code>alias ls=&#039;ls -l&#039;<\/code>, \u00e7a ex\u00e9cutera <code>ls -l<\/code> \u00e0 chaque fois que vous demanderez un <code>ls<\/code> normal ! Ca peut \u00eatre tr\u00e8s utile, mais attention \u00e0 ce que vous faites.<\/p>\n<p>Maintenant, probl\u00e8me&nbsp;: cet alias ne vit que pendant cette session du Terminal. Si vous le quittez puis le relancez, l'alias aura disparu.<\/p>\n<p>Il existe donc un fichier de configuration du Terminal, qui est lu \u00e0 chaque fois que le Terminal est ouvert ou relanc\u00e9.<\/p>\n<p>Ce fichier a une particularit\u00e9&nbsp;: c'est un fichier &quot;invisible&quot;. Il n'appara\u00eet pas lors d'un <code>ls<\/code> normal, pas plus que dans les fen\u00eatres du Finder.<\/p>\n<p>Parce que le nom de ce fichier <em>commence par un point<\/em>.<\/p>\n<p>Et c'est une convention pour dire que le fichier ne doit pas \u00eatre normalement visible. Pour le voir avec &quot;ls&quot; il faut ajouter l'option &quot;-a&quot;&nbsp;: <code>ls -a<\/code>, et dans le Finder c'est une option \u00e0 cocher.<\/p>\n<p>Ce fichier se nomme <code>.bashrc<\/code> et se trouve \u00e0 la racine de votre dossier Home (maison, le dossier utilisateur).<\/p>\n<p>Pourquoi ce nom&nbsp;? Parce que &quot;bash&quot; est en fait le nom de l'application dans laquelle vous \u00eates quand vous utilisez le Terminal.&nbsp;\ud83d\ude42<\/p>\n<p>Et oui, le Terminal n'est.. qu'un Terminal, il ne sait rien faire. Il affiche du texte, connect\u00e9 \u00e0 une machine, localement ou en r\u00e9seau.<\/p>\n<p>Dans ce Terminal se lance automatiquement un &quot;shell&quot;, c'est-\u00e0-dire une application qui accepte des lignes de commande et les envoie au syst\u00e8me, qui lui retourne des r\u00e9sultats, que le shell affiche dans le Terminal.<\/p>\n<p>Il y a plusieurs shells, mais le plus r\u00e9pandu (et install\u00e9 par d\u00e9faut dans Mac OS X) se nomme &quot;bash&quot;.<\/p>\n<p>Revenons-donc \u00e0 notre fichier <code>.bashrc<\/code> et allons regarder son contenu&nbsp;:<\/p>\n<pre><code class=\"language-bash\">cat ~\/.bashrc<\/code><\/pre>\n<p>Il y a d\u00e9j\u00e0 au moins une ligne remplie automatiquement par la configuration du syst\u00e8me, et qui d\u00e9clare le chemin (path) vers les ex\u00e9cutables du syst\u00e8me (si ce fichier est vide, aucune importance, le chemin est probablement dans un des autres fichiers de configuration genre .bash_profile).<\/p>\n<p>Pour faire perdurer un alias, il suffit de le rajouter dans le fichier .bashrc (ou .bash_profile, donc).<\/p>\n<p>Ca peut se faire en ouvrant le fichier dans un \u00e9diteur, mais aussi en ajoutant notre alias \u00e0 la fin du fichier comme nous savons d\u00e9sormais le faire&nbsp;:<\/p>\n<pre><code class=\"language-bash\">echo &quot;alias ldoc=&#039;ls -l ~\/Documents&#039;&quot; &gt;&gt; ~\/.bashrc<\/code><\/pre>\n<p>Il faut ensuite &quot;rafra\u00eechir&quot; le Terminal, soit en le quittant\/relan\u00e7ant, soit en faisant&nbsp;:<\/p>\n<pre><code class=\"language-bash\">source ~\/.bashrc<\/code><\/pre>\n<p>Voil\u00e0, d\u00e9sormais quand vous taperez <code>ldoc<\/code> c'est la s\u00e9quence compl\u00e8te qui sera ex\u00e9cut\u00e9e \u00e0 la place.<\/p>\n<p>Voici un extrait de mes alias, juste pour l'exemple&nbsp;:<\/p>\n<pre><code class=\"language-bash\">alias ls=&#039;ls -GhFa&#039;\nalias src=&#039;source ~\/.bashrc&#039;\nalias ip=&quot;curl icanhazip.com&quot;\nalias cpu=&#039;top -o CPU&#039;<\/code><\/pre>\n<p>On peut mettre d'autres choses que des alias dans le fichier bashrc, mais ce sera pour un autre article...<\/p>\n<h3>Scripts<\/h3>\n<p>Jusqu'\u00e0 pr\u00e9sent nous avons ex\u00e9cut\u00e9 une seule commande \u00e0 la fois, en la tapant dans la ligne de commande ; ou plusieurs commandes \u00e0 la fois, en les encha\u00eenant gr\u00e2ce au pipe.<\/p>\n<p>Mais la puissance de la &quot;ligne de commande&quot; est d\u00e9multipli\u00e9e d\u00e8s que l'on fait des <em>scripts<\/em>, c'est-\u00e0-dire des fichiers ex\u00e9cutables qui contiennent plusieurs lignes de commande.<\/p>\n<p>Le syst\u00e8me lance le script, qui s'ex\u00e9cute ligne apr\u00e8s ligne, dans l'ordre.<\/p>\n<p>Par exemple, cr\u00e9ons un mini script, sans quitter l'invite&nbsp;:<\/p>\n<pre><code class=\"language-bash\">mkdir ~\/scripts\necho &quot;ls ~\/Pictures\/* &gt; ~\/Desktop\/liste_images.txt&quot; &gt; ~\/scripts\/listim.sh\nchmod u+x ~\/scripts\/listim.sh<\/code><\/pre>\n<ol>\n<li>Je cr\u00e9e un dossier &quot;scripts&quot; dans Home gr\u00e2ce \u00e0 la commande <code>mkdir<\/code><\/li>\n<li>J'\u00e9cris la commande <code>ls ~\/Pictures\/* &gt; ~\/Desktop\/liste_images.txt<\/code> dans un fichier nomm\u00e9 listim.sh dans le dossier scripts<\/li>\n<li>Je rends ce fichier ex\u00e9cutable<\/li>\n<\/ol>\n<p>Dor\u00e9navant, \u00e0 chaque fois que j'ex\u00e9cuterai ce fichier (comme si c'\u00e9tait une app), le syst\u00e8me ex\u00e9cutera son contenu&nbsp;: dans notre exemple, un nouveau fichier texte contenant le listing du dossier Pictures sera cr\u00e9\u00e9 sur le bureau.<\/p>\n<p>L'extension <code>.sh<\/code> d\u00e9signe un fichier de script &quot;bash&quot;.<\/p>\n<p>La commande syst\u00e8me <code>chmod<\/code> permet de donner certains droits \u00e0 certains fichiers&nbsp;: ici nous donnons les droits &quot;ex\u00e9cutable&quot; (<code>u+x<\/code>) \u00e0 notre fichier de script.<\/p>\n<p>Comment ex\u00e9cuter ce fichier&nbsp;? En l'appellant simplement. Par exemple si je suis sur le bureau ou n'importe o\u00f9 ailleurs&nbsp;:<\/p>\n<pre><code class=\"language-bash\">sh ~\/scripts\/listim.sh<\/code><\/pre>\n<p>Si le fichier est ex\u00e9cutable, pas besoin de <code>sh<\/code> :<\/p>\n<pre><code class=\"language-bash\">~\/scripts\/listim.sh<\/code><\/pre>\n<p>Si j'\u00e9tais dans le dossier scripts, j'aurais pu le lancer en pr\u00e9cisant seulement le symbole du dossier local&nbsp;:<\/p>\n<pre><code class=\"language-bash\">.\/listim.sh<\/code><\/pre>\n<p>Mais la solution recommand\u00e9e est d'ajouter, dans votre fichier <code>.bashrc<\/code>, une entr\u00e9e dans le chemin qui pointe vers votre dossier de scripts.<\/p>\n<p>Par exemple, dans mon cas, j'ai simplement rajout\u00e9 le chemin du dossier scripts \u00e0 la fin de la ligne existante, apr\u00e8s les deux points (<code>:<\/code>), ce qui donne au final&nbsp;:<\/p>\n<pre><code class=\"language-bash\">export PATH=\/usr\/local\/sbin:\/Users\/ericdke\/.rvm\/gems\/ruby-2.1.0\/bin:\/usr\/local\/git\/bin:\/usr\/bin:\/usr\/sbin:\/bin:\/sbin:\/Users\/ericdke\/scripts<\/code><\/pre>\n<p>En faisant \u00e7a, plus besoin de sp\u00e9cifier le chemin de l'\u00e9x\u00e9cutable pour le lancer.<\/p>\n<p>En effet, si l'on ne pr\u00e9cise pas le chemin, alors le syst\u00e8me va chercher dans les dossiers connus, y compris dans celui que vous venez de rajouter.<\/p>\n<p>On peut donc d\u00e9sormais faire tout simplement&nbsp;:<\/p>\n<pre><code class=\"language-bash\">listi (TAB)<\/code><\/pre>\n<p>\u00e0 partir de n'importe o\u00f9, et le contenu du script sera ex\u00e9cut\u00e9.<\/p>\n<p>Vous vous doutez bien qu'il y aurait beaucoup \u00e0 dire sur le sujet, mais ce serait sortir du contexte de ce tuto.<\/p>\n<h2>Terminaux<\/h2>\n<h3>Terminal.app<\/h3>\n<p>Le Terminal fourni avec Mac OS X est basique mais suffit \u00e0 la plupart des usages.<\/p>\n<p>N\u00e9anmoins il est pr\u00e9f\u00e9rable de se l'approprier un peu, donc nous allons voir quelques r\u00e9glages interessants.<\/p>\n<p>Vous avez d\u00e9j\u00e0 vu que vous pouvez lancer des nouvelles fen\u00eatres qui ont des th\u00e8mes diff\u00e9rents, c'est dans le menu.<\/p>\n<p>Mais vous pouvez aussi personnaliser ces th\u00e8mes, notamment la police de caract\u00e8res et les couleurs.<\/p>\n<p>Pour la fonte c'est une question de go\u00fbt, certes, mais aussi de lisibilit\u00e9.<\/p>\n<p>Je vous conseille 'Inconsolata', 'Menlo', 'Ubuntu', 'Open Sans' et 'Source Sans'.<\/p>\n<p>Perso, j'adore Menlo en minuscules, magnifique, tr\u00e8s naturel. Dommage que les lettres accentu\u00e9es du fran\u00e7ais soient un peu \u00e9tranges.<\/p>\n<p>Ubuntu est tr\u00e8s ronde et agr\u00e9able, et la plus 'neutre' est Source Sans.<\/p>\n<p>Elles sont toutes disponibles soit dans votre syst\u00e8me soit sur le web.<\/p>\n<p>Pour les couleurs, faites votre sauce... Je vous conseille ceci dit d'\u00e9viter les contrastes trop forts, genre blanc pur sur noir pur, \u00e7a fatigue les yeux.<\/p>\n<p>Vous pouvez aussi mettre une image de fond dans le Terminal (bravo pour la lisibilit\u00e9...) ou le rendre semi-transparent pour se la jouer hollywood.<\/p>\n<p>Dernier conseil, ne d\u00e9passez pas les 80 colonnes en largeur, \u00e7a rend \u00e9galement les phrases plus difficiles \u00e0 lire si elles s'affichent sur une ligne trop longue. L'oeil pr\u00e9f\u00e8re les retours \u00e0 la ligne.<\/p>\n<h3>iTerm2<\/h3>\n<p>iTerm2 est un terminal gratuit tr\u00e8s puissant et configurable.<\/p>\n<p>Puissant, \u00e7a veut dire qu'il a plein d'options et de fonctions qui le rendent bien plus pratique et agr\u00e9able \u00e0 utiliser que la plupart de ses concurrents.<\/p>\n<p>Par exemple, vous avez la possibilit\u00e9 d'ouvrir plusieurs tabs par fen\u00eatre, plusieurs panneaux par tab, de d\u00e9tacher les tabs vers des fen\u00eatres, etc.<\/p>\n<p>Il y a \u00e9galement un formidable 'Hotkey panel', un mini-terminal dont l'apparition est d\u00e9clench\u00e9e par l'appui d'une combinaison de touches.<\/p>\n<p>Ce mini-terminal 'slide' du haut ou bas de l'\u00e9cran&nbsp;: on tape la commande, et hop il dispara\u00eet. Bien pratique.<\/p>\n<h4>Config<\/h4>\n<p>Au lieu de lister les options \u00e0 modifier, ce qui serait fastidieux, je vous donne en exemple des screenshot de ma config.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/iterm2-prefs-01.png\" alt=\"\" \/>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/iterm2-prefs-02.png\" alt=\"\" \/>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/iterm2-prefs-03.png\" alt=\"\" \/>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/iterm2-prefs-04.png\" alt=\"\" \/>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/iterm2-prefs-05.png\" alt=\"\" \/>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/iterm2-prefs-06.png\" alt=\"\" \/>  <\/p>\n<p>Fichiers \u00e0 importer : <a href=\"https:\/\/github.com\/mbadolato\/iTerm2-Color-Schemes\">couleurs, dont Solarized<\/a>, et <a href=\"http:\/\/brettterpstra.com\/2011\/08\/12\/option-arrow-navigation-in-iterm2\/\">raccourcis clavier<\/a>.<\/p>\n<h4>Th\u00e8mes<\/h4>\n<p>iTerm2 peut enregistrer, et donc importer, ses r\u00e9glages&nbsp;: layout, couleurs, options, etc.<\/p>\n<p>Il existe sur le web de nombreux sites qui proposent de magnifiques th\u00e8mes.<\/p>\n<p>J'ai pour ma part une pr\u00e9f\u00e9rence pour Solarized Dark, qui en plus d'avoir une gamme de couleurs absolument superbe, propose un contraste \u00e9quilibr\u00e9 et reposant.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/ayadn-checkins.png\" alt=\"ayadn solarized\" \/><\/p>\n<h3>A l'ancienne<\/h3>\n<p>Vous voulez retrouver les conditions de travail des hackers de la grande \u00e9poque&nbsp;?<\/p>\n<p>Essayez <a href=\"https:\/\/github.com\/Swordfish90\/cool-retro-term\">Cool Retro Term...<\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>J'ai essay\u00e9 de rester simple dans mes explications tout en n'omettant pas les \u00e9l\u00e9ments importants, pourtant probablement d\u00e9routants au premier abord, j'en suis bien conscient.<\/p>\n<p>Nous n'avons fait que survoler le sujet, mais je crois que nous en avons vu assez pour que, m\u00eame si vous n'en reteniez qu'une partie, vous pouviez d\u00e9j\u00e0 vous sentir plus \u00e0 l'aise.<\/p>\n<p>Il n'y pas de v\u00e9ritable synth\u00e8se \u00e0 proposer ici&nbsp;: je vous invite au contraire \u00e0 consid\u00e9rer ce tutoriel comme une premi\u00e8re \u00e9tape vers un univers qui, s'il para\u00eet aride au d\u00e9but, se r\u00e9v\u00e8le rapidement magique.<\/p>\n<p>En fait, je vous laisse appr\u00e9cier, en guise de conclusion, les commandes inscrites sur le t-shirt de la dame...<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/aya.io\/blog\/images\/morebeer.jpg\" alt=\"\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voici un dossier, accompagn\u00e9 d&rsquo;un tutoriel, sur le Terminal et ses usages. Je m&rsquo;adresse particuli\u00e8rement aux &lsquo;d\u00e9butants&rsquo; qui n&rsquo;osent pas l&rsquo;utiliser ou qui ne savent pas trop \u00e0 quoi \u00e7a sert. Cette introduction \u00e0 l&rsquo;univers de la &quot;ligne de commande&quot; vous r\u00e9v\u00e8lera, je l&rsquo;esp\u00e8re, comment envisager l&rsquo;usage de la &quot;console&quot; de mani\u00e8re ludique et efficace.&hellip; <a class=\"more-link\" href=\"https:\/\/www.aya.io\/blog\/terminal-console-cli\/\">Poursuivre la lecture <span class=\"screen-reader-text\">Le Terminal et ses usages<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":78,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,9,29,11],"tags":[],"class_list":["post-77","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-culture","category-dossier","category-pinned","category-term","entry"],"_links":{"self":[{"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/posts\/77","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/comments?post=77"}],"version-history":[{"count":9,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/posts\/77\/revisions"}],"predecessor-version":[{"id":173,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/posts\/77\/revisions\/173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/media\/78"}],"wp:attachment":[{"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/media?parent=77"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/categories?post=77"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aya.io\/blog\/wp-json\/wp\/v2\/tags?post=77"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}