[Intervista a David Miller] [About] [Copertina] [mSQL e Web]

Articoli



OK, Linux... ma ora???
Una piccola guida per passare da dox a linux

Molti passando dall' onnipresente dos a Linux si sentono spaesati, raggiunto il sudato prompt si chiedono: e linux dov'e'??? Ora che faccio??
Bene, e' giunto il momento di fare un po' di chiarezza sui comandi che differenziano linux dal sistema operativo del caro Bill.

Innanzitutto vediamo come muoversi all' interno del S.O. :
Una volta avviato linux avremo un prompt di questo tipo:

host:~#
il che vuol dire che vi trovate nella home directory del vostro account, se allora il vostro login e' pallino dovreste realmente trovare nella directory:
/home/pallino/
a questo punto proviamo ad andare nella directory principale del sistema (root) quindi:
cd /
OK, ora siamo al principio, un po' come C:/ del dos.
Linux permette anche di poter vedere il contenuto di una directory (:-)) con il comando:
ls
Ora dovremmo vedere i nomi dei file e delle sottodirectory , per vedere anche le informazioni riguardanti i file e' sufficiente aggiungere l' attributo -l, il risultato sara' simile a questo:

total 401
drwxr-xr-x   2 root     bin          2048 Aug  6 00:05 bin/
drwxr-xr-x   2 root     root         1024 Aug  6 00:26 boot/
drwxr-xr-x   2 root     root         1024 Sep  4  1995 cdrom/
drwxr-xr-x   2 root     root         9216 Aug  6 23:44 dev/
drwxr-xr-x  10 root     root         2048 Aug  6 23:44 etc/
drwxr-xr-x   3 root     root         1024 Aug  6 00:05 home/
drwxr-xr-x   2 root     root         1024 Aug  6 00:01 lib/
drwxr-xr-x   2 root     root        12288 Aug  5 23:51 lost+found/
drwxr-xr-x   2 root     root         1024 Sep  4  1995 mnt/
dr-xr-xr-x   7 root     root            0 Aug  7 00:44 proc/
drwxr-x--x   4 root     root         1024 Aug  6 00:15 root/
drwxr-xr-x   2 root     bin          2048 Aug  6 00:05 sbin/
drwxrwxrwt   3 root     root         1024 Aug  6 23:50 tmp/
drwxr-xr-x  19 root     root         1024 Aug  6 00:15 usr/
drwxr-xr-x  16 root     root         1024 Aug  6 00:15 var/
-r--------   1 root     root       336975 Aug  6 00:05 vmlinuz
Vediamo di decifrare queste informazioni, si puo' subito notare che i nomi dei file si trovano all' estrema destra, subito dopo alla data e l' ora di scrittura del file e le sue dimensioni. Proseguendo verso sinistra si trovano il gruppo di appartenenza , il proprietario del file, il numero dei puntatori sul file ed infine i permessi del file.
Non spaventatevi, vedremo tutto piu' a fondo piano piano.

Poiche linux e' un Sistema Operativo multiutente e' necessario poter proteggere i file e le directory dagli altri utenti. Per questo sino stati introdotti i permessi , che riguardano la lettura (read), la scrittura (write) e l' esecuzione (execute) relativi al proprietario, al gruppo e a tutti gli altri utenti.
In pratica :
-rwxr-xr-- 2  utenti     pallino          2048 Aug  6 00:00 miofile
significa che il propietario puo' leggere, scrivere ed eseguire il file (rwx), gli utenti appartenenti al gruppo del file (specificato nella terza colonna ) possono solo leggere ed eseguire il file (r-x) ed infine gli altri utenti hanno solo il permesso di lettura (r--).
Nella definizione dei permessi il primo carattere (nel caso del file miofile - ) indica il tipo di file.
Per modificare i permessi si utlilizza il comando chmod,i permessi possono essere modificati solo dal proprietario del file, la sintassi del comando e' la seguente:
chmod {a,u,g,o} {+,-} {r,w,x} <nome del file>
Vediamo un po' di esempi fatti sul famoso file miofile:

Comando Azione Risultato
chmod og-r miofile   
Viene tolto il permesso di lettura a tutti gli utenti tranne che al proprietario
   -rwx--x--- 
chmod a+r miofile   
Viene permessa la lettura a tutti gli utenti
   -rwxr-xr--
chmod u-rx miofile   
Toglie i permesso di lettura ed esecuzione al proprietario
   --w-r-xr--
chmod p-rwx miofile   
Toglie il i permessi di lettura, scrittura ed esecuzione a tutti gli utenti tranne che al proprietario
   --w-------
chmod a+xr miofile   
Viene dato il permesso di lettura ed esecuzione a tutti gli utenti
   -rwxr-xr-x
In pratica a,u,g,o corrispondono rispettivamente a tutti (all), utente (user), gruppo (group) e altri (other).
Dopodiche si specifica l' azione : permetti (+) o proteggi (-)
Ed infine si indicano i permessi w,r,x.

L' utilizzo del comando chmod puo' avvenire anche in un secondo metodo, cioe' utilizzando una serie di 3 numeri corrispondenti ai permessi u,g,o secondo la seguente tabella (che ricorda la numerazione binaria):
Numero In binario Risultato
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx

Un esempio chiarira' tutto:
qualunque sia lo stato di partenza con:
 chmod 755 nomefile
si arriva a:
 rwxr-xr-x

Ritorniamo al primo carattere, quello che come prima accennato identifica il tipo di file, alla sinistra dei permessi, il suo valore puo' essere:
Valore Stato
- identifica i file semplici
l link ad altri files
d directory
b files in blocchi
c files di caratteri
p files speciali (sockets)



Ora vediamo qualche comando per gestire i file:

cd Cambia directory, e' sufficiente specificare la destinazione.
Sintassi: cd <path>
ls Visualizza il contenuto di una directory.
Sintassi: ls argomenti <file1><file2> ... <file N>
cp Copia uno o piu' file in un altro file o in una directory
Sintassi: cp <file1><file2> ... <fileN> <destinazione>
mv Sposta uno o piu' file in un altro file o in una directory
Sintassi: mv <file1><file2> ... <fileN> <destinazione>
rm Cancella i file.
Sintassi: rm <file1><file2> ... <fileN>
mkdir Crea una nuova directory.
Sintassi: mkdir <dir1><dir2> ... <dirN>
rmdir elimina directory vuote.
Sintassi: rmdir <dir1><dir2> ... <dirN>
more Visualizza il contenuto dei file.
Sintassi: more <file1><file2> ... <fileN>


Bene, ora penso che si riesca almeno a respirare all' interno del sistema, no???


stdin, stdout and pipeline

Molti comandi sono apparentemente inutili, come ad esempio cat, il quale servirebbe per concatenare dei file, ma la seguente espressione mostra solo il contenuto del file miofile:
cat miofile
questo perche' se nulla viene specificato cat legge i dati dallo standard input e li invia allo standard output.Cioh legge i dati dalla tastiera e li visualizza sul monitor.
Nell' espressione precedente l' output non e' stato specificato, sarebbe bastato:
cat miofile > tuofile
per copiare il contenuto di miofile sul nuovo file tuofile. Se oltre miofile fosse stato specificato un secondo file questo sarebbe stato aggiunto a miofile in tuofile.
Se si fosse eseguito cat senza nessun paramentro questo avrebbe atteso l' immissione di testo dalla tastiera per poi visualizzarlo sul monito, in pratica ad ogni riga scritta questa viene rivisualizzata nella riga sottostante.
Se scriviamo:
ls /  > miofile
viene registrato nel file miofile il contenuto della directory di root, ora possiamo ordinare in ordine alfabetico il contenuto del file (directory root) con il comando sort in questo modo:
sort miofile
oppure possiamo direttamente visualizzare il contenuto di una directory in ordine alfabetico:
ls | sort
in questo modo abbiamo creato una pipeline, ovvero abbiamo passato i dati da un' istruziona ad un' altra. Le combinazioni sono infinite, ad esempio e' possibile visualizzare la directory schermata alla volta sfruttando tale caratteristica di more:
ls | sort | more 
Un ultima cosa, l' istruzione che abbiamo utilizzato in precedenza per trasferire il contenuto di miofile in tuofile (cat miofile > tuofile) e' detta un' istruzione distruttiva in quanto avrebbe definitivamente cancellato l'eventuale contenuto del file tuofile sovrascrivendovi il risultato, se si fosse utilizzato:
cat miofile >> tuofile
il contenuto di miofile sarebbe stato appeso a tuofile senza cancellarne il contenuto.

Variabili d'ambiente e script
Come in tutti (o quasi) i sistemi operativi anche in linux e' possibile dichiarare e gestire delle variabili che sono utilizzabili dalla shell o volendo anche dai programmi in esecuzione, sono variabili d'ambiente ad esempio:
USER=nome
HOME=/home/nome
PATH=.:/bin:/usr/bin
PWD=/
.....
per definire una variabile in bash e' sufficiente un comando come il seguente:
mionome=Enrico
in questo caso la variabile mionome assume il valore Enrico, ora se pero' voglio stampare il valore della variabile mionome devo scrivere:
echo $mionome
il carattere '$' indica alla shell che cio' che segue e' il nome di una variabile e non una stringa.


Ultimo passo e' la creazione di uno script, uno script non e' altro che un file (come i file BAT del DOS) di testo al quale si e' dato il permesso di esecuzione. Di norma conviene nella prima riga di uno script definire per quale shell lo si sta' scrivendo, L' esempio che faro' e' uno script in Bash, e anche se la sua utilita' e' da dimostrare (anzi sono convinto che sia lo script inutile per eccellenza :-)), credo che vada benissimo per far capire in che modo si puo' scrivere uno script (anche perche' ho gia' testato tutto:-)).
Il nome dello script (tenetevi stretti) e' ... dir, la sua utilita?
descrivere la directory dettagliatamente, a colori, e con in principio la path della directory in questione.
Allora facciamo partire il nostro editor preferito (jed, elvis, vi, pico ecc.)
poi scriviamo:
#!/bin/bash
if [$* = ""] 2> /dev/null
then
dir=$PWD
else
dir=$1
fi
if 
  test -d $dir
then
echo "-----------------------------------------------------"
echo "  Questa "$USER" e' la directory: " 
echo "  "$dir                
echo "-----------------------------------------------------"
ls --8bit --color=tty -Fa -T 0 $dir
else
echo " ATTENZIONE LA DIRECTORY "$dir" E' INESISTENTE!"
fi
Vediamo come funziona questo script:
nella prima linea viene (come gia' annunciato) dichiarata la shell che elaborera' lo script. nella seconda riga vediamo un' istruzione di controllo del flusso, tale istruzione controlla che la variabile $* (che equivale alla somma di tutti i parametri chiamati insieme allo script) sia nulla in tal caso assegna alla variabile $dir il valore della directory corrente ($PWD) altrimenti vi assegna il valore del primo parametro $1. Da notare che l' errore generato dall' istruzione IF (seconda riga) viene deviato su /dev/null, ovvero viene gettato via (non viene considerato). La seconda istruzione IF (riga 8) controlla l' esistenza della directory con l' istruzione test, nel caso esista lo script puo' essere terminato generando nello standard output la directory, altrimenti viene visualizzato un errore.
Vi consiglio di utilizzare lo script appena descritto solo come esperimento, per la visualizzazione delle directory continuate ad utilizzare ls!

Nel prossimo articolo osserveremo i LINK tra i file, il controllo dei job e qualche altro nuovo comando.... arrivederci...

di Enrico Rubboli


[Linux...ed ora?] [About] [Copertina] [mSQL e Web]