GNU/Linux >> Linux Esercitazione >  >> Linux

comando non trovato quando si utilizza sudo

Controlla secure_path su sudo

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

Se $PATH è stato sovrascritto usa visudo e modifica /etc/sudoers

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

Autorizzazione negata

Per eseguire uno script, il file deve avere un bit di autorizzazione eseguibile impostato .

Per comprendere appieno i permessi dei file di Linux puoi studiare la documentazione per chmod comando. chmod, un'abbreviazione di change mode , è il comando utilizzato per modificare le impostazioni di autorizzazione di un file.

Per leggere la documentazione di chmod per il tuo sistema locale, esegui man chmod o info chmod dalla riga di comando. Una volta letto e compreso, dovresti essere in grado di comprendere l'output di running ...

ls -l foo.sh

... che elencherà i permessi READ, WRITE ed EXECUTE per il proprietario del file, il proprietario del gruppo e tutti gli altri che non sono il proprietario del file o un membro del gruppo a cui appartiene il file (a volte si fa riferimento a quest'ultimo gruppo di permessi come "mondo" o "altro")

Ecco un riepilogo di come risolvere l'errore Autorizzazione negata nel tuo caso.

$ 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 

Il proprietario ha accesso in lettura e scrittura rw ma - indica che manca il permesso di esecuzione

Il chmod comando lo risolve. (Gruppo e altro hanno solo i permessi di lettura impostati sul file, non possono scriverci o eseguirlo)

$ 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 è ora eseguibile per quanto riguarda Linux.

L'utilizzo di sudo restituisce Comando non trovato

Quando esegui un comando utilizzando sudo lo stai effettivamente eseguendo come superutente o root.

Il motivo per cui l'utente root non trova il tuo comando è probabile che il file PATH variabile di ambiente per root non include la directory in cui foo.sh si trova . Quindi il comando non è stato trovato.

La variabile d'ambiente PATH contiene un elenco di directory in cui vengono cercati i comandi. Ogni utente imposta la propria variabile PATH in base alle proprie esigenze. Per vedere cosa è impostato per eseguire

env | grep ^PATH

Ecco alcuni esempi di output dell'esecuzione del precedente env comando prima come utente ordinario e poi come utente root utilizzando 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

Si noti che, sebbene simili, in questo caso le directory contenute nel PATH l'utente non privilegiato (rkielty) e il super utente non sono la stessa cosa .

La directory in cui foo.sh resides non è presente nella variabile PATH dell'utente root, da cui il comando non trovato errore.


Le altre soluzioni che ho visto finora si basano su alcune definizioni di sistema, ma in realtà è possibile avere sudo usa l'attuale PATH (con il env comando) e/o il resto dell'ambiente (con il comando -E option) semplicemente invocandolo correttamente:

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

Infatti, se ne può ricavare un alias:

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

(È anche possibile denominare l'alias stesso sudo , sostituendo l'originale sudo .)


Linux
  1. Sudo:Nocorrect:comando non trovato?

  2. Sudo:comando non trovato?

  3. id:comando non trovato

  4. w:comando non trovato

  5. df:comando non trovato

sudo:apt-add-repository:comando non trovato?

Comando alternativo all'aggiornamento non trovato?

visudo:comando non trovato

sudoedit:comando non trovato

sudo:comando non trovato

ln:comando non trovato