Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo...

48
Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale <[email protected]> Stefano Di Carlo <[email protected]> Politecnico di Torino Dip. Automatica e Informatica

Transcript of Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo...

Page 1: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 1

Il sistema operativo LINUX La shell

Giorgio Di Natale <[email protected]>Stefano Di Carlo <[email protected]>

Politecnico di TorinoDip. Automatica e Informatica

Page 2: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 2

La shell

• E’ lo strato più esterno del S.O. e fornisce l’interfaccia utente

• Offre una via di comunicazione con il S.O.– dialogo interattivo– comandi memorizzati in un file di script

• In Unix la shell non è parte del kernel– è un normale processo utente

Page 3: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 3

Esecuzione della shell

• Una shell può essere attivata:– automaticamente al login (secondo la specifica

in /etc/passwd)– in modo annidato dentro un'altra shell (si

ritorna alla shell iniziale quando termina quella interna)

• Per terminare una shell:– exit– il carattere di EOF (tipicamente ^d)

Page 4: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 4

Caratteri speciali

• / separa i nomi dei direttori in un path• ? un carattere qualunque• * una sequenza di caratteri qualunque• ~ il direttorio di login• ~utente il direttorio di login dell'utente• [ ] un carattere tra quelli in parentesi• { } una parola tra quelle in parentesi

(separate da virgola)• ‘…’ non espande le espressioni regolari

Page 5: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 5

Le shell disponibili

• In Unix sono disponibili molte shell:– Bourne shell (sh): la shell originaria, molto

usata nella programmazione sistemistica– C-shell (csh): la shell di Berkeley, ottima per

l'uso interattivo e per gli script non di sistema– Korn shell (ksh): la Bourne shell riscritta

dall'AT&T per assomigliare di più alla C-shell– Tahoe C-shell (tcsh): dal progetto Tahoe, una

C-shell migliorata– Bourne again shell (bash)

Page 6: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 6

File di configurazione della shell

• All’avviamento ogni shell cerca nel direttorio di login i propri file di configurazione:– .bash_profile: comandi eseguiti al login– .bashrc: comandi eseguiti all’avviamento

• csh e tcsh usano anche il file .logout per eseguire comandi al termine della sessione

Page 7: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 7

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 8: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 8

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 9: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 9

Completion

• Espansione dei nomi di file con il carattere memorizzato nella variabile filec (spesso TAB o ESC)– per i nomi di file eseguibili la shell cerca nei

direttori del path– per file generici, la shell espande nomi di file

nel direttorio corrente

Page 10: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 10

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 11: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 11

Espressioni regolari

• La shell espande automaticamente le espressioni regolari

• Le espressioni regolari vengono sostituite con la lista dei nomi di file che soddisfano il pattern

Page 12: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 12

Espressioni regolari (cont)

> lsfile1file2rc.confmyconf.txt

> ls -l file*

Shell

> ls -l file1 file2

Page 13: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 13

Espressioni regolari (cont)

> lsfile1file2rc.confmyconf.txt

> ls -l *conf*

Shell

> ls -l rc.conf myconf.txt

Page 14: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 14

Espressioni regolari (cont)

> lsfile1file2rc.confmyconf.txt

> ls -l ‘*conf*’

Shell

> ls -l ‘*conf*’

Page 15: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 15

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 16: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 16

processoprocessostdin stdout

stderr

• Ogni processo ha tre canali di I/O standard:

Redirezione dell'I/O

• Ogni canale può essere ridiretto:– su file– su un altro canale tramite pipe

Page 17: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 17

Ridirezione dell'I/O da/su file

• comando < file stdin da file• comando > file stdout in file (cancellato se esiste)• comando >> file stdout accodato a file• comando <<HERE stdin da “here document”

textHERE

• comando &> file (bash) stderr+stdout in file• comando 2> file (bash) stderr in file (1 è stdout)

Page 18: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 18

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 19: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 19

Definizione della pipe

• Il collegamento stdout-stdin si chiama pipe e crea in memoria un canale diretto tra i due processi

procprocstdin stdout

stderr

procprocstdin stdout

stderr

Page 20: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 20

Redirezione dell'I/O tramite pipe

• comando1 | comando2 – pipe tra i due comandi

• Esempi:– ls -la | more

Page 21: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 21

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 22: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 22

History

: mostra i comandi eseguiti precedentemente• !n: esegue il comando numero n nel buffer• !-n: esegue l'n-ultimo comando• !$: l'ultimo parametro del comando precedente• !*: tutti i parametri del comando precedente• !stringa: l'ultimo comando che inizia con

stringa• !!:s/vecchio/nuovo: rimpiazza le occorrenze di

vecchio nell'ultimo comando con nuovo

Page 23: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 23

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 24: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 24

Aliasing

• E’ possibile definire dei comandi con nuovi nomi (alias), tipicamente più semplici

• aliasElenca gli alias definiti

• alias nome valore (C-shell)Definisce un alias (racchiudere valore tra apici se contiene degli spazi)

• unalias nomeCancella un alias

Page 25: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 25

Caratteristiche della shell• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 26: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 26

I processi

• Linux è un sistema operativo multitasking• E’ possibile eseguire contemporaneamente più

processi• Dalla shell è possibile eseguire i comandi in due

modalità:– batch: l’utente può eseguire un nuovo comando

solo dopo la terminazione del primo processo– concorrente: l’utente può eseguire un nuovo

comando anche se il primo non è concluso

Page 27: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 27

Esecuzione batch

comando1

comando2

> comando1> comando2

Page 28: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 28

Esecuzione concorrente

comando1

comando2

> comando1 &> comando2

Page 29: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 29

Interruzione di processi

comando1

CTRL-Z

fg

Page 30: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 30

Stato dei processi

Runfg

Runbg

Sospeso

Shell comando

comando &

fgfg

bg

CTRL-Z

Page 31: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 31

Comandi per gestire i processi

• jobs elenca i job• bg %job-id porta il job in background• fg %job-id porta il job in foreground

Page 32: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 32

I processi

• A ogni processo sono associati:– pid process id– uid user id di chi ha eseguito il processo– stime istante in cui il processo è partito– ...

• Il comando ps mostra l’elenco dei processi

Page 33: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 33

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungo

Page 34: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 34

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungo

Stato:R in esecuzioneT bloccatoS sleepingZ zombie

Page 35: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 35

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungo

UID dell’utenteche ha eseguitoil comando

Page 36: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 36

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungoProcess ID

Page 37: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 37

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungoParent PID

Page 38: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 38

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungoConsole

Page 39: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 39

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungo

Tempo complessivodedicato al processo

Page 40: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 40

% ps -lS UID PID PPID TTY TIME COMDR 2103 1728 1676 ttys0 0:00 psS 0 1675 110 ttys0 0:00 telnetdS 2103 1676 1675 ttys0 0:00 -csh

Il comando ps

• Il comando ps permette di elencare i processi ed il loro stato– -e elenca tutti i processi– -f elenco in formato pieno– -l elenco in formato lungoComando

Page 41: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 41

Terminazione di un processo

• E’ possibile terminare forzatamente un processo con i comandi:– kill -9 pid– kill -9 %job-id

Page 42: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 42

Gestione temporizzata dei processi

• at time filename– esegue il programma all'ora specificata

• at -l– elenca i job sottomessi

• at -r [jobname]– rimuove dalla coda il job

Page 43: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 43

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 44: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 44

File di comandi (script)

• E’ possibile memorizzare in un file una serie di comandi, eseguibili richiamando il file stesso

• Esecuzione indiretta:– source <scriptname> <args>

• Esecuzione diretta eseguendo lo script– è necessario che abbia il permesso di esecuzione– la prima riga del file inizia con #! seguita dal

nome (con il path assoluto) della shell con cui si devono eseguire i comandi

Page 45: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 45

Script di shell

#!/bin/cshdatewho

Page 46: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 46

Caratteristiche della shell

• Completion• Gestione di espressioni regolari• Redirezione dell'I/O• Pipeline• History• Aliasing• Gestione dei processi• Scripting• Variabili

Page 47: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 47

Bash: variabili

• La shell mantiene un insieme di variabili per la personalizzazione dell'ambiente

• export variabile='valore'– assegna un valore alla variabile (senza spazi)– export serve per rendere la variabile accessibile

ad altri processi• echo $variabile

– visualizza il valore della variabile indicata• unset variabile

Page 48: Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Shell 48

Variabili di shell

• Variabili più utili:– HOME = direttorio di login– PATH = direttori in cui cercare i comandi (in

parentesi, separati da spazi)– PROMPT_COMMAND = il prompt dei

comandi– PWD = il direttorio corrente– ? = risultato dell'ultimo comando