Come aggiungere una directory al tuo $ PATH in Linux

$ PATH è uno dei manipolatori silenziosi sullo sfondo del tuo computer Linux. Influisce silenziosamente sulla tua esperienza utente, ma non c’è nulla di oscuro al riguardo. Spiegheremo cosa fa e come puoi regolarlo.

Che cos’è $ PATH su Linux e come funziona?

Quando digiti un comando in una finestra del terminale e premi Invio, inizi molte attività prima ancora che il tuo comando venga eseguito.

Bash è la shell predefinita nella maggior parte delle distribuzioni Linux. Interpreta la riga di testo che hai inserito e identifica i nomi dei comandi mescolati con i parametri, pipe, reindirizzamentie qualunque altra cosa sia presente. Quindi individua i binari eseguibili per quei comandi e li avvia con i parametri forniti.

Il primo passo che la shell esegue per individuare l’eseguibile è identificare se è coinvolto un binario. Se il comando che usi è all’interno della shell stessa (un file “Shell builtin”) non sono necessarie ulteriori ricerche.

I incorporati della shell sono i più facili da trovare perché sono parte integrante della shell. È come averli in una cintura degli attrezzi: sono sempre con te.

Se hai bisogno di uno dei tuoi altri strumenti, però, devi andare a frugare in officina per trovarlo. È sul tuo banco da lavoro o su un attaccapanni? Questo è ciò che fa la variabile d’ambiente $ PATH. Contiene un elenco di posizioni in cui le ricerche della shell e l’ordine in cui verranno cercate.

Se vuoi vedere se un comando è un file builtin di shell, un alias, una funzione o un binario autonomo mv / work / unfile, puoi usare il comando type come mostrato di seguito:

type clear
type cd

Il

Questo ci dice che clear è un file binario e il primo trovato nel percorso si trova in / usr / bin. Potresti avere più di una versione di clear installata sul tuo computer, ma questa è quella che la shell proverà a usare.

Non sorprende che cd sia una shell incorporata.

Elenca il tuo $ PATH

È facile vedere cosa c’è sul tuo cammino. Basta digitare quanto segue per utilizzare il comando echo e stampa il valore tenuto nella variabile $ PATH:

echo $PATH

Il

L’output è un elenco di percorsi del file system delimitati da due punti (:). La shell ricerca da sinistra a destra nel percorso, controllando ogni posizione del file system per un eseguibile corrispondente per eseguire il comando.

Possiamo scegliere il nostro percorso attraverso l’elenco per vedere le posizioni del file system che verranno cercate e l’ordine in cui verranno cercate:

/ usr / local / sbin
/ usr / local / bin
/ usr / sbin
/ usr / bin
/ sbin
/bidone
/ usr / giochi
/ usr / local / games
/ snap / bin

Qualcosa che potrebbe non essere immediatamente ovvio è che la ricerca non si avvia nella directory di lavoro corrente. Piuttosto, si fa strada attraverso le directory elencate e solo le directory elencate.

Se la directory di lavoro corrente non è nel tuo percorso, non verrà cercata. Inoltre, se hai comandi memorizzati in directory che non sono nel percorso, la shell non li troverà.

Per dimostrarlo, abbiamo creato un piccolo programma chiamato rf. Quando viene eseguito, rf stampa il nome della directory da cui è stato lanciato nella finestra del terminale. Si trova in / usr / local / bin. Abbiamo anche una versione più recente nella directory / dave / work.

Digitiamo quanto segue quale comando per mostrarci quale versione del nostro programma la shell troverà e utilizzerà:

which rf

Il

La shell riporta che la versione trovata è quella nella directory che si trova nel percorso.

Digitiamo quanto segue per attivarlo:

rf

Il

La versione 1.0 di rf funziona e conferma che le nostre aspettative erano corrette. La versione trovata ed eseguita si trova in / usr / local / bin.

Per eseguire qualsiasi altra versione di rf su questo computer, dovremo utilizzare il percorso dell’eseguibile sulla riga di comando, come mostrato di seguito:

./work/rf

Il

Ora che abbiamo detto alla shell dove trovare la versione di rf che vogliamo eseguire, usa la versione 1.1. Se preferiamo questa versione, possiamo copiarla nella directory / usr / local / bin e sovrascrivere quella vecchia.

Diciamo che stiamo sviluppando una nuova versione di rf. Dovremo eseguirlo frequentemente mentre lo sviluppiamo e lo testiamo, ma non vogliamo copiare una build di sviluppo non rilasciata nell’ambiente live.

O forse abbiamo scaricato una nuova versione di rf e vogliamo fare alcuni test di verifica su di essa prima di renderla pubblicamente disponibile.

Se aggiungiamo la nostra directory di lavoro al percorso, facciamo in modo che la shell trovi la nostra versione. E questo cambiamento riguarderà solo noi, gli altri useranno ancora la versione di rf in / usr / local / bin.

Aggiunta di una directory a $ PATH

Puoi usare il comando di esportazione in aggiungi una directory al $ PATH. La directory viene quindi inclusa nell’elenco delle posizioni del file system ricercate dalla shell. Quando la shell trova un eseguibile corrispondente, interrompe la ricerca, quindi è necessario assicurarsi che cerchi prima nella directory, prima di / usr / local / bin.

È facile da fare. Per il nostro esempio, digitiamo quanto segue per aggiungere la nostra directory all’inizio del percorso in modo che sia la prima posizione cercata:

export PATH=/home/dave/work:$PATH

Il

Questo comando imposta $ PATH in modo che sia uguale alla directory che stiamo aggiungendo, / home / dave / work, e quindi l’intero percorso corrente.

Il primo PERCORSO non ha segno di dollaro ($). Impostiamo il valore per PATH. Il $ PATH finale ha un segno di dollaro perché stiamo facendo riferimento ai contenuti archiviati nella variabile PATH. Inoltre, notare i due punti (:) tra la nuova directory e il nome della variabile $ PATH.

Vediamo ora come appare il percorso:

echo $PATH

Il

La nostra directory / home / dave / work viene aggiunta all’inizio del percorso. I due punti che abbiamo fornito lo separano dal resto del percorso.

Digitiamo quanto segue per verificare che la nostra versione di rf sia la prima trovata:

which rf

Il

La prova nel budino è in esecuzione rf, come mostrato di seguito:

rf

Il

La shell trova la versione 1.1 e la esegue da / home / dave / work.

Per aggiungere la nostra directory alla fine del percorso, basta spostarla alla fine del comando, in questo modo:

export PATH=$PATH:/home/dave/work

Rendere permanenti le modifiche

Come Beth Brooke-Marciniak ha detto: “Il successo va bene, ma il successo è fugace.” Nel momento in cui chiudi la finestra del terminale, tutte le modifiche apportate a $ PATH sono sparite. Per renderli permanenti, devi mettere il tuo comando di esportazione in un file di configurazione.

Quando inserisci il comando di esportazione nel tuo file .bashrc, imposta il percorso ogni volta che apri una finestra di terminale. diversamente da Sessioni SSH, per cui è necessario effettuare il login, queste sono chiamate sessioni “interattive”.

In passato, avresti inserito il comando di esportazione nel tuo file .profile per impostare il percorso per l’accesso alle sessioni del terminale.

Tuttavia, abbiamo scoperto che se inseriamo il comando export nei file .bashrc o .profile, imposta correttamente il percorso sia per le sessioni interattive che per quelle del terminale. La tua esperienza potrebbe essere diversa. Per gestire tutte le eventualità, ti mostreremo come farlo in entrambi i file.

Usa il seguente comando nella tua directory / home per modificare il file .bashrc:

gedit .bashrc

Il

L’editor di gedit si apre con il file .bashrc caricato.

L'editor di gedit con l'estensione

Scorri fino alla fine del file, quindi aggiungi il seguente comando di esportazione che abbiamo usato in precedenza:

export PATH=/home/dave/work:$PATH

Salva il file. Successivamente, chiudi e riapri la finestra del terminale o utilizza il comando punto per leggere il file .bashrc, come segue:

. .bashrc

Quindi, digita il seguente comando echo per controllare il percorso:

echo $PATH

Il

Questo aggiunge la directory / home / dave / work all’inizio del percorso.

Il processo per aggiungere il comando al file .profile è lo stesso. Digita il seguente comando:

gedit .profile

Il

L’editor di gedit viene avviato con il file .profile caricato.

L'editor di gedit con l'estensione

Aggiungi il comando di esportazione in fondo al file, quindi salvalo. La chiusura e l’apertura di una nuova finestra di terminale non è sufficiente per forzare la rilettura del file .profile. Affinché le nuove impostazioni abbiano effetto, è necessario disconnettersi e accedere nuovamente o utilizzare il comando punto come mostrato di seguito:

. .profile

Impostare il percorso per tutti

Per impostare il percorso per chiunque utilizzi il sistema, è possibile modificare il file / etc / profile.

Dovrai usare sudo, come segue:

sudo gedit /etc/profile

Quando viene avviato l’editor di gedit, aggiungi il comando di esportazione in fondo al file.

L'editor di gedit con l'estensione

Salva e chiudi il file. Le modifiche avranno effetto per gli altri al prossimo accesso.

Una nota sulla sicurezza

Assicurati di non aggiungere accidentalmente i due punti iniziali “:” al percorso, come mostrato di seguito.

Il

Se lo fai, questo cercherà prima nella directory corrente, il che introduce un rischio per la sicurezza. Supponi di aver scaricato un file di archivio e di averlo decompresso in una directory. Guardi i file e vedi un altro file zippato. Chiami unzip ancora una volta per estrarre quell’archivio.

Se il primo archivio conteneva un file eseguibile chiamato unzip che era un eseguibile dannoso, avresti accidentalmente attivato quello invece del vero eseguibile unzip. Ciò accadrebbe perché la shell cercherebbe prima nella directory corrente.

Quindi, fai sempre attenzione quando digiti i comandi di esportazione. Usa echo $ PATH per rivederli e assicurarti che siano come vuoi che siano.