A shell can be interactive or non-interactive. An interactive shell can be either login or non-login shell.
A login shell is invoked when a user login to the terminal either remotely via ssh or locally, or when Bash is launched with the --login option.
An interactive non-login shell is invoked from the login shell, such as when typing bash in the shell prompt or when opening a new Gnome terminal tab.
.bash_profile is read and executed when Bash is invoked as an interactive login shell, while .bashrc is executed for an interactive non-login shell. Use .bash_profile to run commands that should run only once, such as customizing the $PATH environment variable.