GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Befehl bei Verwendung von sudo nicht gefunden

Suchen Sie nach secure_path auf sudo

[[email protected] ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

Wenn $PATH überschrieben wird, verwenden Sie visudo und bearbeiten Sie /etc/sudoers

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

Berechtigung verweigert

Um ein Skript auszuführen, muss für die Datei ein ausführbares Berechtigungsbit gesetzt sein .

Um die Linux-Dateiberechtigungen vollständig zu verstehen, können Sie die Dokumentation für chmod studieren Befehl. chmod, eine Abkürzung für Änderungsmodus , ist der Befehl, der verwendet wird, um die Berechtigungseinstellungen einer Datei zu ändern.

Um die chmod-Dokumentation für Ihr lokales System zu lesen, führen Sie man chmod aus oder info chmod von der Kommandozeile. Einmal gelesen und verstanden, sollten Sie in der Lage sein, die Ausgabe von running ...

zu verstehen
ls -l foo.sh

... die die LESEN-, SCHREIBEN- und AUSFÜHREN-Berechtigungen für den Dateieigentümer, den Gruppeneigentümer und alle anderen auflistet, die nicht der Dateieigentümer oder ein Mitglied der Gruppe sind, zu der die Datei gehört (diese letzte Berechtigungsgruppe wird manchmal bezeichnet als "Welt" oder "Andere")

Im Folgenden finden Sie eine Zusammenfassung der Fehlerbehebung für den Fehler Berechtigung verweigert in Ihrem Fall.

$ ls -l foo.sh                    # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh 
    ^^^ 
 ^^^ | ^^^   ^^^^^^^ ^^^^^
  |  |  |       |       | 
Owner| World    |       |
     |          |    Name of
   Group        |     Group
             Name of 
              Owner 

Eigentümer hat Lese- und Schreibzugriff rw, aber das - zeigt an, dass die Berechtigung zur Ausführung fehlt

Die chmod Befehl behebt das. (Gruppe und andere haben nur Leseberechtigung für die Datei, sie können nicht darauf schreiben oder sie ausführen)

$ chmod +x foo.sh               # The owner can set the executable permission on foo.sh
$ ls -l foo.sh                  # Now we see an x after the rw 
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
   ^  ^  ^

foo.sh ist nun für Linux ausführbar.

Die Verwendung von sudo führt dazu, dass der Befehl nicht gefunden wurde

Wenn Sie einen Befehl mit sudo ausführen Sie führen es effektiv als Superuser oder Root aus.

Der Grund dafür, dass der Root-Benutzer Ihren Befehl nicht findet, ist wahrscheinlich, dass PATH Umgebungsvariable für root enthält nicht das Verzeichnis, in dem foo.sh befindet . Daher wird der Befehl nicht gefunden.

Die Umgebungsvariable PATH enthält eine Liste von Verzeichnissen, die nach Befehlen durchsucht werden. Jeder Benutzer legt seine eigene PATH-Variable entsprechend seinen Anforderungen fest. Um zu sehen, was zur Ausführung eingestellt ist,

env | grep ^PATH

Hier ist eine Beispielausgabe der Ausführung des obigen env Befehl zuerst als normaler Benutzer und dann als Root-Benutzer mit sudo

[email protected]:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

[email protected]:~$ sudo env | grep ^PATH
[sudo] password for rkielty: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Beachten Sie, dass, obwohl ähnlich, in diesem Fall die im PATH enthaltenen Verzeichnisse des nichtprivilegierten Benutzers (rkielty) und des Superusers nicht identisch sind .

Das Verzeichnis, in dem foo.sh befindet sich nicht in der PATH-Variablen des Root-Benutzers, daher der Befehl nicht gefunden Fehler.


Die anderen Lösungen, die ich bisher hier gesehen habe, basieren auf einigen Systemdefinitionen, aber es ist tatsächlich möglich, sudo zu haben Verwenden Sie den aktuellen PATH (mit dem env Befehl) und/oder der Rest der Umgebung (mit dem -E Option), indem Sie sie einfach richtig aufrufen:

sudo -E env "PATH=$PATH" <command> [arguments]

Tatsächlich kann man daraus einen Alias ​​machen:

alias mysudo='sudo -E env "PATH=$PATH"'

(Es ist auch möglich, den Alias ​​selbst sudo zu nennen , ersetzt den ursprünglichen sudo .)


Linux
  1. [Behoben] bash:sudo:Befehl nicht gefunden

  2. Update-alternative-Befehl nicht gefunden?

  3. Sudo:Befehl nicht gefunden?

  4. id:Befehl nicht gefunden

  5. w:Befehl nicht gefunden

sudo:apt-add-repository:Befehl nicht gefunden?

visudo:Befehl nicht gefunden

sudoedit:Befehl nicht gefunden

sudo:Befehl nicht gefunden

ln:Befehl nicht gefunden

Warum wird der Befehl sudo:bundle nicht gefunden?