Comprendere i percorsi in Linux

Introduzione

Capire come funzionano i percorsi è una parte piuttosto importante del lavoro con la riga di comando su qualsiasi sistema Linux/BSD/Unix. La variabile d'ambiente PATH dice al sistema dove cercare i comandi. È un elenco di percorsi delimitato da due punti. Nel caso di Weewx, ci sono in genere due percorsi che contano di più: il percorso del comando e il percorso del file di configurazione weewx.conf.

Iniziamo con un'operazione di base di Weewx: eseguirlo direttamente. Come spiegato nella guida per l'utente, questo significa invocare il demone weewx, weewxd, con un file di configurazione weewx.conf. Nella sua forma più generale, assomiglia a questo:

weewxd weewx.conf

Tuttavia, le specifiche su come inserirlo effettivamente dipendono da come e dove è stato installato Weewx.

Installazioni con setup.py

Ad esempio, se Weewx è stato installato utilizzando setup.py nella posizione predefinita /home/weewx, i seguenti comandi sono equivalenti:

/home/weewx/bin/weewxd /home/weewx/weewx.conf

O

cd /home/weewx
./bin/weewxd weewx.conf

Il primo esempio utilizza un percorso esplicito e assoluto sia per weewxd che per weewx.conf, quindi può essere eseguito da qualsiasi directory.

Il secondo esempio mostra un cd (cambia directory) alla directory in cui è stato installato Weewx ( /home/weewx), seguito da percorsi relativi sia a weewxd che a weewx.conf. L'uso di ./ in ./bin/weewxd potrebbe non essere necessario per un utente non root, ma è tipicamente necessario per un utente root. Questo perché la directory corrente ( .) di solito non è nella PATH per l'utente root.

Quello che non funzionerà è questo:

cd /home/weewx/bin
weewxd ../weewx.conf

Il motivo è semplice: per impostazione predefinita, la "directory corrente" non è inclusa nel tuo file PATH. Il motivo è evitare di eseguire accidentalmente una versione dannosa di un programma comune come ls o mv. Invece, devi includere in modo esplicito la directory corrente quando invochi il programma. Quindi, questo funzionerà:

cd /home/weewx/bin
./weewxd ../weewx.conf
Installazioni con DEB o RPM

Consideriamo ora il caso in cui Weewx sia stato installato da un pacchetto .deb o .rpm. In questo caso i comandi sono equivalenti:

/usr/share/weewx/weewxd /etc/weewx/weewx.conf
cd /usr/share/weewx
./weewxd /etc/weewx/weewx.conf
weewxd /etc/weewx/weewx.conf

Il primo esempio usa un percorso esplicito e assoluto per entrambi weewxd e weewx.conf.

Il secondo esempio mostra un cd (cambia directory) alla directory in cui sono installati i componenti Weewx, seguito da un percorso relativo a weewxd e da un percorso assoluto a weewx.conf. Il percorso assoluto è necessario poiché weewx.conf non è nella gerarchia della directory /usr/share/weewx.

Il terzo esempio illustra una caratteristica speciale di un'installazione .deb o .rpm. C'è un collegamento simbolico /usr/bin/weewxd che punta all'eseguibile effettivo /usr/share/weewx/weewxd. Poiché /usr/bin si trova nella PATH variabile di ambiente, si può semplicemente digitare weewxd invece del percorso completo /usr/bin/weewxd e, poiché si tratta di un collegamento simbolico, esegue l'effettivo weewxd in /usr/share/weewx/weewxd.

Altri comandi in Weewx

Altri comandi in Weewx usano uno schema simile. Ad esempio, il comando wee_config_device viene utilizzato per visualizzare e modificare le opzioni nell'hardware. Oltre a richiedere un file di configurazione, riconosce anche molte opzioni, come --info o --help. La descrizione generica è simile a questa:

wee_device /path/to/weewx.conf --help

Per un'installazione setup.py, questo sarebbe:

/home/weewx/bin/wee_device /home/weewx/weewx.conf --help

Per un'installazione .deb o .rpm, questo sarebbe:

/usr/share/weewx/wee_device /etc/weewx/weewx.conf --help

o, ancora più sinteticamente:

wee_device --help

La forma finale è possibile perchè i comandi wee_* cercheranno nelle posizioni standard /etc/weewx/weewx.conf e /home/weewx/weewx.conf, se non è specificato alcun file di configurazione.

Privilegi

Sui sistemi più moderni, la PATH per l'utente root non include . (la directory corrente). Questo per evitare errori come l'esecuzione di un programma nella directory corrente quando intendevi eseguire un programma di sistema con lo stesso nome.

Di conseguenza, se vuoi davvero eseguire qualcosa nella directory corrente, con privilegi elevati, allora devi eseguire qualcosa del genere:

sudo ./setup.py

invece di questo:

sudo setup.py
Autore: Matthew Wall