Personnalisez votre shell

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Bonjour à tous !

Après avoir vu comment rendre un peu de gaieté et de couleur à votre shell bash dans le tutoriel Personnalisez votre shell en couleur ! avec utb_diablo, nous allons aujourd'hui voir quelques petites astuces permettant de pousser la personnalisation un peu plus loin : ce tutoriel se veut complémentaire avec celui de utb_diablo.

On va ainsi voir comment ajouter des informations additionnelles dans l'invite de commande, comment créer un alias ou encore comment modifier la valeur de la variable d'environnement $PATH.

La théorie

Comme toujours, on va un peu parler de théorie avant de passer à la pratique, histoire de bien comprendre ce qu'on fait. Nous allons donc voir les outils qui s'offrent à nous afin de personnaliser notre shell. Notons bien que chaque utilisateur de votre système pourra personnaliser son shell comme il l'entend.

Le shell

Un shell est un logiciel fournissant une interface pour utilisateur, le plus souvent en ligne de commande. Il est donc un interpréteur de commandes et offre la possibilité d'interagir avec la machine.

On interagit donc avec le système au moyen du shell, au travers de la console ou bien d'un terminal graphique qui est une émulation de cette dernière.

Historiquement, le premier shell utilisé sous les systèmes d'exploitation de type UNIX était le bourne shell (sh) qui a évolué en d'autres versions plus performantes. Parmi les shells utilisés aujourd'hui, on rencontre

  • Almquist SHell (ash)

  • Bourne-Again SHell (bash)

  • C SHell (csh)

  • Korn SHell (ksh)

  • Tenex C SHell (tcsh)

  • etc.

Dans notre cas, nous utiliserons l'interpréteur de commandes bash, il est en effet le plus utilisé sur les systèmes GNU/Linux, il est rapide, simple et puissant.

Configuration de bash

Le paramétrage de notre shell bash se passe au niveau de son fichier de configuration : .bashrc.

Le point indique que le fichier est masqué, il suffit de lancer ls -a pour qu'il révèle sa présence. Ce fichier, qui se situe dans votre répertoire personnel, est lu et exécuté par bash à chaque fois que ce dernier est lancé de façon interactive, i.e. via l'ouverture d'un terminal. Si vous vous loggez en console, c'est le fichier .bash_profile, également situé dans votre répertoire personnel, qui sera lu et exécuté.

Voici un aperçu d'un .bashrc très simple

# Check for an interactive session [ -z "$PS1" ] && return alias ls='ls --color=auto' PS1='[\u@\h \W]\$ '

Il y a deux choses importantes à noter dans ce fichier, la ligne parlant d'alias ainsi que celle commençant par PS1.

Les aliases

Les aliases (pluriel de alias) sont des façons alternatives de dénommer quelqu'un ou quelque chose, au sens où tout le monde l'entend. Il n'est pas rare d'entendre l'expression AKA (pour "also known as" qui signifie "également connu comme [étant]") dans le langage courant.

Dans notre cas, c'est exactement la même chose. On fera référence à une commande en employant en pseudonyme, en quelque sorte.
Vous pouvez vous demander l'utilité d'une telle méthode, nous allons la voir immédiatement au travers d'un exemple.

Supposons que vous ayez à exécuter une commande quelques fois (si ce n'est qu'une fois, effectivement ça ne sert à rien); comme par exemple vous connecter à un serveur distant en utilisant le protocole SSH. Vous devez naturellement exécuter la commande basique suivante

ssh utilisateur@serveurdistant

Même si ce n'est pas très contraignant, certaines commandes sont parfois beaucoup plus longues. On aimerait bien pouvoir les exécuter de façon plus rapide. C'est là que les aliases interviennent. On peut faire référence à cette commande à l'aide d'un alias, qu'on saisira en lieu et place de la commande initiale.

Ainsi, si on choisit l'alias "server" pour la commande ci-dessus, on lancera

server

et bash comprendra qu'on fait référence à la commande de connexion à notre serveur et l'exécutera, en conséquence. C'est assez pratique si on veut avoir à éviter de taper chaque fois une commande.

La variable d'environnement $PS1

La variable d'environnement $PS1 est affichée à chaque ligne de commande tapée, il s'agit du prompt de base :

[renaud@renaud-laptop ~]$

Typiquement, cette variable donne des informations importantes, elle affiche : [utilisateur@machine répertoireCourant]privilège dans ce cas-ci.

Nous verrons en partie pratique comment modifier la valeur de la variable $PS1, avec les conséquences que ça aura sur notre invite de commande. Nous pourrons notamment afficher la date, notre position actuelle dans l'arborescence (plus uniquement le répertoire courant) ainsi qu'une foule d'autres informations.

La variable d'environnement $PATH

Cette variable recense les répertoires où sont situés les exécutables que le shell lance lorsque vous lui adressez une commande. Ainsi, si vous voulez lister le contenu d'un répertoire, vous lancerez basiquement la commande ls.

Bash ira consulter le contenu de la variable $PATH et ira chercher l'exécutable dans un des répertoires listés. Bien souvent, les commandes basiques sont situées dans /bin, /usr/bin, /usr/sbin : c'est le cas de la commande ls. Ces répertoires doivent donc être renseignés dans votre variable $PATH.

Notons que bash ira chercher la commande dans les répertoires dans l'ordre précisé.

Ainsi, si vous voulez exécuter la commande dhcpcd qui se situe au sein du répertoire /sbin et que votre variable $PATH contient, dans l'ordre, les répertoires /bin, /usr/bin, /sbin, bash tentera d'abord d'aller chercher l'exécutable associé dans /bin. Voyant qu'il ne s'y trouve pas, il passera au répertoire cible suivant : /usr/bin. Vu qu'il n'y est pas non plus, il finira par scanner le répertoire /sbin, au sein duquel il trouvera l'exécutable approprié.

Cette variable nous évite d'avoir à préciser systématiquement le chemin absolu entier vers la commande. On peut donc lancer ls à la place de /bin/ls, même si ça aurait fonctionné aussi bien.

Avant toute manipulation, pensez à sauvegarder le contenu de votre fichier .bashrc, on ne sait jamais.

Configurez la variable $PS1Modification de la variable $PS1

On va ici s'intéresser à la variable $PS1 qui définit la façon dont le shell s'adresse à nous.
Observons donc le contenu de ma variable $PS1 et décortiquons-le.

[renaud@renaud-laptop ~]$ echo $PS1 [\u@\h \W]\$

Comme vous le voyez, les crochets sont affichés en tant que tel, mais ce qui est précédé d'un backslash "\" est interprété. Ce n'est pas plus compliqué que ça.
Voici un petit tableau qui recense quelques valeurs à passer ainsi que leurs conséquences

Combinaison

Effet

\u

nom de l'utilisateur courant

\h

nom de la machine

\W

nom du répertoire courant

\$

privilège de l'utilisateur courant

\d

date courante (au format lun. janv. 1)

\w

chemin complet du répertoire de travail

\A

heure format 24h sans les secondes

\t

heure format 24h avec les secondes

\@

heure format 12h sans les secondes

\T

heure format 12h avec les secondes

\D{%d-%m-%Y %H:%M:%S%z}

Date et heure dans un format personnalisable

\j

nombre de tâches en cours dans le terminal

\#

numéro de la commande dans l'historique

\v

version de bash

\n

nouvelle ligne

Tableau recensant les diverses valeurs et les effets associés

Comme vous le voyez, il y a toute une panoplie de valeurs qui peuvent être passées à la variable $PS1. À vous de trouver ce qui vous convient le mieux. Vu la multitude de combinaisons différentes à réaliser, vous avez le choix !

En plus de ça, on peut même passer du texte pour que notre shell nous dise ce qu'on a envie. Il suffit pour cela d'inscrire le texte entre guillemets (simples ou doubles, ça ne change rien).

Une ambiguïté doit être levée. Si vous remarquez bien, ma variable $PS1 contient les caractères \u@ et le tableau \u et \@. Il faut prendre garde au fait que le @ dans ma variable n'est pas interprété, il est affiché comme tel, pour signifier "chez". Si j'avais fait précéder le @ d'un backslash, il aurait été interprété et aurait eu la conséquence détaillée dans le tableau ci-dessus.

On va voir 2 exemples pour un peu voir comment ça fonctionne, ensuite on verra comment les appliquer en pratique.

Supposons que vous souhaitiez que votre shell vous dise bonjour, quelle heure il est et vous demande de lancer une commande, vous remplirez votre variable $PS1 comme ceci

'bonjour \u il est \t , lance une commande :'

qui produira le résultat suivant :

bonjour renaud il est 16:48:14 , lance une commande :

Si vous souhaitez plutôt que votre shell vous dise la date, l'heure et votre position actuelle dans l'arborescence des fichiers, vous remplirez votre variable avec ceci

'\u, nous sommes le \d, il est \t , et tu te situes en \w'

qui produira le résultat suivant

renaud, nous sommes le sam aoû 28, il est 16:53:59 , et tu te situes en ~

Notez bien que le tilde ~ signifie que je me situe dans mon répertoire personnel.

Comment modifier le contenu de la variable $PS1 ?

C'est très simple, si vous voulez modifier votre configuration, en choisissant un format Nom_d'utilisateur@Nom_de_la_machine heure>, alors vous ferez

export PS1="\u@\h \A> "

Ce changement est cependant temporaire, c'est-à-dire que quand vous relancerez bash, le contenu de .bashrc sera à nouveau lu et exécuté, rendant inutiles les modifications précédentes. Pour rendre les changements permanents, ouvrez votre fichier .bashrc avec votre éditeur préféré et repérez la ligne commençant par PS1=...

Ensuite, modifiez cette ligne de façon appropriée pour que vos changements soient pris en compte à l'avenir.

Configurez la variable $PATH

Nous allons maintenant nous attacher à modifier le contenu de cette fameuse variable !
Commençons par afficher ce qu'elle contient, via la commande

echo $PATH

Vous devriez voir apparaître les chemins absolus vers les répertoires listés dans la variable $PATH.
Nous l'avons vu, lorsque vous exécutez une commande, le shell va chercher les exécutables dans les dossiers listés dans leur ordre d'apparition. Que faire alors, si une commande n'est pas unique, ou si le shell renvoie l'erreur "command not found" ?

Nous l'avons vu, pour lancer une commande, on peut

  • l'appeler par son nom (ls)

  • l'appeler via son chemin absolu (/bin/ls)

  • l'appeler via son chemin relatif (../../bin/ls)

Plaçons nous dans le cas d'une commande multiple. Ça peut arriver, par exemple, si vous installez une version plus récente et que vous installez l'exécutable à un autre endroit que celui prévu initialement.
Dans ce cas, soit vous modifiez l'ordre des répertoires dans votre variable $PATH, soit vous entrez le chemin complet vers la commande.

Plaçons nous maintenant dans le cas d'un "command not found" en supposant que la syntaxe de la commande soit correcte. C'est alors que le répertoire contenant l'exécutable n'est pas renseigné.

Comment modifier le contenu de la variable $PATH ?

Si vous voulez ajouter le répertoire /home/foo/program en dernier, on fera

export PATH=$PATH:/home/foo/program

Si on veut l'ajouter en premier, on fera

export PATH=/home/foo/program/:$PATH

Notez que ces changements ne sont valables uniquement que pour la session en cours, lorsque vous relancerez bash, $PATH reprendra la valeur par défaut.

Pour y remédier, on va tout simplement modifier le contenu de notre .bashrc en utilisant les flux de redirection, qui permettront d'écrire dans le fichier. Si vous voulez ajouter /home/foo/program en dernier, de façon permanente, vous ferez

echo 'export PATH=$PATH:/home/foo/program' >> /home/user/.bashrc

Remarquez l'importance des deux chevrons fermant ">>" qui permettent d'ajouter le résultat...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Personnalisez votre shell

Prix sur demande