[Bash] La variabile d'ambiente PATH

Ultimo aggiornamento 29 maggio 2009 alle 13:23 da n00r
Pubblicato da n00r

La variabile d'ambiente PATH




I. Preambolo


Sotto la GNU/Linux, ci piaccia o no, siamo diventati amministratori del nostro sistema. Sempre più spesso, vediamo sotto GNU/Linux l'apparizione di programmi grafici che permettono di eseguire compiti amministrativi.

Ma la riga di comando conosciuta sotto diversi nomi (shell, terminale, console, ecc.) È ancora uno strumento molto potente e facile da maneggiare.

Dopo aver imparato le basi, sarai sorpreso della facilità d'uso della linea di comando.

<parentesi>
L'uso della linea di comando è molto più veloce che l'uso di una utility grafica. Se si conta il tempo per caricare l'interfaccia, la ricerca (fisica) del mouse sul desktop, e senza contare il fatto che saresti costretto a digitare anche usando l'interfaccia grafica, allora ti privi di alcuni vantaggi offerti dalla "linea di comando", come il tasto TAB per il completamento dei comandi, o la cronologia che permette di ripetere un comando, o alias per i comandi lunghi, ecc

Lo svantaggio per la shell è che non si può tenere la tazza di caffè o una sigaretta in una mano mentre l'altra digita sulla tastiera.
Con il mouse si può fare, fino a quando non si devono compilare i campi chiesti dal utilità grafica.
Ma forse con la shell si smettere di fumare ...

Ma sei sempre sotto GNU/Linux e la scelta è tua.
</parentesi>

Come la libertà ha un prezzo, beh, devi pagare.
Nel caso di sistemi GNU/Linux, il prezzo è la libertà di leggere la documentazione disponibile sul proprio sistema, vedere le pagini "man" e il comando "info", per sfruttare meglio il sistema.

Si può anche vedere le pagine "man" col browser Konqueror utilizzando l'URL man:/
Su Internet si trovano traduzioni in italiano delle pagine "man".

II. Cosa è la shell ?


È un software che fa parte del sistema e che a il ruolo di trattare dei comandi o righe di comandi digitate alla tastiera.

Per vedere l'elenco delle shell disponibile sul sistema, vedi /etc/shells
cat /etc/shells
Un utente sotto Linux ha per default una shell di connessione.

Vedi il file /etc/passwd si vede in basso cosa nel genere /bin/<qualcosa>. Si tratta della tu shell di connessione.

Per vedere le shell degli utenti, si può utilizzare il comando
cat /etc/passwd | cut -d: -f1,7
Per un utente specifico, si completa il comando nel modo seguente :
cat /etc/passwd | cut -d: -f1,7 | grep utente


Se sia in modalità grafica si può aprire un terminal (xterm,gterm,konsole,...) e quindi scrivere le righe di comando.

Da sapere: sotto GNU/Linux si dispone di 6 console virtuale, al quale si accede nell'interfaccia grafica tramite la combinazione di tasti Ctrl+ALT+Fn dove n è un cifra da 1 a 6.

Da una console virtuale, si può passare ad un'altra con la combinazione ALT+Fn, (con n da 1 a 6).
Per tornare alla modalità grafica da una console virtuale, fare ALT+F7.

In una shell, viene visualizzato un prompt, come ad esempio:
utente@debian: ~$

Se al poste di $ c'è un #, allora si è accesso come root, se non viene cambiata la configurazione.

Il prompt varia a seconda del sistema operativo e può essere modificato attraverso un'altra variabile d'ambiente PS1.

III. Definizione


Cominciamo col termine generico di variabile

Una variabile, è un contenitore di memoria che memorizza un dato che può cambiare durante l'esecuzione di un programma.

Quindi una variabile ha un nome e un contenuto. Non entriamo nei dettagli della programmazione per spiegare il tipo di variabile e loro contenuto.

Ci basta per il momento sapere che la variabile in questione si chiama PATH e il suo contenuto è una stringa contenente i percorsi delle directory separati da due punti :

Per visualizzare il contenuto di una variabile nella shell, si digita
echo $variabile
Nel caso della variabile PATH, si deve digitare
echo $PATH
IMPORTANTE! è sensibile alle maiuscole. GNU/Linux fa un distinzione tra maiuscole e minuscole.

Per visualizzazione più piacevole, è possibile utilizzare il comando
echo $PATH | tr : \\n

Ecco alcuni altri modi per visualizzare il contenuto di PATH.
printenv PATH
env | grep -i PATH | cut -d= -f2
perl -e 'print $ENV{PATH},"\n"'
perl -e '$,="\n" and print split(":",$ENV{PATH}),""'
perl -e '($_=$ENV{PATH})=~s/:|$/\n/g and print'

Sicuro che è meglio usare il comando più breve.

IV. Sessione dissezione


Abbiamo visto che la variabile PATH contiene un elenco di directory separate da due punti :

Sono le directory nelle quale la shell cerca il comando che scriviamo alla tastiera.
La ricerca si fa nell'ordine delle directory contenute nella variabile PATH.

Esempio :
lami20j@debian: ~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/lami20j/bin
Quando scriviamo un comando la shell cerca prima in /usr/local/bin, poi in /usr/bin, poi in /usr/bin/X11, poi in /usr/games e in fine in /home/lami20j/bin.
Quando la shell trova il comando allora si ferma di cercare eseguendo il comando trovato.

Un comando è possibile scriverlo usando :
- suo nome
- il percorso assoluto ( /bin/cat /etc/passwd )
- il percorso relativo ( usiamo "." o ".." in generale per dei programmi o script che non si trovano nella PATH)

. è la directory corrente
.. è la directory parente

Scrivendo un comando si può ottenere varie situazioni:
1. il comando è unico ed è situato in una directory
2. il comando non è unico e si trova in diverse directory
3. il comando non è in nessuna directory

1. Nel prima caso, tutto è semplice.
Se c'è un errore all'esecuzione, la causa è certamente la sintassi.
Soluzione : riferirsi al manuale del comando

2. Nel secondo caso, ci sono qualche complicazioni.
Supponiamo che abbiamo un comando che è in /usr/bin e che abbiamo installato dalle sorgenti una nuova versione del comando il cui eseguibile è in /usr/local/bin.

Se il comando viene chiamato con il suo nome, cosa accadrebbe?

La shell guarda in PATH, a partire dalla prima directory incontrata.
Nel nostro caso, trova il comando in /usr/local/bin quindi è /usr/local/bin/prog che viene eseguito.

Tuttavia, se si vuole comunque eseguire il comando prog, che è in /usr/bin, quindi occorre utilizzare il percorso assoluto /usr/bin/prog

3. Il terzo caso contiene 2 situazioni

- il comando esiste ma non si trova in nessuna directory di PATH
- il comando non esiste

Nei due casi, il messaggio di errore sarà 'command not found'

Ma l'interpretazione non sarà la stessa.

Ci sono comandi che solo root può usare.
Soluzione : accedere come root con su o su -
Utilizzare il comando "su"
Ci sono comandi che si trovano in una cartella che non si trova nella tua variabile PATH.
Soluzione: - usare il percorso assoluto
- aggiungere la directory alla tua PATH

Hai creato uno script e non riesci ad eseguirlo qualsiasi il percorso specificato ?

Soluzione : - verificare i diritti di esecuzione sullo script ( ls -l script )

Il comando non esiste, in questo caso penso che sai cosa fare. se non lo sai ecco la soluzione;
Chiedere all'amministratore di installarti il programma.

È possibile cercare l'esistenza di un comando usando sia whereis sia which
whereis comando
which -a comando
Nel caso di which l'opzione -a permette di vedere i percorsi corrispondenti.
Senza l'opzione -a viene visualizzato solo la prima directory che contiene il comando, ciò non è utile se il comando si trova in diverse directory.

V. Aggiungere una directory alla variabile PATH


- solo per la sessione corrente

Se si vuole aggiungere per esempio /home/user/mes_prog alla variabile PATH, nella shell digita
export PATH=$PATH:/home/user/mes_prog
per avere la directory alla fine in PATH.

o
export PATH=/home/user/mes_prog/:$PATH
per avere la directory all'inizio in PATH.

ora è possibile usare il programma digitando solo il suo nome.

Nella sconnessione PATH riprende il suo valore di default, quindi /home/user/mes_prog non esiste più in PATH.

- permanente

Se si vuole configurare PATH in modo permanente de, si deve modificare il file di configurazione della shell di connessione.
Visto che di solito è la shell BASH che è usata, si deve modificare il file /home/user/.bashrc.

Per ciò, è possibile utilizzare un editore di testo, o semplicemente un comando per facilitarsi il compito.
Eh si, di solito l'uso della riga di comando rende le cose più facile che l'uso del mouse, soprattutto nei compiti di amministrazione (opinione personale).

Ecco il comando
echo 'export PATH=$PATH:/home/user/mes_prog' >> /home/user/.bashrc 
Così ad ogni connessione la tua PATH contiene la directory /home/user/prog

Questa operazione può essere eseguita da utente user visto che si tratta del suo ambiente.

VI. Per concludere


La variabile PATH è una variabile tra decine che contiene la shell.

È possibile visualizzare le variabile del suo ambiente anche senza conoscere il loro nomi.

Per farlo ci sono diversi comandi

printenv
env
set
export




____________________________

Nota: L'articolo originale è stato scritto da lami20j contribuente di CommentCaMarche
Migliori risposte per « La variabile d'ambiente PATH » in :
Variabili ambientali Vedi Variabili ambientali Una variabile ambientale è un valore dinamico, caricato in memoria, che può essere utilizzato da più processi funzionanti in contemporanea. Sulla maggior parte dei sistemi operativi, le posizioni di alcune librerie, ad esempio...
Sistemi operativi - DOS - Astuzie Vedi Avere accesso al lettore di CD-ROM Il lettore di CD-ROM si dichiara nei file config.sys e autoexec.bat. Nel file config.sys bisogna dichiarare il gestore della periferica per il vostro lettore CD-ROM (anche se rilevato automaticamente su Windows)....
Ambiente Client/Server Vedi Presentazione dell'architettura di un sistema client/server Molte applicazione funzionano in un ambiente client/server, questo significa che dei terminali client (dei terminali che fanno parte della rete) contattano un server, un terminale...
SHELL BASH - GUIDA Livello Principiante VediIntroduzione II. Cosa è la shell ? III. Come accedere alla linea di comando IV. Le console virtuali Esempio : Accedere alla console 3 dall'interfaccia grafica V. Connessione dentro una console virtuale Esempio: VI. Il prompt di comandi...
Eseguire uno script shell VediEseguire uno script Per poter eseguire uno script o un programma in riga di comando ci sono molte possibilità : *1. Il percorso assoluto *2. Il percorso relativo *3. Modificare la variabile PATH *Nota: Lo Sha...
Gnome - Cambiare rapidamente lo sfondo del desktop VediCambiare rapidamente lo sfondo del desktop Si nota che per cambiare lo sfondo del desktop (scrivania) di Nautilus, si deve aprire l'immagine con il visualizzatore poi “immagine > Imposta come sfondo”, ciò non è rapido ne pratico... Però esistono...
Download EasyPHP VediEasyPHP è un ambiente di lavoro impattato che comprende il server web Apache, il sistema di gestione di database MySQL e il supporto per il linguaggio PHP. Viene con phpMyAdmin, un'interfaccia che consente di manipolare facilmente i record nel...
Download Notepad++ VediNotepad++ e' un editor di sorgente gratuito, in ambiente MS Windows, che supporta diversi linguaggi di programmazione. Il progetto, basato sul componente editor Scintilla (un componente editor molto potente) e scritto in C++ facendo uso...
Sistema operativo VediDescrizione del sistema operativo Affinché un computer sia in grado di far funzionare un programma informatico (detto talvolta applicazione o software), il terminale deve essere capace di effettuare un certo numero di operazioni preparatorie per...
Metodologia di gestione di progetto VediLa gestione di progetto - La necessità di una metodologia chiara Viene detta « gestione di progetto » (eventualmente « conduzione di progetto ») l'organizzazione metodologica messa in opera per far si che il lavoro effettuato dal...
Ntvdm - ntvdm.exe Vedintvdm - ntvdm.exe Il processo ntvdm.exe (Windows 16-bit Virtual Machine) è un processo generico di Windows NT/2000/XP che punta a fornire un ambiente a 16-bit per le vecchie applicazioni a 16 bit.Il processo ntvdm non è mai un virus, uno worm, un ...