Sei una ditta individuale o un professionista? Vuoi snellire i costi della tenuta della contabilità e delle dichiarazioni fiscali? A partire da 199€ + IVA all'anno per chi aderisce al regime dei minimi. APERTURA PARTITA IVA INCLUSA
StudioMastellone.com
[Promo] Contabilità on-line
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 ...
- man bash
- Bash - Prompt HOWTO
- Bash - Articolo sul Pluto Journal
- Bash Programming - Introduction HOWTO (in italiano)
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?
Invia nuovo commento