Kommando in PATH wird mit sudo nicht gefunden
email.listen at googlemail.com
email.listen at googlemail.com
Don Jul 26 18:04:40 BST 2007
Am Do, 26. Juli 2007 10:31:02 schrieb Christoph Bier:
> Hallo,
>
> ich habe hier ein merkwürdiges Problem, das auch nur auf meinem
> Bürorechner auftritt; meine Rechner zu Hause (Desktop, Laptop) --
> alle drei Rechner benutzen das gleiche Home-Verzeichnis -- haben das
> Problem nicht. Bestimmte Befehle, die ich mit sudo aufrufen möchte,
> werden nicht gefunden, obwohl sie in PATH liegen (Umbrüche in der
> PATH-Ausgabe händisch eingefügt):
>
> chris at bzb:~$ echo $PATH
> /home/chris/adabas/bin:/home/chris/adabas/pgm:/home/chris/bin:
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
> /usr/bin/X11:/usr/games:/opt/xindy-2.2/bin:/home/chris/bin:
> /usr/local/texlive/2007/bin/i386-linux
> chris at bzb:~$ sudo echo $PATH
> Password:
> /home/chris/adabas/bin:/home/chris/adabas/pgm:/home/chris/bin:
> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
> /usr/bin/X11:/usr/games:/opt/xindy-2.2/bin:/home/chris/bin:
> /usr/local/texlive/2007/bin/i386-linux
> chris at bzb:~$ which texhash
> /usr/local/texlive/2007/bin/i386-linux/texhash
> chris at bzb:~$ sudo texhash
> sudo: texhash: command not found
>
> chris at bzb:~$ texhash
> funktioniert problemlos, nur werden dann die systemweiten
> TeX-Verzeichnisse nicht erfasst.
>
> Nicht dass die TeXLive-Installation ganz frisch wäre, aber ich
> wollte trotzdem mal hash anwenden. Doch auch das funktioniert nicht
> mit sudo, obwohl hash doch eine Shell-Funktion ist, oder etwa nicht?
>
> chris at bzb:~$ sudo hash /usr/local/texlive/2007/bin/i386-linux/
> sudo: hash: command not found
>
> Kann mir jemand weiterhelfen? Bei meinen Recherchen habe ich nichts
> dazu gefunden (»sudo command not found« ist als Suchbegriff auch
> etwas unspezifisch; ein besserer ist mir nicht eingefallen). -- Ich
> verwende Feisty und die Bash. ~/.bash_profile, ~/.bashrc und
> /etc/bash.bashrc sind auf allen drei Rechnern identisch. An den
> sudo-Einstellungen habe ich noch nie irgendwas gedreht.
Hallo Christoph
Versuch doch mal folgendes:
- Vergleiche die für root gesetzten System-Variablen der verschiedenen Rechner
mit set. Einfach set eingeben oder die Ausgabe von set in eine Datei
umleiten und sie dann vergleichen.
set >system1.txt
Das gleiche auf einem der anderen Rechner in dem du es in eine andere Datei
umleitest, z.B. system2.txt
Diese beiden Ausgaben solltest du mal untersuchen ob sie sich unterscheiden.
Auch falls vorhanden könntest du mal die Dateien .bashrc, .bash_profile
und .profile vergleichen
- versuch mal ob:
sudo 'su -c texhash'
funktioniert.
Wie du an den Ausgaben von 'echo $PATH' und 'sudo echo $PATH' sehen kannst
wird die Systemvariable von $HOME bei sudo nicht umgestellt!
Anders bei 'su -c' oder bei 'sudo -H'
- Setzen eines Symbolischen Link anstatt Erweiterung der $PATH Variablen
Das Erweitern der $PATH Variable wie du es für bestimmte Verzeichnisse
in /usr/local getan hast ist zwar naheliegend aber man kann es besser
machen.
Es ist übersichtlicher und einfacher wenn man im normalen $PATH, z.b.
in /usr/sbin oder /usr/bin oder /$HOME/bin einen symbolischen Link auf
benötigte Programme anlegt.
In deinem Fall also von /usr/local/texlive/2007/bin/i386-linux/texhash
nach /usr/bin/texhash:
sudo ln -s /usr/local/texlive/2007/bin/i386-linux/texhash /usr/bin/texhash
Für texhash ist dies die naheliegendste Lösung, für andere, z.B. dein ADABAS
ist es evtl. besser einen Link in /root/bin anzulegen. Du darfst dann nur
nicht vergessen es per 'sudo -H' aufzurufen, sonst wird es nicht gefunden.
Tip: Einen alias sudoh='sudo -H' anlegen.
Ein Alias sudos='sudo -sH' ist auch hilfreich. Dadurch wird die Shell in
eine root Shell geschaltet, ähnlich wie mit 'su -' Es erspart das
andauernde eingeben von sudo wenn man mal mehr als einen Befehl als root
ausführen will.
Der Platz für Aliases ist in $HOME/.bash_aliases und initialisiert werden
sie durch folgenden Eintrag in der $HOME/.bashrc:
# Alias definitions.
if [ -f $HOME/.bash_aliases ]
then
. $HOME/.bash_aliases
fi
Anmerkung:
Es gibt Anwendungen die Einstellungen in $HOME/.irgendwo ablegen. Benutzt
man in solch einem Fall sudo $Programmname _bevor_ man es als einfacher
Anwender ausführt, also ohne sudo, kann es zu Ärger kommen. Ein Programm das
bei einem Aufruf per sudo eine $HOME/.irgendwo anlegt erstellt diese mit der
ownership root:root, äusserst unangenehm wenn man dann später das Programm
als normaler User aufruft und sich wundert warum es meckert es habe kein
Zugriffsrecht auf $HOME/.irgendwo. Dies gilt besonders für eine ganze Anzahl
von GUI Anwendungen, also von KDE oder GNOME.
Wird ein Programm per sudo aufgerufen _nachdem_ es bereits ohne sudo
aufgerufen wurde tritt dieses Problem nicht auf. Eine so evtl. angelegte
Datei $HOME/.irgendwas hat dann die ownership der Useres. Greifen danach
Programme die per sudo aufgerufen werden darauf zu wird die ownership
nicht verändert.
regards,
thomas