As the title suggests I am asking about the main differences between .bashrc and /etc/profile. What I know is that .bashrc is a shell script that runs on login(I guess). And I know /etc/profile runs on ssh login or terminal login I also guess. Could someone please steer me in the right direction here?
I think this answer sums it up nicely:
From man bash:
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
The difference is more clear when you know when these two files are executed which is dependent on the type of login being performed. In Linux you can have two types of login shells, Interactive Shells and Non-Interactive Shells. An Interactive shell is used where a user can interact with the shell, i.e. your typical bash prompt. Whereas a non-Interactive shell is used when a user cannot interact with the shell, i.e. a bash scripts execution.
The difference is simple, the /etc/profile is executed only for interactive shells and the /etc/bashrc is executed for both interactive and non-interactive shells.
etcprofile: Used for default settings for all users when starting a login shell.
etcbashrc: Used to define defaults for all users when starting a subshell.
~/.profile: Specific settings for one user applied when starting a login shell.
~/.bashrc: Specific settings for one user applied when starting a subshell.