Exile on Keyboard St. - Blog sur Linux et Debian

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 17 mai 2015

Retrouvez les modifications faites dans vos fichiers de configuration sous Linux

On est tous amenés à modifier les fichiers de configuration de bash sour Linux.

Seulement voilà au bout de quelques temps et après beaucoup de changements comment savoir quelles sont les portions du fichier que l'on a changé ?

Les deux fichiers de configuration de bash, .profile et .bashrc sont installés sur le système par le package du même nom. La version initiale de ces fichiers, le "squelette", se trouve dans le répertoire /etc/skel:

ls -a /etc/skel/
.  ..  .bash_logout  .bashrc  .profile

Par conséquent, pour connaitre les modifications faites par exemple dans .profile il suffit de faire:

diff /etc/skel/.profile .profile 

Ce qui peut donner:

18a19,21
> JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
> export JAVA_HOME
> 

Le fait que les fichiers squelette se trouvent dans /ets/skel est connu. Mais comment faire pour trouver à quel package Debian appartient un fichier ?

Il suffit pour cela d'utiliser la commande apt-file avec en premier argument le mot clé search comme ceci:

apt-file search .bashrc
adduser: /usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
adduser: /usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc
base-files: /usr/share/base-files/dot.bashrc
bash: /etc/bash.bashrc
bash: /etc/skel/.bashrc
drush: /usr/share/doc/drush/examples/example.bashrc
iselect: /usr/share/doc/iselect/examples/chdir/dot.bashrc
iselect: /usr/share/doc/iselect/examples/ilogin/dot.bashrc
qiime: /usr/lib/qiime/shell/.bashrc
sysprofile: /usr/share/doc/sysprofile/examples/etc/bash.bashrc

On retrouve bien le fichier /etc/skel/.bashrc installé par le paquet bash.

Le fichier .bashrc de l'utilisateur root se trouve ici: /usr/share/base-files/dot.bashrc

lundi 11 mai 2015

Un Terminal Linux avec un titre plus lisible

Par défaut sous Linux, le titre des terminaux a l'aspect suivant:

Default-Terminal.png

On a d'abord le nom de la machine précédé de l'utilisateur et ensuite le chemin complet dans lequel on se trouve.

Or l'information intéressante ici est bien le chemin et non le nom de la machine. Comme on peut le voir sur l'image suivante, si l'on a plusieurs terminaux d'ouverts on ne pourra pas les distinguer les uns des autres puisque dans la barre des tâches tout ce que je vois c'est debian@debian-testing à chaque fois.

Terminal-Detail.png

Le titre du terminal sous Linux, tout comme l'aspect du prompt, se configure avec la variable PS1 du shell, plus précisément de bash.

Cette variable est configurée dans le fichier .bashrc. La portion de code qui nous intéresse est la suivante:

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

On voit le \u@\h qui affiche debian@debian-testing et \w qui affiche le répertoire courant.

Pour rendre le titre de notre terminal plus lisible, on peut par exemple afficher le répertoire courant en premier et restreindre celui-ci au seul nom du dernier niveau, ce qui donne:

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\W on \u@\h\a\]$PS1"

On utilise \W au lieu de \w pour ne pas avoir le chemin complet.

On voit maintenant que le deuxième terminal a un titre plus lisible et le retrouver dans la barre des tâches sera plus facile.

Terminal-Detail2.png

Pour personnaliser encore d'avantage le titre du terminal ou l'aspect du prompt sous Linux, on pourra consulter la documentation de bash ou aller sur le site bashrcgenerator qui permet de tester et simuler les modifications faites à la variable PS1.

samedi 8 mars 2014

Quels scripts d'initialisation utiliser sous Debian: .bash_profile ou .bashrc ?

Quand on définit des alias ou qu'on modifie le PATH sous Linux, la question de savoir dans quels scripts d'initialisation du Shell on le fait se pose souvent.

Faut t-il définir les alias dans le fichier .bash_profile de l'utilisateur ou dans le fichier .bashrc ?

Avant de répondre à cette question, il faut savoir qu'il y a deux types de Shell: les Shell de connexion (ou de login) et les autres.

Le Shell de connexion est celui qui est invoqué lorsqu'on se connecte sur la console:

  • lors de la connexion physique à une machine dépourvue d'environnement graphique,
  • ou en utilisant les raccourcis Ctrl-Alt F1, Ctrl-Alt F2 ...,
  • ou lors d'une connexion à une machine distante via ssh

et aussi si on utilise la commande bash --login.

Tous les autres Shells lançés par un Shell de connexion n'en sont donc pas. Les Anglais parlent de "non-login Shell".

Donc pour revenir aux scripts d'initialisation du Shell du répertoire courant de l'utilisateur:

  • .bash_profile est le script d'initialisation des Shells de login,
  • .bashrc est le script d'initialisation des autres Shell,

Selon l'usage des alias que l'on veut faire, on les définira dans un fichier ou dans un autre.

Mais un alias définit dans .bash_profile ne sera pas visible par un Shell lancé depuis l'environnement graphique puisque le Shell utilisé dans ce cas n'est pas un Shell de login.

Par contre sous Debian les définitions d'alias faites dans .bashrc seront utilisables non seulement dans un "non-login Shell" puisqu'ils sont définis dans le script d'initialisation de ceux-cis mais aussi par les Shells de login puisque sous Debian généralement .bashrc est appelé par .bash_profile comme suit:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Par conséquent, la façon la plus simple de définir des alias, le PATH ou de faire d'autres réglages sous Debian consiste à le faire dans le fichier .bashrc. Sur d'autres distributions Linux, cela reste évidemment vrai tant que l'on source .bashrc depuis .bash_profile.

Enfin, il faut savoir que si le fichier .bash_profile n'existe pas alors c'est le fichier .profile qui sera recherché.

page 2 de 2 -