Ce cours est visible gratuitement en ligne.

J'ai tout compris !
Personnalisez votre shell

Personnalisez votre shell

Mis à jour le mardi 19 novembre 2013
  • Facile

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.

Configurez la variable $PS1

Modification 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).

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 ~

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

Créez vos aliases

Comme expliqué en théorie, les aliases sont très pratiques pour nous simplifier la vie. On va voir au travers d'un exemple comment s'en servir.

Supposons que nous voulions afficher le contenu d'un dossier, y compris les fichiers cachés, avec un format des noms de fichiers long et rendu facilement compréhensible pour les humains. Nous ferons

ls -alh /dossier

ce qui peut ennuyer certains s'ils doivent l'exécuter plusieurs fois. Créons donc un alias, que nous appellerons arbitrairement (appelez-le comme vous voulez) llf (pour list long format).

Allons-y, créons notre alias. Cela se fait via la commande suivante

alias llf='ls -alh'

Désormais, lorsque nous saisirons llf à l'invite de commande, bash comprendra qu'il s'agit d'un alias qui pointe vers ls -alh.

Vous en avez l'habitude maintenant, vous savez bien que nos aliases ne sont valables que pour la session courante. Il suffit de les ajouter au .bashrc avec votre éditeur de texte favori.

Donnez vie à votre terminal avec Cowsay

Enfin, nous allons voir un petit programme qui permet d'ajouter un peu de gaieté à votre shell, il s'agit de cowsay.

Il s'agit d'un petit utilitaire qui permet de générer des dessins en ASCII que vous pourrez utiliser pour décorer votre invite de commande. À la base, le programme est censé faire uniquement "des vaches qui parlent", d'où le nom cowsay, mais on peut créer soi-même ses images !

Vous pourriez ainsi décider d'opter pour une image de Bart Simpson, comme M@teo21 dans son tutoriel reprenez le contrôle avec GNU/Linux.

Image utilisateur

Bart sur un serveur du site du zéro

Nous allons commencer par installer le programme. Lancez donc votre gestionnaire de paquetages avec pour cible "cowsay". On fera par exemple, sous Debian

# aptitude install cowsay

Maintenant, il va falloir vous rendre dans votre fichier .bashrc, comme d'habitude. Il faut l'éditer pour choisir la créature qui apparaîtra et ce qu'elle dira. Pour cela, rajoutez une ligne du type

echo $texteAReciter | cowsay -f /usr/share/cowsay/file.cow

où vous remplacerez $texteAReciter par ce que vous souhaitez que la créature dise et file.cow par le fichier correspondant à la créature voulue.

Si vous voulez ajoutez vos créations personnelles ou des créations trouvées sur l'Internet, c'est possible, il suffit de les placer dans le répertoire /usr/share/cowsay.

Voila, le cours est désormais terminé.

Vous devriez avoir un shell qui affiche toutes les informations que vous aurez jugé utile d'afficher et un peu plus personnalisé que ce qu'on vous propose par défaut.

En espérant que ce tutoriel vous ait plu/aidé, je suis disponible par MP pour toute remarque/question !

déroulement d'un cours

  • 1

    Dès aujourd'hui, vous avez accès au contenu pédagogique et aux exercices du cours.

  • 2

    Vous progressez dans le cours semaine par semaine. Une partie du cours correspond à une semaine de travail de votre part.

  • !

    Les exercices doivent être réalisés en une semaine. La date limite vous sera annoncée au démarrage de chaque nouvelle partie. Les exercices sont indispensables pour obtenir votre certification.

  • 3

    À l'issue du cours, vous recevrez vos résultats par e-mail. Votre certificat de réussite vous sera également transmis si vous êtes membre Premium et que vous avez au moins 70% de bonnes réponses.

L'auteur

Exemple de certificat de réussite
Exemple de certificat de réussite