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, 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.
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 che offre l'editing della linea di comando e la presenza di una cronologia dei comandi dati e altro.
per sapere quale shell state usando potete dare il comando:
#echo $SHELL
all'interno di una stessa shell distinguiamo tra:
- shell di Login - che si avvia nel momento in cui ci si logga al sistema;
- shell interattive - che permettono di inserire comandi, può essere anche di login (pensate ai terminali lanciati da ambiente grafico);
- shell non interattive - quelle lanciate ognivolta che eseguiamo uno script.
a seconda del tipo di shell il sistema leggerà diversi 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 (o .profile) ci siano le seguenti righe:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
in questo modo ogni volta 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.
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:
#source .bashrc
variabili di ambiente
può capitare che dopo aver installato un programma, digitiamo il comando (es. firefox) 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 firefox) 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.
gestione ALIAS
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.
Prompt
dopo essere entrati nel sistema (login) apparirà il prompt, come il seguente:
administrator@matrix:~$
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='\u@\h>'
permette di ottenere questo: administrator@matrix>
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