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
Scarica

so_1011_3 - Politecnico di Torino