Quando stai tentando di eseguire un comando (con o senza sudo
) e ricevi un messaggio di errore che dice "Comando non trovato", ciò significa che lo script o il file che stai tentando di eseguire non esiste nella posizione specificata dalla tua variabile PATH. Cos'è questa variabile e come puoi eseguire comandi che non riesce a trovare?
Comprendere le variabili d'ambiente
In informatica, una variabile è un segnaposto per un valore che può cambiare. Usi le variabili ogni giorno nel discorso normale, anche se non le pensi come tali. Quando dici "il mio laptop", stai usando "laptop" come variabile generica o segnaposto per il computer che stai trasportando, indipendentemente dal fatto che sia un Lenovo, un Mac o un Raspberry Pi in una custodia elegante.
Variabili d'ambiente sono variabili speciali che contengono informazioni sulla tua sessione di accesso. Molte di queste variabili vengono impostate per impostazione predefinita durante l'installazione o la creazione dell'utente. Vengono archiviati per la shell di sistema, le applicazioni e gli script da utilizzare durante l'esecuzione dei comandi.
Esistono variabili globali o definite dal sistema e variabili locali o definite dall'utente.
Variabili globali
Le variabili globali sono predefinite nella shell di accesso, ma non sono immutabili e possono essere modificate o eliminate in base alle tue preferenze. Puoi usare printenv
o env
comandi per visualizzare le variabili di ambiente sul tuo sistema:
$ env
SHELL=/bin/bash
SESSION_MANAGER=local/kiwi.homelinux.local:@/tmp/.ICE-unix/1906,unix/kiwi.homelinux.local:/tmp/.ICE-unix/19
06
WINDOWID=153092103
COLORTERM=truecolor
XDG_CONFIG_DIRS=/home/tux/.config/kdedefaults:/etc/xdg:/etc/kde/xdg
LESS=-XR
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session1
HISTCONTROL=:ignorespace:ignoredups:ignorespace:ignoredups
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig
[...]
L'env
comando stampa tutte le variabili di ambiente globali. Le variabili fanno distinzione tra maiuscole e minuscole e tutte le distribuzioni Linux utilizzano le maiuscole per i nomi delle variabili di ambiente per impostazione predefinita.
[ Tieni a portata di mano i tuoi comandi, alias e suggerimenti Git preferiti. Scarica il cheat sheet di Git. ]
Variabili locali
Una variabile locale esiste solo all'interno di una shell specifica. Pertanto, quando si definisce una variabile locale, è disponibile solo nella shell corrente. Non si propaga o persiste in una nuova sessione di shell a meno che non la esporti come variabile globale.
Le variabili locali sono spesso definite in minuscolo per evitare di sovrascrivere una variabile globale con lo stesso nome.
La variabile d'ambiente PATH
La variabile di ambiente globale PATH elenca le directory che il tuo sistema cerca per i comandi validi ed eseguibili. Per impostazione predefinita, contiene directory standard che normalmente memorizzano eseguibili come /usr/bin
, /usr/local/bin
, e così via.
Quando digiti un comando, come grep
o vim
, il tuo sistema cerca in tutte le directory elencate nella tua variabile PATH, nell'ordine in cui sono elencate, finché non trova un file eseguibile con lo stesso nome. Se non riesce a trovarne uno, emette l'errore "Comando non trovato".
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin
$ env $PATH
env: /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin:/home/tux/bin
5 modi per correggere gli errori "Comando non trovato"
Esistono diversi modi per risolvere questo problema. Eccone cinque.
1. Includi il percorso
Non tutto ciò che vuoi eseguire deve essere nel tuo percorso. È possibile eseguire i file direttamente specificando il percorso del file che si desidera eseguire. Identificando la posizione del file, eludi la necessità che il tuo sistema cerchi il tuo percorso.
Ad esempio, supponiamo di avere uno script chiamato hello
che vuoi correre. Si trova nella tua home directory e l'hai già contrassegnato come eseguibile con chmod +x
:
$ ~/hello
hello world
Dicendo al tuo sistema la posizione del file, la variabile PATH non è mai coinvolta e il file viene eseguito come previsto.
2. Aggiungi un nuovo percorso
In alternativa, puoi aggiungere una nuova directory al tuo PERCORSO. Aggiungi i tuoi file eseguibili a quella directory, quindi puoi eseguirli senza fornire manualmente un percorso:
$ cp ~/hello ~/.local/bin
$ export PATH=$PATH:$HOME/.local/bin
$ printenv PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/tux/.local/bin
Potresti voler aggiungere le nuove variabili d'ambiente PATH alla tua shell di login includendole nel tuo .bashrc
file come nuove impostazioni.
3. Copia un file in un percorso esistente
Se vuoi eseguire il tuo file binario o script, copialo in uno dei percorsi di directory già elencati nella variabile di ambiente PATH:
$ sudo cp ~/hello /usr/local/bin/
$ hello
hello world
4. Dì a Bash dove cercare
Probabilmente l'opzione più semplice, specialmente per script o applicazioni una tantum, è dire a Bash di non considerare il PERCORSO ma piuttosto di "guardare qui". A tale scopo, posiziona un punto e una barra davanti al comando, allo script o al nome dell'applicazione. Per il hello
script, si presenta così:
$ sudo ./hello
hello world
Non vengono apportate modifiche permanenti al sistema. Questo potrebbe essere utile se stai scrivendo uno script e vuoi testarlo prima di copiarlo o spostarlo nella sua normale posizione di archiviazione (presumibilmente lungo il PERCORSO).
5. Installa un pacchetto
A volte, quando si tenta di utilizzare un comando e Bash visualizza l'errore "Comando non trovato", potrebbe essere perché il programma non è installato sul sistema. Correggerlo installando un pacchetto software contenente il comando. Ad esempio, se non hai installato Nmap, allora nmap
comando non riesce quando lo digiti in un terminale:
$ nmap
nmap: command not found
$ sudo dnf install --assumeyes --quiet nmap
$ nmap
Nmap 7.92 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
[...]
[ Vuoi saperne di più? Iscriviti per una prova gratuita dell'accesso completo al curriculum di Red Hat. ]
Rimani sul percorso
La variabile PATH è un potente strumento che puoi utilizzare per personalizzare il modo in cui il tuo sistema risponde ai comandi, quindi prenditi del tempo per familiarizzare con esso. Viene spesso utilizzato durante l'esecuzione di comandi per trovare l'eseguibile del comando.
In questo tutorial, hai imparato cinque modi per correggere un errore "Comando non trovato" nel tuo terminale, tre dei quali si basano sulla variabile PATH. Ora che sai cosa sono le variabili e come vengono trovati gli eseguibili dei comandi, non rimarrai così perplesso quando sullo schermo apparirà l'errore "Comando non trovato".