Quando vi loggate
la prima volta in un sistema UNIX, vi si presenta
qualcosa del genere: 33#33 Si chiama prompt.
Come puo suggerire il nome, vi chiede di inserire un comando. Ogni comando UNIX
e una sequenza di lettere, numeri e caratteri, senza spazi.
Alcuni comandi validi sono : mail, cat e CMU_is_Number-5,ecc .
Alcuni caratteri non sono permessi, verranno elencati piu avanti.
UNIX e anche case-sensitive (sensibile
al maiuscolo/minuscolo) ; cioe cat e Cat
sono comandi diversi....
Il prompt viene visualizzato da un programma speciale, la shell.
La shell accetta comandi e li esegue ; esistono anche programmi
scritti in un linguaggio proprio della shell , e si chiamano
"shell script''.
In UNIX ci sono due tipi principali di shell, le Bourne
shell e le Cshell.
Le Bourne shell prendono il nome dal loro inventore, Steven
Bourne.
Steven Bourne ha scritto la shell UNIX originale,
sh , e da allora la maggior parte delle shell hanno
nomi che finiscono in sh per indicare che sono estensioni dell'idea
originale. Ci sono molte implementazioni della sua shell, e
si chiamano tutte Bourne shell.
E comune anche un'altra classe di shell, la C shell
( originariamente implementata da Bill Joy ) . Tradizionalmente , le
Bourne shell vengono usate per gli script di shell
e per compatibilita con l'originale , e le C shell sono usate
per l'uso interattivo ( le C shell hanno il vantaggio di avere caratteristiche
di interattivita migliori, ma sono piu difficili da programmare ).
Linux viene fornito con una Bourne shell chiamata
bash,scritta dalla Free Software Foundation.
bash sta per Bourne Again Shell, uno dei tanti
brutti giochi di parole in Unix.
E una Bourne shell "avanzata'' : contiene
le caratteristiche standard di programmazione
normalmente presenti nelle Bourne shell, insieme con molte
caratteristiche di interattivita normalmente presenti nelle C shell.
bash e la shell di default che viene usata con LINUX ...!! .
Quando
vi loggate, il prompt viene mostrato da bash,
e state eseguendo il vostro primo programma Unix, la bash
shell.
Finche sarete loggati, la bash shell continuera a girare.
La shell negli ambienti Unix, e non fa eccezione
Linux, e un elemento fondamentale del sistema operativo.
Solo chi sa usare correttamente questo ambiente puo dire di conoscere unix/linux,
altrimenti e un semplice utilizzatore.
Passo a darne una definizione: la shell di un ambiente Unix, e un interprete a linea di comando che permette di interagire con
il sistema operativo, impartendogli dei comandi di sistema fino a creare un
programma vero e proprio, generalmente detto
script.
Questa definizione merita qualche spiegazione.
Prima di tutto per comandi di sistema si intendono tutti quei comandi forniti
dal sistema operativo, ad esempio il caricamento di un programma, la data e l'ora, comandi
di ricerca, ordinamento e cosi via.
Ogni programma unix e creato per essere caricato dalla shell,
quindi e predisposto per questo, ed ha una notevole flessibilita offrendo
la possibilita di essere parametrizzato.
Attraverso la parametrizzazione e possibile guidare un'applicazione unix,
nell'input, nell'esecuzione e nell'output.
Una pratica comune e quella di creare delle "pipe" (
argomento questo,a cui dedichero prossimamente un articolo....).
Dei "tubi" tra applicazioni, l'output di una e
l'input per un'altra, e questo si puo fare solo attraverso la shell.
Nella definizione si dice che: "la shell e un interprete a linea
di comando", questo significa che e essa stessa un programma che
interpreta altri programmi o semplicemente comandi, quindi non e necessariamente
unica, e infatti nella realta esistono varie shell, ma i concetti
fondamentali :
interazione con il sistema, programmabilita, interfaccia a caratteri- rimangono
per tutte uguali.
Le shell piu famose sono: bash ( Bourne Again Shell), sh, tclsh
e tcsh ,comunque ve ne sono molte altre. Descriveremo qui
di seguito la shell bash, che e in pratica quella standard
per ogni sistema unix.
Per programmabilita si intende che l'interprete offre un certo numero di strutture
di controllo, costanti e variabili tipiche di ogni linguaggio di programmazione.
La shell deve essere necessariamente a linea di comando per
offrire la flessibilita necessaria, molti ambienti di tipo visuale, quali windows
e macos hanno delle utility con l'obbiettivo di fornire qualcosa
di simile, non arrivando mai alle potenzialita della shell unix,
non per l'incapacita di creare un interprete cosi potente, ma per come sono
creati i programmi applicativi.
Nell'ambiente unix, fin dall'inizio era presente la shell,
anzi era il solo modo per interagire con il sistema operativo, i programmi erano
creati da programmatori per altri programmatori, quindi enorme flessibilita
ed un occhio di riguardo per la programmabilita.
Per questo motivo se si guardano i parametri di caricamento di un qualsiasi
programma se ne trovano almeno una decina.
Tutto questo non vale per i sistemi operativi con interfaccia grafica, i cui
utenti avendo scelto questo modello non vogliono di certo la programmabilita,
l'obbiettivo per le applicazioni in questi ambienti e l'usabilita da parte di
qualsiasi utente.
Se dovessi scegliere uno degli elementi distintivi tra un sistema
unix e gli altri, quello descritto sopra sarebbe uno tra
quelli fondamentali.
Quella che segue e una lista essenziale dei comandi unix, ho descritto le opzioni piu
usate senza prenderle in considerazione tutte, per quelle si puo usare il
comando man, mentre ho cercato di privilegiare gli esempi.
alias
: Crea oppure rimuove lo pseudonimo di un comando.
Attenzione quando si termina
la sessione di lavoro vengono eliminati anche gli alias, per mantenerli e necessario
inserirli nel "profile" della console.
cd
: Questo forse e il primo comando da imparare, serve per muoversi attraverso le
directory.
Esempio :
albero delle directory:
/home/antonio/documenti/personali/fattura10.txt
posizione corrente:
/home/antonio
per portarsi nella directory dove si trova il documento fattura 10, digitare
il seguente comando :
cd documenti/personali
Per portarsi nella propria directory home digitare il comando
cd mentre per portarsi nel primo livello dell'albero
delle directory digitare cd / mentre con
cd .. si va alla directory superiore.
chgrp
: campia il gruppo associato ad un certo file.
Parametri principali:
-R Cambia ricorsivamente la proprieta delle directory.
es: chgrp -R users /home/pippo/Documenti
questo esempio associa le directory contenute in Documenti, ed i relativi documenti
al gruppo users.
chmod
: Mediante questo comando e' possibile cambiare i permessi ad un file.
es: chmod +w pippo
abilita il permesso di scrittura da parte dell'utente sul file pippo.
es: chmod -r-w-x pippo
non permette l'accesso al file pippo in lettura, scrittura ed esecuzione.
es: chmod +r+w+x
abilita l'esecuzione e la lettura da parte di tutti e la scrittura da parte
del solo utente.
chown
: cambia il proprietario di un file.
es: chown pippo:users documento.txt
Setta il proprietario di documento.txt a pippo e il gruppo a users.
cp :
Comando utilizzato per fare la copia di files.
cp fileSorgente fileDestinazione
es: cp Doumenti1/*.bz2 Documenti2
Questo esempio copia tutti i files contenuti nella cartella Documenti
con estensione bz2 nella directory Documenti2 (la directory Documenti2
deve gia' esistere).
date
: imposta la data e l'ora del sistema
es: date
Eseguendo semplicemente il comando date, riporta la data e l'ora corrente.
es: date -s '02 May
2000 10:55:10'
Questo esempio setta la data al 2 Maggio 2000, e l'ora alle 10:55:10, omettendo
l'ora setta automaticamente all'ora 00:00:00
es: date --date '20 days ago'
Stampa la data di 20 giorni fa
es: date --date '3 months ago'
Stampa la data equivalente al giorno corrente di 3 mesi fa.
es: date --date '1 month 1 day'
Stampa la data corrispondente a quella fra un mese ed un giorno.
es: date --date '1 month 1 day ago'
Stampa la data di un mese ed un giorno fa.
es: date +'%T'
Stampa l'ora corrente nel formato ore:minuti:secondi
df :
riporta l'occupazione dei file system montati rispetto allo spazio a loro riservato.
es: df Riporta l'occupazione
del file system in percentuale.
es: df -k riporta
l'occupazione del file system in kilobyte.
es: df -m riporta
l'occupazione del filesystem in Megabyte.
diff
: Trova le differenze tra due files.
es: diff file1 file2 > differenze.txt
du : mostra
la dimensione di un file.
es: du pippo Mostra la
dimensione occupata da pippo in kb.
file
: determina il tipo di file facendo un'analisi del suo contenuto.
es: file pippo Se
pippo e' un file compresso di tipo bz2, il risultato del comando sara' qualcosa
di simile:
pippo.bz2: bzip2 compressed data, block size = 900k.
find
: attraversa l'albero delle directory raccogliendo tutti i file ivi contenuti.
es: find . -print | grep documentoxy
Questo raccoglie tutti i file e le directory partendo dalla posizione
corrente, e attraverso il comando grep ricerca il documentoxy.
grep
: significa General Regular Expression Parser.
grep permette di ricercare all'interno di un file una certa espressione regolare,
come output mostra la stringa che contiene l'espressione trovata.
es: grep prova Documenti/documentoxy.txt
Ricerca la stringa prova in documentoxy.txt che si trova nella directory
Documenti.
groups
: visualizza il gruppo di appartenenza dell'utente che richiama il comando.
kill
: termina un processo in esecuzione.
last
: indica gli ultimi accessi al sistema.
es: last -n 20 Mostra
gli ultimi 20 accessi es: last -x -n20 Mostra gli ultimi 20 Shutdown e cambi
di run-level
ln :
Attraverso il comando ln e' possibile fare un link ad un determinato file.
es: ln pippo /home/pluto/pippo.lnk
Questo esempio esegue un link del file pluto nel file pippo.lnk.
ls :
Visualizza il contenuto della directory corrente
es: ls -l Mostra i file della directory
corrente e i loro permessi.
es: ls -a Mostra tutti i file
anche quelli nascosti.
man :
mostra la guida in linea relativa al comando con qui e' stato richiamato man.
es: man ls Questo comando mostra l'help
in linea relativa al comando ls.
mkdir
: crea una nuova directory.
es: mkdir prova crea la directory
prova nella directory corrente.
mount
: Questo comando permette di fare il mount di un file system. Prima di accedere
ad un fileSystem, es Dischetto, hardDisk ecc. e' necessario fare il mount, cioe'
caricare le informazioni relative a quel dispositivo (es: carica l'albero delle
directory). Linux permette di fare il mount di moltissimi file system, elenco
i piu' famosi:
ext2 il file system di Linux vfat il file system di Windows
fat32 fat il file system di Dos e Windows fat16 NTFS NT file
system hfs il file system di macintosh iso9660 il fs dei CD-ROM.
es: mount -t msdos/dev/fd0 /mnt/floppy
Questo comando monta un floppy di tipo msdos (/dev/fd0 e il device floppy disk
0, ed in generale indica il floppy a) nella directory /mnt/floppy. Nella directory
/mnt/floppy si ha il contenuto del floppy inserito nel drive a: .
mv :
serve per spostare un file, oppure per rinominarlo.
es: mv pippo pippox
Questo comando rinomina il file pippo nel file pippox
es: move pippo Documenti/pippox
Questo comando sposta il file nella directory Documenti, e lo rinomina
in pippox.
passwd
: cambia la password dell'utente corrente
ps : visualizza
i processi del sistema
es:ps -x Visualizza
tutti i processi del sistema.
rcp :
Copia files tra macchine (o sistemi) differenti.
ES: rcp -r /home/pippo/Documenti/mnt/dos/pippo
Questo esempio copia la directory Documenti nel filesystem dos.
size
: permette di calcolare la dimensione di un file.
Es. size /bin/arch
Questo comando calcola la dim del file arch nella directory bin.
split
: Questo comando divide un file di grosse dimensioni in parti piu' piccole.
es: split -b 1440000 pippo pipSplit
Comando che divide il file pippo in file con prefisso pipSplit seguito
da una numerazione del tipo aa, ab, ac ecc.
su :
su lancia una shell con i privilegi dell'utente indicato.
Es: su root
Questo comando lancia una shell con i privilegi di superuser.
tar :
e un comando che serve per riunire un certo numero di files.
es: tar -cvf prova.tar Documenti
Questo comando riunisce tutti i file della directory Documenti nel file prova.tar
es: tar -cvzf prova.tgz Documenti
Questo comando e' equivalente al precedente, pero' utilizza gzip per comprimere
l'archivio.
es: tar -tzf prova.tgz
Con questo comando si decomprime l'archivio creato precedentemente.
Attenzione tar non comprime i files, ma li riunisce soltanto.