Perché eseguire il comando come sudo restituisce il comando non trovato?


12

Comando di esempio:

drush cc all

funziona, ma questo:

sudo drush cc all

mi da:

sudo: drush: command not found

Perché? Come risolvere questo?


Ho anche avuto questo problema a volte, con comandi di base come cd. Utilizzo di dzdo cd"comando non trovato" restituito. Certo che in seguito capito che cding in una directory che non ho autorizzazioni in, non aiuterà molto, quindi ho bisogno sia una shell di root o di necessità di dzdo ls, dzdo mvecc il contenuto dall'esterno che dir.
Wildcard il

2
Il problema sudo cdè che cdè un comando incorporato, non un programma. Se si vuole andare in una directory che si non si ha alcun accesso a, e (per esempio) rinominare un file lì, si potrebbe fare (per esempio) sudo mv dir/oldfile dir/newfile o sudo sh -c "cd dir; mv oldfile newfile" .
G-Man dice "Ripristina Monica" il

Risposte:


13

Quando sudoottieni un preconfigurato $PATH, che è (dovrebbe essere) qualcosa di simile al percorso predefinito dell'utente root . Il tuo programma non è in quella lista di directory identificate da $PATH.

Vedi per esempio

sudo cerca di essere sicuro quando si eseguono comandi esterni.

Esistono due modi distinti per gestire le variabili di ambiente. Per impostazione predefinita, l' opzione env_reset sudoers è abilitata. Questo comandi cause da eseguire con un ambiente minimo contenente TERM, PATH, HOME, SHELL, LOGNAME, USERe USERNAMEin aggiunta alle variabili del processo chiamante consentito dalle env_checke env_keep sudoers opzioni. Esiste effettivamente una whitelist per le variabili di ambiente.

Se non riesci a configurare sudoper preservare il tuo $PATH, la solita soluzione è quella di specificare il percorso completo del programma. Ciò potrebbe non funzionare bene con gli script che richiamano altri eseguibili nella directory (non accessibile).


0

È necessario specificare il percorso completo. È anche più sicuro; se non specifichi il percorso, è concepibile che un utente malintenzionato possa creare un altro programma che verrà eseguito con i permessi di root.

Inoltre, è necessario inserire una linea /etc/sudoersper consentirlo. man sudoersper la sintassi, è troppo da mettere qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.