Attenzione: l'articolo è stato scritto da oltre 1 anno, le informazioni in esso contenute potrebbero essere datate e non più attuali.

Le personalizzazioni più utili della bash: PATH, alias, prompt

Se operiamo da linea di comando, dopo essere entrati nel sistema ci troveremo di fronte ad una shell che ci permetterà di interagire col sistema accettando i nostri comandi. Nel mondo Linux esistono una gran varietà di shell, riflettendo la natura modulare del sistema. Possiamo distinguere tra due grandi gruppi: le shell compatibili con la shell Bourne e quelle compatibili con le shell C. Queste tipologie di shell conservano tra di loro un certo grado di compatibilità insieme a numerose differenze soprattutto per quanto riguarda la programmazione e i comandi per le impostazioni delle shell stesse.

Io analizzerò solo la shell bash (Bourne Again Shell), la shell compatibile con la Bourne creata dal progetto GNU che é una delle più diffuse e delle più potenti su Linux, è compatibile POSIX, offre l'editing della linea di comando, la presenza di una cronologia dei comandi dati e altro. Per sapere quale shell state usando potete dare il comando:

echo $SHELL

I diversi tipi di Shell

All'interno di una stessa shell distinguiamo tra shell di Login, quella che si avvia nel momento in cui ci loggiamo nel sistema dopo l'immissione di username e password, shell interattive, quelle che permettono di inserire comandi, può essere anche di login (pensate ai terminali lanciati da ambiente grafico),e shell non interattive, quelle lanciate ognivolta che eseguiamo uno script.
A seconda del tipo di shell il sistema leggerà diversi file di configurazione.

I file di configurazione

La shell bash utilizza, per il suo funzionamento, alcuni file di sistema (/etc/profile, /etc/bashrc, /etc/profile.d/ ) più alcuni file presenti nella propria home che permettono di personalizzare l'ambiente della shell per il singolo utente. In particolare a seconda del tipo di shell vengono letti i seguenti file:

  • Shell di Login: /etc/profile e poi dalla propria home .bash_profile, .bash_login, .profile (di questi ultimi tre verrà letto solo il primo file esistente)
  • Shell di Login: .bash_logout, questo file viene letto all'uscita dalla shell
  • Interattiva: .bashrc
  • Non interattiva: variabile d'ambiente BASH_ENV

Assicuratevi che nel file .bash_profile ci siano le seguenti righe:

if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

in questo modo ognivolta che lanceremo la shell di login verrà letto anche .bashrc (se esiste). Potremo quindi fare ogni modifica in .bashrc con la sicurezza che questo verrà sempre letto.

Quando vogliamo modificare permanentemente alcune caratteristiche della shell dovremo editare i file visti in precedenza. Se vogliamo che le modifiche influenzino tutti gli utenti di sistema agiremo sui file contenuti in /etc/ (profile, ecc...) se invece ci interessa il singolo utente agiremo sui file di configurazione presenti nella sua home, (.bashrc, .bash_profile, ecc...).

Dopo aver modificato i file di configurazione per rendere effettive le modifiche dobbiamo far rileggere al sistema il file modificato con il comando source nome_file (es. source .bashrc).

PATH -- Modificare i percorsi

Può capitare che dopo aver installato un programma, digitiamo il comando (es. mozilla) che dovrebbe farlo avviare e otteniamo semplicemente un laconico "Command not found" o simile. Il problema risiede nel fatto che la shell cerca i programmi in alcune directory che sono elencate nella variabile d'ambiente PATH.
Se vogliamo avviare quel programma dovremmo o inserire il percorso completo (es. /usr/local/bin mozilla) o modificare la variabile d'ambiente. Quest'ultima operazione è molto semplice nel digitare in una shell:

export PATH=$PATH:/cartelle/da_aggiungere/al_path
(es.: export PATH=$PATH:/usr/local/bin )

o, se vogliamo rendere permanenti le modifiche, scrivere qualcosa del genere:

PATH=$PATH:/usr/local/bin
export PATH

in .bashrc se vogliamo modificare la variabile per un solo utente oppure in /etc/profile (ma questo file potrebbe variare in base alla distribuzione) se vogliamo che la modifica influenzi tutti gli utenti del sistema.
Dopo aver modificato il file .bashrc è necessario far rileggere al sistema il file in questione con i seguenti comandi:

source ~/.bashrc oppure

. ~/.bashrc

N.B. Tieni presente che la shell cercherà il comando partendo dalla prima cartella elencata e proseguendo verso destra. Quindi nell'esempio sopra, /usr/local/bin/ sarà l'ultima cartella in cui cercherà la shell.

Es.: Il mio .bashrc

Il mio .bashrc si presenta, nella zona interessata, in questo modo:

PATH=/opt/java/bin:/usr/local/bin:/usr/local/sbin:/usr/local/Acrobat5/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export PATH LD_LIBRARY_PATH

Dall'esempio possiamo capire che con la stessa tecnica possiamo modificare anche altre variabili d'ambiente.

Alias -- Riassumiamo i comandi

Gli alias sono un comodo meccanismo che permettono di assegnare nomi più facilmente ricordabili ai comandi che digitiamo solitamente nella shell. Ad esempio, digitando le seguenti righe in una shell:

alias ll='ls -ltr'

assegneremo all'alias ll il comando ls -ltr. Sarà quindi sufficiente digitare ll per ottenere lo stesso output di ls -ltr. Il meccanismo degli alias è così utile, che tutte le distribuzioni hanno degli alias preimpostati basta digitare in una console alias senza alcun altro parametro per averne una lista.

Ecco alcuni alias che uso sul mio pc:

alias cd..='cd ..'
alias cp='cp -i'
alias d='ls'
alias kde='xinit /usr/bin/startkde'
alias l='ls'
alias mtink='sudo mtink'

Rendere gli alias permanenti

Per rendere un alias permanente basta scrivere in .bashrc o in /etc/profile una riga come la seguente:

alias mutt='mutt -l'

questa riga ci permettera di invocare mutt con lo switch -l ogni volta che scriviamo semplicemente mutt.

Un alias ha il difetto di non poter accettare parametri in forme complesse. Per superare questo inconveniente possiamo ricorrere alle funzioni. Scrivendo sempre in .bashrc qualcosa come:

function gzless()
{
gzip -cd $1 | less ;
}

potremo leggere un qualsiasi file gzippato semplicemente con:

gzless file.txt.gz

N.B. Ricordare di far rileggere il file di configurazione per rendere effettive le modifiche: source ~/.bashrc (Vedi più su in PATH).

Prompt -- Dimmi che prompt hai e ti dirò chi sei

Dopo essere entrati nel sistema (login) apparirà il prompt, come il seguente:

[vargas@localhost vargas]$

Solitamente il prompt termina con $ se l'utente loggato è un utente normale, mentre termina con # se l'utente loggato è root. Questo comportamento, come anche il resto del prompt, può essere modificato agendo su alcune variabili: PS1 e PS2, la prima permette di modificare il prompt mentre la seconda permette di indicare il simbolo usato quando il comando viene completato su più righe. Vediamo alcuni esempi:

export PS1='\w@\u>'

permette di ottenere questo: ~@vargas>

Altre variabili da poter inserire nel prompt le potete trovare con un "man bash", eccone alcune:

\d --Data
\w -- Directory corrente
\u -- Nome dell'utente
\t -- Ora corrente
\s -- Nome della shell

Rendere permanente il prompt

Come Path e alias basterà inserirlo in un file di configurazione con la seguente sintassi:

PS1='\w@\u>'
export PS1

Ulteriori risorse sulla rete ...

... e su questo sito

Il tuo voto: Nessuno Media: 4.6 (5 voti)

Commenti

variabile d'ambiente PATH

root@luigi:/home/luigi# PATH=$PATH:/home/luigi/Desktop/myProgram/
root@luigi:/home/luigi# export PATH
root@luigi:/home/luigi# $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/luigi/Desktop/myProgram/: No such file or directory
root@luigi:/home/luigi# exit
exit
luigi@luigi:~$ $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games: No such file or directory
luigi@luigi:~$

 

Come si può notare non mi rende permanenti le modifiche..

come fare?

Grazie...Saluti...

Inserisci le modifiche nel

Inserisci le modifiche nel file .bashrc  come detto sopra per gli alias.

Ciao, Mike

personalizzazioni utente

buongiorno a tutti
Ho un sistema multitutente nel quale vorrei far sì che al login di ogni utente nella sua directory personale si facciano dei controlli sull'esistenza di alcune directory e sul loro contenuto.

Pensavo di operare sul file bash posto nella sua cartella ma non voglio modificare ogni singolo bash utente visto che gli utenti sono destinati a crescere. Quello che vorrei è modificare il bash "template" (se esite...) che viene creato nella cartella utente alla sua prima login.

Suggerimenti?