A la lecture de it-connect.fr ou de cet article de linuxize.com, on comprend que quand bash est lancé en tant "qu'interactive login shell" lors d'une ouverture de session, quand on saisit un login/mot de passe. C'est le cas quand on ouvre une session ssh par exemple.
Bash regarde alors dans l'ordre :
~/.bash_profile est utilisé pour les commandes qui ne doivent être jouées qu'une fois, pour modifier le path par exemple ou pour afficher un message de bienvenue.
~/.bashrc est lancé en tant que non-login shell interractif. Il est exécuté à chaque fois que l'on lance un shell. On y place les alias, fonctions ou personnalisations de l'historique.
~/.bash_profile lance lui même ~/.bashrc via ces lignes :
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
~/.profile est lu par tous les shells alors que ~/.bash_profile n'est lu que par Bash.
Si vous voulez que votre modification touche tous les utilisateurs (system-wide) :
/etc/bashrc est l'équivalent de ~/.bashrc mais il est préférable de mettre les modifications dans un fichier custom.sh dans /etc/profile.d/
/etc/profile est l'équivalent de ~/.bash_profile, mais il est préférable de mettre les modifications dans un fichier avec un nom en .sh dans /etc/profile.d/