====== Généralités sur le "bash" ====== * [[/Article/|Les articles]] * [[/Contact/]] Le **bash** est un programme qui permet d'interpréter des commandes exécutables sur une machine **Linux**. Le **bash** peut être considéré comme un langage possédant un vocabulaire, une syntaxe et une grammaire permettant d'énoncer des listes d'instructions qui seront exécutées de façon séquentielles voire événementielles. * **__Le vocabulaire__** est composé de mots réservés tels que **ls**, **rm**, **mkdir**, etc. Ces mots réservés permettent d'effectuées des tâches précises dans le système. Un utilisateur peut également créer des données ou des fonctions en les nommant à l'aide de mots composés de lettres de l'alphabet. **bash** est inspiré de la langue anglaise et ne reconnaît pas les lettres accentuées, cependant il accepte également les chiffres (//mais pas en première position//) et le caractère souligné bas "**_**" ainsi que le point ".".Pour bash, une "**function**" est un ensemble de commandes (ou instructions) regroupées sous un nom et qui seront exécutées chaque fois que l'on y fera appel. En **bash**, par convention, tout identifiant d'une donnée ou de //function// commençant par un point sera comme un élément permettant de gérer le système et sera caché à l'utilisateur sauf s'il en fait la demande expresse. Cette convention permet ainsi à un utilisateur de ne pas être surcharger d'informations inutiles pour l'usage quotidien de ces données. * **__La syntaxe__** est l'ensemble des symboles tels que **$ ; [ ] { } ! * + -** / etc, qui permettent d'enchaîner des instructions, d'indiquer comment utiliser des données, appeler une **function** etc. * **__La grammaire__** est l'ensemble des règles que le "**bash**" impose pour le bon usage des mots ( //réservés ou non// ) et symboles afin d'assurer une cohérence et un bon déroulé des instructions souhaitées par un utilisateur. Appelé également Console, le Terminal est une application qui permet de passer des commandes **bash**. Généralement dans un environnement graphique Linux, la combinaison des touches [ ctrl ]+[ alt ]+[ T ] permet d'ouvrir un tel terminal et il es possible d'en ouvrir plusieurs en même temps, pour commencer un seul devrait suffire =). Il est bon de savoir avant de commencer à utiliser une console, que l'on peut la quitter en tapant la commande **exit** touche [ <- Entrèe ], ou en utilisant la combinaison des touches [ ctrl ]+[ D ]. Une utilisation d'un ordinateur peut produire des documents que sont des images, des textes, des feuilles de calculs et cætera. Tout document peut être sauvegardé dans un fichier afin de le retrouver à chaque fois qu'on le souhaite. Tout fichier porte un nom qui lui est propre et peut être rangé dans un dossier qui peut contenir d'autres fichiers voire d'autre dossiers (sous-dossiers). Un dossier comme un fichier porte un nom lui est propre.\\ Bien évidemment tous les éléments (fichiers,sous-dossiers) contenus dans un dossier portent des noms distincts afin de les différencier. Il faut imaginer qu'un système de fichiers est comme une armoire à étagères contenant des dossiers qui eux même contiennent des fichiers. En fait il faut considérer qu'armoire et étagères sont des dossiers et ainsi simplifier l'organisation de ces fichiers.\\ Le dossier général, ultime ("l'armoire") est appelé oralement dossier racine mais ne porte pas de nom écrit on le représente pas une barre oblique** / **. En Linux ce dossier racine** / **contient des dossiers contenant des fichiers programmes ou de configurations afin d'assurer le bon fonctionnement de la machine. Il existe nécessairement un dossier réservé aux utilisateurs de la machine qui se nomme **/home** où chaque utilisateur détiendra un dossier qui lui est réservé et personnel.\\ A chaque utilisateur d'un machine est associé un pseudonyme unique qui l'identifie au sein du système de fichiers et plus généralement des services délivrés par la machines. Si Jean Dupont a pour pseudonyme jean22 son dossier personnel sera **/home/jean22** de même pour Lucie Durant de pseudonyme lucie29 son dossier personnel sera **/home/lucie29**. Ainsi chaque utilisateur à son dossier personnel qui n'est accessible que par lui même et l'administrateur de la machine.\\ Remarque :\\ Dans l'exemple ci dessus le dossier **jean22** se "situe" dans le dossier **home** qui lui même se site dans le dossier** / **. L'écriture **/home/jean22** est le nom précis, étendu, absolu du dossier alors que **jean22** dans notre exemple est un nom relatif à **/home**.\\ Imaginons que Lucie à une correspondance avec Jean et que cette correspondance est sous le forme de fichiers situés dans son dossier personnel et se nomme lui aussi **jean22**, le nom étendu permettant de connaître sa position absolue est donc **/home/lucie29/jean22**. Cette façon "étendue" de nommer des dossiers ou fichiers permet de lever toute ambiguïté sur le nom d'éléments qui porteraient apparemment le même nom. Il arrive dans la vie courante que des rues portent le même nom mais se situent dans des villes différentes aussi un adressage complet (nom prénom,rue,ville,code postal, etc) permet à un postier de distribuer correctement le courrier... \\ Cette façon de nommer de manière étendue les dossiers et fichiers peut s'avérer fastidieuse, lourde. Pour faciliter les usages il est heureusement possible de raisonner de façon relative encore faut-il avoir une référence ! Le principe retenu est qu'à tout moment un utilisateur "//se trouve//" toujours quelque part dans le système de fichier et sans précision de sa part, par défaut, il se situe dans son dossier personnel. Il est donc positionné en **/home///pseudonyme//**. \\ Si Jean Dupont à un document sauvegardé dans un fichier nommé **journal.txt** le nom précis de ce document est **/home///jean22///journal.txt**\\ Lorsque Jean ouvre un terminal, comme tout utilisateur dans ce cas, il "se situe" dans le dossier **/home/jean22** et si il souhaite afficher le contenu de ce fichier il peut utiliser la commande **cat**. Deux possibilités d'adressage s'offre à lui : * relatif : **cat** journal.txt * absolu : **cat** /home/jean22/journal.txt Comme Jean est positionné en **/home/jean22/** par défaut lors de l'ouverture de la console, ces deux écritures sont équivalentes. Si Lucie Durant veut afficher le contenu du fichier contact.txt concernant Jean et situé dans le dossier jean22, elle ouvrira un console et elle aussi aura deux possibilités pour afficher ce contenu : * relatif : **cat** jean22/contact.txt * absolu : **cat** /home/luce29/jean22/contact.txt Bien-sur l'adressage relatif est le plus souvent utilisé mais il faut toujours avoir en tête que Linux "raisonne" toujours en absolu et chaque fois que l'on lui donne un chemin relatif il en déduit l'adressage absolu à partir de la "position courante" de l'utilisateur dans le système de ficher. Dans une console, pour se "balader" dans le système de fichier on utilise la commande **cd** (change directory <=> changer de dossier) suivi d'un chemin relatif ou absolu. Si aucun chemin n'est précisé le changement s'effectue vers le dossier personnel. La position courante peut être affichée en utilisant la commande **pwd** (print working directory) Précédemment Lucie aurait pu utiliser 2 instructions pour afficher le contenu du fichier contact.txt concernant Jean. Dans un premier temps changer de dossier pour se rendre dans le dossier **jean22** puis d'afficher le contenu de **contact.txt** * **cd** jean22 * **cat** contact.txt