`~/.profile` is the right place for environment variable definitions and for non-graphical programs that you want to run when you log in (e.g. `ssh-agent`, `screen -m`). It is executed by your login shell if that is a Bourne-style shell (sh, ksh, bash). Zsh runs `~/.zprofile` instead, and Csh and tcsh run `~/.login`. If you log in under an X display manager (xdm, gdm, kdm, ...), whether `~/.profile` is run depends how your display manager and perhaps desktop environment were configured by your distribution. If you log in under a “custom session”, that usually executes `~/.xsession`. `~/.bashrc` is the right place for bash-specific settings, such as aliases, functions, shell options and prompts. As the name indicates, it is specific to bash; csh has `~/.cshrc`, ksh has `~/.kshrc`, and zsh has <drumroll> `~/.zshrc`. See also: [Difference between .bashrc and .bash_profile](http://superuser.com/questions/183870/difference-between-bashrc-and-bash-profile) [Which setup files should be used for setting up environment variables with bash?](http://superuser.com/questions/183845/which-setup-files-should-be-used-for-setting-up-environment-variables-with-bash) [Zsh not hitting ~/.profile](http://superuser.com/questions/187639/zsh-not-hitting-profile)