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