Attenzione!
Da quest'anno non faccio più parte dell'Università: questo significa che questa pagina potrebbe sparire da un momento all'altro. Trovate un esatta copia di questa pagina sul mio nuovo sito: http://hpc.isti.cnr.it/~ceccarelli/algobash Inseritevelo nel bookmark! ;) Buon anno Diego
Disclaimer: La lezione sulla shell era facoltativa e non fa parte del programma. Il suo contenuto e il riassunto contenuto in questa pagina non vi verranno chiesti in sede d'esame e non siete obbligati a leggere oltre se non vi interessa.
Riassunto dei comandi bash che abbiamo visto durante l'esercitazione:
creare una Tagcloud
il sito wordle genera bellissime tagcloud, a partire da file in formato:
<tag>:<frequenza>
generiamo la tagcloud per la pagina homepage del corso :
curl http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start \ | tr '\n' ' ' \ | sed -e 's/<[^>]*>//g' \ | tr 'A-Z' 'a-z' \ | tr -sc '[a-z]' '\n' \ | egrep -v "\\[" \ | egrep '.{5,20}' \ | sort \ | uniq -c \ | sort -nrk1 \ | awk '{print $2":"$1}' \ | head -100
analizziamo i comandi uno per uno:
curl
: scarica una pagina internet e la stampa sullo standard output;tr
: sostituisce caratteri o gruppi di caratteri con altri caratteri, in questo caso gli accapo diventano spazi (l'input diventano una sola riga);sed
: sostituisce un pattern con un'altro, in questo caso, viene utilizzato per rimuovere i tag html (sequenze di caratteri che iniziano con < e finiscono con >);tr 'A-Z' 'a-z
': sostituisce i caratteri maiuscoli con caratteri minuscoli;tr -sc
: sostituisce sequenze di caratteri diversi dalle lettere dell'alfabeto con il new line (quindi genera una parola per riga);egrep
: dato un file, filtra solo le righe che contegono il pattern passato. Invocato col parametro-v
ha il comportamento opposto: filtra solo le righe che non contengono il carattere[
;egrep '.{5,20}
': filtra tutte le stringhe di lunghezza compresa tra 5 e 20 (.
significa un qualsiasi carattere);sort
: ordina le righe di un file;uniq -c
: elimina righe duplicate, con l'opzione-c
, mette in cima ad ogni riga il numero di duplicati rilevato (richiede che le righe in input siano ordinate, per questo prima viene invocato sort);sort -nrk1
: ordina le righe sul primo campo (per default, i campi sono separati da spazi); i-n
indice che il campo deve essere considerato un numero (e il valore restituito da count), il-r
indica che l'ordinamento deve essere al contrario (reverse), quindi dal piu' grande al piu' piccolo;awk
: permette di manipolare i campi contenuti in un file (per default lo spazio e` il delimitatore dei campi), quindi in questo caso il primo campo (riferito con$1
) e` la frequenza, mentre il secondo campo (riferito con$2
) e` il termine.head
: permette di selezionare solo le top k righe di un file (in questo caso 100), analogamente il comandotail
permette di selezionare le ultime k righe di un file.
il risultato e`:
Comandi della shell di cui abbiamo parlato
- path assoluto/relativo a un file;
- utenti;
- shortcuts della shell: uso del tab per completare, ricerca ricorsiva all'indietro (ctrl-r), interrompio (ctrl-c);
- metacaratteri:
*
,?
; - elencare il contenuto di una cartella:
ls
,ls -a
,ls -lh
; - impostare alias (esempio
alias la='ls -a -Fs acolor
); - navigazione nel filesystem (
/
,~
,.
,..
,~utente
,-
); - creare cartelle:
mkdir
; - rimuovere file e cartelle
rm
: chiedere-i
o non chiedere-f
conferma, remove ricorsivorm -f
; - manuale:
man
; - copiare e rinominare:
cp
,mv
; - trovare file:
locate
,find
; - cambiare i permessi:
chmod
; - visualizzare il contenuto di un file lungo:
less
; - stampare un file in output:
cat
; - visualizzare le prime righe di un file:
head
; - visualizzare le ultime righe di un file:
tail
; - contare righe, parole, e caratteri di un file:
wc
; - cercare le righe che matchano un pattern in un file:
grep
,egrep
; - sostituire caratteri in un file:
tr
; - sostituire pattern in un file:
sed
; - manipolare campi di un file:
awk
; - ordinare righe di un file:
sort
; - editors di file da terminale:
emacs
,vim
,pico
; - ridirigere l'output:
> <
A>> &>
; - stampare differenze tra file:
diff
; - connessione remota:
ssh
; - copia in remoto:
scp
;
Potete recuperare informazioni dettagliate su un comando del terminale utilizzando il comando man
, ad esempio
man cat
mostra le informazioni relative al comando cat
.
Valgrind
Valgrind e` un software per rilevare memory leaks (malloc/free dimenticati, accessi in memoria sbagliati..). Puo` essere utile per trovare errori negli esercizi di laboratorio. E` installato sulle macchine del centro di calcolo e lo potete usare anche durante l'esame.
Potete trovare alcuni esempi qui.
Riferimenti
- Linux e Unix: vi consiglio di guardare questo se non lo avete visto;
- terminale: potete dare un'occhiata alla guida al centro di calcolo, che descrive piu` in dettaglio gran parte dei comandi di cui abbiamo parlato. Una guida generale su Linux la trovate qui qui;
- un manuale sulla bash;
- Per cultura personale: Hackers. Gli eroi della rivoluzione informatica di Steven Levy;