Prima di andare avanti e cominciare a portare le nostre modifiche, per la personalizzazione di linux, abbiamo bisogno di ancora un altro strumento di base, ovvero un editor di testo che ci consenta di modificare agevolmente i nostri file di configurazione.
L'editor standard che si usa in Linux si chiama vi
.
La domanda che spessissimo viene posta dai neoutenti è: ``Possibile che
non esista qualcosa di meno complicato di vi
per scrivere?'' La
risposta è: ``Si, esistono altri buoni editor, ad esempio joe
o
jed
che sono anche più semplici di vi
.''
Tuttavia vi
, grazie alla sua flessibilità e potenza,
rimane lo standard per quanto riguarda i sistemi *nix.
Quando avrete fatto un po' di abitudine ai suoi comandi, vi
accorgerete di non poterne fare assolutamente a meno, conosco
molta gente che lo ha ricompilato anche in una versione per
dos al fine di poterlo usare anche per quel sistema operativo.
vi
vi
è un editor a tutto schermo, che risponde alla ben precisa
esigenza di poter lavorare su un terminale anche in remoto, e
come tale non dispone di nessuna delle funzionalità grafiche
o di formattazione spesso comuni a molti WP, in realtà
pur rispondendo a molte delle caratteristiche di un WP, per
possibiltà di ricerca e manipolazione del testo, esso rimane
e sempre rimarrà un Editor se pur molto potente, editor
che fra le altre cose come già detto deve rispondere anche alla
caratteristica di poter essere usato in remoto.
L'editor vi
può essere richiamato a linea di comando in molti
diversi modi:
vi
parte semplicemente l'editor con un buffer vuoto
vi miofile
parte l'editor, il buffer viene riempito con il
contenuto di nomefile
.
Se nomefile
non esiste allora viene creato.
vi miofile tuofile
tratterà sequenzialmente prima miofile
e poi
tuofile
.
A riga di comando possono essere dati anche altri comandi come ad
esempio la riga in cui l'editor si deve piazzare inizialmente o
la parola su cui l'editor si deve piazzare e molti altri.
Come al solito si consiglia ``man vi
''.
Vi accorgerete subito che appena entrati nell'editor non vi sarà concesso di fare alcuna operazione.
vi
infatti funziona con diverse modalita:
La modalità comando vi consente di compiere alcune operazioni, quali ad esempio rimuovere una riga o un carattere. Questa modalità può essere usata direttamente.
Premendo il tasto [i]
entrerete in modalità testo, a questo
punto sarete in grado di scrivere, ma non sarete ad esempio
in grado di cancellare un carattere, cancellare una frase, o
cercare una parola.
Si esce dalla modalità testo premendo il tasto [Esc]
.
Premendo a questo punto il tasto lsqb;:]
entrerete nella
modalità due punti, che è quella che vi consente di
compiere la maggior parte delle operazioni, quali la ricerca
del testo (anche con espressioni regolari), la sostituzione
e molto altro.
Ecco un elenco dei comandi di base di vi
:
i
entra in modalità inserimento prima della posizione corrente del cursore
a
entra in modalità inserimento dopo la posizione corrente del cursore
I
entra in modalità inserimento all'inizio della linea
A
entra in modalità inserimento alla fine della linea
O
sposta il testo seguente di una riga verso il basso e si posiziona nella riga vuota
o
come O
solo che la riga vuota viene creata dopo la
riga corrente
dw
cancella 1 parola
dw
dove n è un numero, cancella n parole
dd
cancella una riga
dd
dove n è un numero, cancella n righe
(Il testo cancellato dal comando dd, finisce in un buffer, e può essere
re-incollato nel documento tramite il comando p
)
x
cancella un carattere
x
dove n è un numero, cancella n caratteri
u
annulla l'ultimo comando
/{pattern}
ricerca un pattern
nel testo
corrente in avanti
?{pattern}
come /
ma la ricerca
avviene all'indietro
n
trova il prossimo pattern indicato nella stringa di ricerca
ZZ
salva ed esce
cw
sostituisce una parola
cc
sostituisce una linea
Vediamo ora la modalità due punti:
:w
nomefilesalva il file, nomefile è opzionale, se non viene inserito il file viene salvato con il nome corrente
:q
esce
:wq
scrive ed esce
:r
nomefileinserisce un file all'interno del documento corrente
:s/
pattern1/
pattern2sostituisce tutte le occorrenze della stringa pattern1 con la stringa pattern2
Con questi comandi iniziali, dovreste essere già in grado di compiere moltissime operazioni.
Tuttavia vi
è diventato lo standard nel mondo *nix non solo grazie a
queste semplici cose, ma anche e soprattutto per l'uso avanzato, che
comporta ad esempio la conoscenza delle espressioni regolari.
A questo punto del programma non ci conviene perderci
nella spiegazione dell'uso delle espressioni regolari,
e tuttavia ci riserviamo di dedicare all'uso avanzato di vi
un intero capitolo in seguito.
Abbiamo già visto che la prima cosa che ci apparirà dopo il bootstrap del sistema operativo è:
Welcome to Linux 1.3.56.
darkstar login:
e sappiamo anche che dal momento che attualmente l'unico user
disponibile è il supervisore del sistema, root.
Pertanto a tale domanda sappiamo di dover rispondere con ``root
''.
Una volta compiuta questa operazione, ci troveremo all'interno dell'OS e avremo nelle nostre mani il potere del superuser, ovvero l'utente destinato alla manutenzione del sistema.
Beh, appare logico che una volta entrati con questo potere, vorremo almeno compiere alcune operazioni di base, ad esempio caricare la tastiera italiana.
Dovreste essere già in grado di farlo da soli, senza
l'ausilio del programma culturale, sappiamo infatti che
il file che contiene i comandi locali all'OS e che
tipicamente viene consultato al bootstrap del sistema
è /etc/rc.d/rc.local
, quindi tipicamente metteremo
lì (a meno dell'esistenza di specifici script) i comandi
che vogliamo che il sistema esegua al bootstrap.
Il comando che richiama i codici di descrizione della
tastiera è loadkeys
.
Il formato di loadkeys e':
loadkeys [options] path/filename
dove options
sono una serie di opzioni che possono essere
date al comando, per l'uso delle quali vi consiglio:
``man loadkeys
''.
path/filename
, invece, è obbligatorio e specifica il percorso
e il nome del file che contiene la descrizione della tastiera.
Tipicamente i file che contengono la mappa dei caratteri
si trovano in /usr/lib/kbd/keytables/
pertanto ad esempio il comando
loadkeys /usr/lib/kbd/keytables/it.map
richiama i codici della tastiera italiana.
Se come è ovvio vogliamo che tali codici siano
richiamati ogni volta al bootstrap, allora non
ci resta che inserire questo comando in /etc/rc.d/rc.local
vi /etc/rc.d/rc.local
i
echo "Sto caricando la tastiera italiana .... "
/usr/bin/loadkeys /usr/lib/kbd/keytables/it.map
[Esc]
:wq
profile
e .profile
Altra operazione che probabilmente vorremo compiere la prima volta che ci logghiamo al nostro sistema è quella di cambiare il path (percorso di ricerca) e il prompt del nostro OS.
Tipicamente le variabili di sistema comuni a tutto
l'ambiente vengono definite nel file /etc/profile
,
quindi è in questo file che dovremo andare a guardare
se vogliamo modificare le variabili d'ambiente
quali ad esempio PATH
e PROMPT
, diamo dunque un'occhiata
cat /etc/profile
PS1=$LOGNAME'\w''/$>'
export MINICOM="-c on"
export MANPATH=/usr/local/man:/usr/man/preformat:/usr/man:/usr/X11/man:/usr/openwin/man
export HOSTNAME="`cat /etc/HOSTNAME`"
export LESSOPEN="|lesspipe.sh %s"
export COLUMNS=80
alias shut='shutdown -t15 -rfn now'
export TERM=linux
PATH="$PATH:/usr/X11/bin:/usr/andrew/bin:$OPENWINHOME/bin:/usr/games:."
if [ "$TERM" = "" -o "$TERM" = "unknown" ]; then
TERM=linux
fi
PS2='> '
ignoreeof=10
export PATH DISPLAY LESS TERM PS1 PS2 ignoreeof
umask 022
Come vedete oltre alla definizione del PATH
PATH="$PATH:/usr/X11/bin:/usr/andrew/bin:$OPENWINHOME/bin:/usr/games:."
e del prompt
PS1=$LOGNAME'\w''/$>'
ci sono altre variabili interessanti che vengono definite al livello di sistema.
Ognuna di queste variabili ha un significato particolare,
per approfondimenti vedere ``man bash
'', si tratta di una lettura
interessante anche per tantissime altre cose.
Per quanto riguarda le variabili di sistema, vi accorgerete subito che ne esistono moltissime e la ridefinizione di ognuna comporta un notevole grado di personalizzazione dell'OS.
Ma torniamo alla ridefinizione del path, la variabile che
si occupa di questo è PATH
, la cui sintassi non mi sembra cosi
complessa.
PS1
è già un po' più interessante, si tratta della variabile
che individua il prompt principale del sistema,
PS1=$LOGNAME'\w''/$>'
io l'ho definito come segue:
$LOGNAME indica l'utente che attualmente è loggato al sistema
\w indica la directory corrente di lavoro,
/$> è semplicemente un separatore che voglio sia messo per
dividere il prompt dalla linea di lavoro.
Altri interessanti simboli sono ad esempio:
\t L'orario corrente, nel formato HH:MM:SS
\d La data corrente, nel formato
``Giorno, Mese, datadelgiorno'' (es., ``Tue May 26'')
\n Carattere di fine linea
\s Il nome della shell corrente
\w La directory di lavoro corrente
\u Il nome dell'utente corrente
\h L'hostname
\nnn il carattere corrispondente al numero ottale nnn
\\ backslash
\[ Inizia una sequenza di caratteri non stampabili che ad esempio
possono servire a definire il colore del prompt
\] Termina la sequenza di caratteri non stampabili.
Possiamo ridefinire il prompt a nostro piacimento.
Al termine modificheremo il file /etc/profile
,
con vi
aggiungendo la parola export
davanti alla ridefinizione
della variabile, ad esempio
export PS1='\u''\w''/$>'
la parola export
farà sì che la variabile PS1
venga esportata come
variabile d'ambiente a tutti gli utenti che si loggano al sistema.
In alternativa a /etc/profile
si può usare il file
~/.profile
.
La ``~
'' indica la home dir di un utente, .profile
è il nome di un file, il fatto che sia preceduto
dal puntino indica che il file è nascosto.
I file .profile
risiedono nella home dir dell'utente
e vengono consultati solo quando quell'utente si logga
nel sistema.
Ad esempio il mio è:
clear
echo ' '
echo 'Benvenuti nel sistema Linux di Fabio Farnesi'
echo ' '
date
echo ' '
ls
echo ' '
che come vedete non fa niente di eccezionale, tranne cancellare lo schermo, darmi il benvenuto e mostrarmi data corrente ed elenco delle directory ogni volta che mi loggo come root.