.bashrc et .bash_profile, quelle différence ?

I. Présentation

Vous vous êtes sûrement déjà posé la question, dans chaque "/home/" utilisateur, plusieurs fichiers cachés (commençant par un ".") peuvent être trouvés. Parmi eux, ".bashrc" et ".bash_profile". Vous avez peut être eu vent que ces deux scripts sont exécutés au démarrage d'une session, mais quelle est leur différence réelle ? C'est ce que nous allons voir dans cet article.

D'une manière général, deux contextes d'exécution sont à imaginer quand on indique qu'ils sont exécutés au démarrage de chaque session :

  • Le démarrage d'une nouvelle session sur une machine
  • Le démarrage d'un nouveau shell

Vous vous en doutez, ces deux contextes d'exécution ont quelque chose à voir dans la différence entre .bash_profile et .bashrc

II. .bash_profile et .bashrc

Le fichier .bash_profile est exécuté pour les login shell, c'est à dire là où vous saisissez votre login et mot de passe. C'est par exemple le cas lors de votre première connexion au démarrage de votre machine ou lors d'une connexion SSH.

Un login shell est le premier processus qui est exécuté avec l'ID de votre utilisateur. Dans ce contexte, c'est le fichier bash_profile qui est exécuté.

Le fichier .bashrc est exécuté lors du lancement d'un non-login shell, par exemple lorsque vous ouvrez un nouveau shell dans votre machine alors que vous y êtes déjà authentifié, typiquement un nouveau terminal sur votre bureau.

Vous l'aurez compris, le fichier .bashrc est exécuté bien plus souvent que le fichier .bash_profile

Un contexte ou cette différence est utile pour que vous vous rendiez compte de l'importance de ce détail. Si vous souhaitez que votre machine affiche un message à chaque fois que vous vous connectez (en local ou à distance), vous utiliserez le fichier .bash_profile. Si vous indiquz votre message dans le fichier .bashrc, ce message apparaîtra à chaque fois que vous démarrerez un nouveau shell, et ce n'est pas ce qui est souhaité.

Il est important de signaler que, par défaut, le fichier .bash_profile contient l'instruction suivante :

 if [ -f ~/.bashrc ]; then
    source ~/.bashrc
 fi

Cela signifie que, lors du lancement du .bash_profile après l'ouverte d'un login-shell, le fichier .bashrc est exécuté. Attention car l'inverse n'est pas vrai, sinon tout cela n'aurait aucun intérêt.

Également si vous utilisez un script de lancement (type /etc/init.d/script start) pour lancer un service sous le nom d'un autre utilisateur, alors le login et le mot de passe de cet utilisateur n'est pas demandé, il s'agit donc d'un non-login shell et seul le .bashrc est exécuté. Même chose pour les changement d'utilisateur de type "su username" depuis root 😉

Cette différence est importante. Dernièrement, j'ai eu à mettre à jour une variable d'environnement d'un service utilisant les fichiers .bashrc et .bash_profile pour la variabilisation de la version de l'instance utilisée. Lorsque le compte de service était utilisé pour le lancement d'un service, seul le fichier .bashrc était exécuté, la modification du .bash_profile n'aurait rien donné et j'aurai pu passer plusieurs heures sur ce problème 🙂

J'espère que cette petite info vous aura été utile, n'hésitez pas à partager vos astuces à ce sujet dans les commentaires.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.

Nombre de posts de cet auteur : 526.Voir tous les posts

One thought on “.bashrc et .bash_profile, quelle différence ?

  • Bonjour,
    Merci pour cette information bien détaillée et qui m’a servi.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.