I've read in a couple of places that the PATH
is set in /etc/profile
or the .profile
file that's in the home dir.
Are these the only places that the path is set in? I want a better understanding of it.
In the /etc/profile
file, as the following comment says "system-wide .profile file for the Bourne shell"
. Does that mean that profile files are the main configuration files for bash?
In that file I don't see the PATH
var being set at all. In the .profile
file in the home directory there's this line:
PATH="$HOME/bin:$PATH"
That's resetting PATH
by the looks because it's concatenating the already set $PATH
string with $HOME/bin:
right? But if etc/profile
and ~/.profile
are the only files setting PATH
where is $PATH
coming from in that line of code if it's not defined in /etc/profile
?
Can someone experienced please give a broad and detailed explanation of the PATH
variable? Thanks!
Best Answer
There are many places where
PATH
can be set.The
login
program sets it to a default value. How this default value is configured is system-dependent. On most non-embedded Linux systems, it's taken from/etc/login.defs
, with different values for root and for other users. Consult thelogin(1)
manual on your system to find out what it does.On systems using PAM, specifically the
pam_env
module, environment variables can be set in the system-wide file/etc/environment
and the per-user file~/.pam_environment
.Then most ways to log in (but not cron jobs) execute a login shell which reads system-wide and per-user configuration files. These files can modify the value of
PATH
, typically to add entries but sometimes in other ways. Which files are read depend on what the login shell is. Bourne/POSIX-style shells read/etc/profile
and~/.profile
. Bash reads/etc/profile
, but for the per-user file it only reads the first existing file among~/.bash_profile
,~/.bash_login
and~/.profile
. Zsh reads/etc/zshenv
,~/.zshenv
,/etc/zprofile
,~/.zprofile
,/etc/zlogin
and~/.zlogin
. Many GUI sessions arrange to load/etc/profile
and~/.profile
, but this depends on the display manager, on the desktop environment or other session startup script, and how each distribution has set these up.