PATH variable
Robert Locke
rlocke at ralii.com
Wed Sep 8 19:13:11 UTC 2004
On Wed, 2004-09-08 at 13:58, Nifty Hat Mitch wrote:
> On Wed, Sep 08, 2004 at 08:02:27AM +0200, Joachim Backes wrote:
>
> > can somebody tell me where the PATH variable is initially set? I'm
> > sure, not in /etc/profile.
>
> The strict answer to this is that it is set
> by init (/sbin/init).
>
> PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
>
> Since init is the first process from which all other processes are
> created this is the answer to your question.
>
> Once init is running the topic expands through /etc/inittab processing
> which includes all the scripts in /etc/init.d.
>
> One of these steps is especially interesting for users at run level 5.
>
> # Run xdm in runlevel 5
> x:5:respawn:/etc/X11/prefdm -nodaemon
>
> The first line with code in it resets the path thus:
>
> PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
>
> Now that a display manager is running it might be reset again.
> For gdm we see this line in /usr/bin/gdm.
>
> test -f /etc/profile && . /etc/profile
>
> /etc/profile does its pathmunge thing....
> and then all these are /etc/profile.d/*.sh so if
> kerberos is there krb5.sh will modify it again.
>
> All of this might be interesting because a process launched with a
> quick click from the desktop by the window manager might act
> differently when compared to the same process launched from a shell
> prompt.
>
> Not to be left out is your shell as defined in /etc/passwd
> (bash, csh, tcsh, ksh, sh, zsh). Each shell has rules for
> startup and standard files it looks at... often PATH is reset
> there. The csh and tcsh world is funny because $path is
> almost equal to $PATH (RTFM).
>
>
> --
> T o m M i t c h e l l
> Just say no to 74LS73 in 2004
>
Tom,
I need to contest some of what you are saying.... For one, where do
several of the directories you quote get removed from the $PATH of a
regular user, if I am using the "init" process' $PATH?
So let me quote man bash:
> PATH The search path for commands. It is a colon-separated list of
> directories in which the shell looks for commands (see COMMAND
> EXECUTION below). The default path is system-dependent, and is
> set by the administrator who installs bash. A common value is
> ‘‘/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.’’.
>
In doing a strings of /bin/bash, I notice a string of
"/usr/local/bin:/bin:/usr/bin"...
Using that as a basis, then reading /etc/profile makes sense, when it
adds /sbin, /usr/sbin, and /usr/local/sbin if I am root. It also adds
/usr/X11R6/bin to the end for anybody.... This seems to match what I
see when I launch either a gnome-terminal or log in via a virtual
console....
I have to admit the thought of this being hard-coded into /bin/bash
bothers me, but....
Any thoughts?
--Rob
More information about the users
mailing list