Das Anpassen von $ PATH in / etc / profile wirkt sich nicht auf root aus

9

Ich habe ein Verzeichnis zu PATHin hinzugefügt /etc/profile. Dies funktioniert für mein Benutzerkonto, jedoch nicht für root. Es ist einfach, es zu meinem hinzuzufügen, /root/.bashrcaber ich würde gerne verstehen, was falsch ist. Es ist ein größtenteils unverändertes Debian 6, daher denke ich, dass meine Änderungen den Trick machen sollten.

Hier ist mein /etc/profile:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/lib/distcc/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/lib/distcc/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

if [ "$PS1" ]; then
  if [ "$BASH" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Bearbeiten: Der Pfad, den ich hinzugefügt habe, ist der distcc-stuff. Folgendes echo $PATHsagt mir:

$ echo $PATH
/usr/lib/distcc/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Techshack
quelle
Wie melden Sie sich als root an? Führen Sie tatsächlich eine Login-Shell aus?
Daniel Beck
Ich mache suaus einer User-Shell in Gnome.
Techshack
Oh, ich verstehe, das Anmelden an einem Terminal führt zur korrekten Einstellung von PATH. Was ist der Unterschied?
Techshack
Versuchen Sie su -, das Root-Profil zu laden.
Cularis
Das macht den Trick.
Techshack

Antworten:

7

Sie müssen eine Anmeldeshell ausführen (oder eine nicht interaktive Shell ausführen, aber das ist nicht das, was Sie möchten), um zu laden /etc/profile.

Verwenden

su - username

oder im Falle von root

su -

um dies zu tun.

-ist dasselbe wie -loder --loginund macht die Shell zu einer Login-Shell.

Daniel Beck
quelle
0

Eine Login-Shell wird benötigt und kann mit sudo erstellt werden:

sudo bash --login <command>
Hazok
quelle
0

Sie müssen eine Login-Shell simulieren, die Sie mit sudo verwenden können, indem Sie -i:

sudo -i <command>

Von man sudo:

 -i [command]
             The -i (simulate initial login) option runs the shell specified by the password
             database entry of the target user as a login shell.  This means that login-spe
             cific resource files such as .profile or .login will be read by the shell.  If a
             command is specified, it is passed to the shell for execution via the shell's -c
             option.  If no command is specified, an interactive shell is executed.  sudo
             attempts to change to that user's home directory before running the shell.  The
             security policy shall initialize the environment to a minimal set of variables,
             similar to what is present when a user logs in.  The Command Environment section
             in the sudoers(5) manual documents how the -i option affects the environment in
             which a command is run when the sudoers policy is in use.
phs
quelle