Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati <[email protected]> Politecnico di Torino Dip. Automatica e Informatica Sistemi Operativi - Introduzione 1 Programma • Linux: introduzione e comandi principali • Shell: l’interprete dei comandi • Comandi avanzati e script • Il linguaggio di programmazione AWK Sistemi Operativi - Introduzione 2 Indice • Filtri • File system: dettagli • Script: costrutti di controllo Sistemi Operativi - Introduzione 3 Indice • Filtri • File system: dettagli • Script: costrutti di controllo Sistemi Operativi - Introduzione 4 Filtri • Comandi che operano sul proprio standard input per filtrarlo secondo alcuni parametri: • • • • • grep sed cut sort uniq Sistemi Operativi - Introduzione 5 grep • grep cerca nei file di input le righe che fanno match con il pattern fornito. • Sintassi: grep [opzioni] pattern [file...] • Opzioni utili: • • • • • • -A num -H -i -n -r, -R -v Sistemi Operativi - Introduzione stampa altre num righe stampa il nome del file per ogni match case insensitive stampa il numero di riga del match ricorsivo sul sottoalbero stampa solo le righe che non fanno match 6 grep - regexp • Le espressioni regolari sono pattern che descrivono un insieme di stringhe. Espressioni complesse si costruiscono combinando espressioni semplici. • Regexp: • • • • • • [c1c2] [c1-c5] [^c1-c5] . ^, $ \<,\> Sistemi Operativi - Introduzione uno qualsiasi dei caratteri in parentesi uno qualsiasi dei caratteri nel range uno qualsiasi dei caratteri NON nel range un carattere qualsiasi inizio e fine riga inizio e fine parola 7 grep - regexp • Operatori di ripetizione (possono seguire ogni regexp): • • • • • * + {n} {n,} {n,m} l’elemento precedente c’e` zero o piu` volte l’elemento precedente c’e` una o piu` volte l’elemento precedente c’e` esattamente n volte l’elemento precedente c’e` n o piu` volte l’elemento precedente c’e` min n e max m volte • Operatori di concatenzaione: • | • () OR tra due regexp gestiscono le precedenze tra gli operatori • L’operatore \ serve per poter usare in modo letterale i caratteri che hanno significati speciali. Sistemi Operativi - Introduzione 8 grep - esempi Esempi: • ps -ef | grep “my_loop 100[1-5]” • grep –H –n -r “my_func(“ *.[ch] • cat f1.c | grep –v “\/\*[^\*]*\*\/” > f2.c Sistemi Operativi - Introduzione 9 Indice • Filtri • File system: dettagli • Script: costrutti di controllo Sistemi Operativi - Introduzione 10 File system • L’organizzazione piu` comune del file system UNIX e`: bin bin sbin sbin usr / etc var lib include log home dev mnt Sistemi Operativi - Introduzione 11 File system • Il kernel virtualizza diverse partizioni (ognuna col suo file system) come se fossero tutte parte dello stesso albero. • A ogni file di qualunque tipo e` associato un inode number, l’indice di una tabella in cui ogni elemento (inode) contiene le informazioni di un file. • Le directory sono delle tabelle che associano al nome di un file il suo inode number. Tale associazione si chiama link. • Lo stesso inode number puo` apparire in piu` link! Sistemi Operativi - Introduzione 12 File system - comandi • Per creare dei link si usa il seguente comando: ln [opzioni] source_file [target_file] • Opzioni utili: • -s crea un link SIMBOLICO (default HARD link) N.B. I link simbolici contengono il path del file puntato e possono essere fatti tra file system differenti (gli hard link no!). • Il comando rm rimuove il file solo se il numero dei link e` a 0 • Il comando mv equivale ad eseguire prima ln e poi rm. Sistemi Operativi - Introduzione 13 Indice • Filtri • File system: dettagli • Script: costrutti di controllo Sistemi Operativi - Introduzione 14 Costrutto if-then-fi • Sintassi: if condition then commands [elif condition then commands] [else commands] fi Sistemi Operativi - Introduzione • Condizioni: if test param op param oppure if [ param op param ] SERVONO gli SPAZI!!! 15 Flag di confronto • Confronto tra numeri: • • • • • • -eq -ne -gt -ge -lt -le vero se i due numeri sono uguali vero se i due numeri non sono uguali vero se il primo numero e` maggiore vero se il primo numero e` maggiore o uguale vero se il primo numero e` minore vero se il primo numero e` minore o uguale • Confronto tra stringhe: • = • != vero se le due stringhe sono uguali vero se le due stringhe non sono uguali Sistemi Operativi - Introduzione 16 Flag di confronto • Confronto per file: • • • • • -f -d -r -w -x vero se l’argomento e` un file normale vero se l’argomento e` una directory vero se l’argomento ha il permesso di lettura vero se l’argomento ha il permesso di scrittura vero se l’argomento ha il permesso di esecuzione • Operatori logici: • ! • -a • -o NOT AND OR Sistemi Operativi - Introduzione 17 Costrutto if - esempi if test $1 = “-r” then recursive_search=1 fi if [ $recursive_search –eq 1 –a –d $2 ] then find $2 –name *.c > $3 elif [ $recursive_search –eq 0 –a –d $2 ] then find $2 –maxdepth 0 *.c > $3 else printUsageAndExit fi Sistemi Operativi - Introduzione 18 Costrutto case-esac • Sintassi: case var in str1) commands ;; str2|str3) commands ;; ... *) commands ;; esac Sistemi Operativi - Introduzione 19 Costrutto case - esempi case $1 in 01 | 1) echo “Gennaio” ;; 02 | 2) echo “Febbraio” ;; ... 12) echo “Dicembre” ;; *) echo “Error: unknown month”;; esac Sistemi Operativi - Introduzione 20 Il costrutto for-in for var in value1 value2 value3... do # commands done Esegue i comandi specificati, una volta per ogni valore assunto dalla variabile var. Sistemi Operativi - Introduzione 21 Costrutto for-do-done • Sintassi: • 1: for var in list... do commands done • 2: for (( expr1 ; expr2 ; expr3 )) do commands done Sistemi Operativi - Introduzione 22 Il costrutto for-in - esempi • 1: for i in `echo {1..5}` do echo $i >> numeri.txt done • 2: for f in `ls | grep *7`; do chmod g+x $f; done equivalente a: find . –maxdepth 1 –name “*7” –exec chmod g+x \{} \; Sistemi Operativi - Introduzione 23 Costrutto for - esempi for (( i=0 ; i<10 ; i++ )) do echo $i done for i in `ls | grep *.c` do chown pippo:disney $i done Sistemi Operativi - Introduzione 24 Costrutto while-do-done • Sintassi: while condition do commands done Sistemi Operativi - Introduzione 25 Costrutto while - esempi i=0 while [ $i –lt 10 ] do echo $i i=$(($i+1)) done (per scambiare due colonne in un file): while read var1 var2 do echo $var2 $var1; done <file_in >file_out Sistemi Operativi - Introduzione 26