...

La shell - Politecnico di Torino

by user

on
Category: Documents
18

views

Report

Comments

Transcript

La shell - Politecnico di Torino
Il sistema operativo LINUX
La shell
Giorgio Di Natale <[email protected]>
Stefano Di Carlo <[email protected]>
Politecnico di Torino
Dip. Automatica e Informatica
Sistemi Operativi - Shell
1
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
Sistemi Operativi - Shell
2
1
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)
Sistemi Operativi - Shell
3
Caratteri speciali
•
•
•
•
•
•
•
/
?
*
~
~utente
[]
{}
• ‘…’
Sistemi Operativi - Shell
separa i nomi dei direttori in un path
un carattere qualunque
una sequenza di caratteri qualunque
il direttorio di login
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
4
2
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)
Sistemi Operativi - Shell
5
File di configurazione della shell
• All’avviamento ogni shell cerca nel direttorio di
login i propri file di configurazione:
– .login (csh, tcsh): comandi eseguiti al login
– .cshrc (csh, tcsh): comandi eseguiti
all’avviamento
– .profile (sh, ksh): comandi eseguiti al login
• csh e tcsh usano anche il file .logout per
eseguire comandi al termine della sessione
Sistemi Operativi - Shell
6
3
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
7
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
8
4
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
Sistemi Operativi - Shell
9
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
10
5
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
Sistemi Operativi - Shell
11
Espressioni regolari (cont)
> ls
file1
file2
rc.conf
myconf.txt
> ls -l file*
Shell
> ls -l file1 file2
Sistemi Operativi - Shell
12
6
Espressioni regolari (cont)
> ls
file1
file2
rc.conf
myconf.txt
> ls -l *conf*
Shell
> ls -l rc.conf myconf.txt
Sistemi Operativi - Shell
13
Espressioni regolari (cont)
> ls
file1
file2
rc.conf
myconf.txt
> ls -l ‘*conf*’
Shell
> ls -l ‘*conf*’
Sistemi Operativi - Shell
14
7
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
15
Redirezione dell'I/O
• Ogni processo ha tre canali di I/O standard:
stdin
processo
stdout
stderr
• Ogni canale può essere ridiretto:
– su file
– su un altro canale tramite pipe
Sistemi Operativi - Shell
16
8
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”
text
HERE
• comando &> file (bash) stderr+stdout in file
• comando 2> file (bash) stderr in file (1 è stdout)
Sistemi Operativi - Shell
17
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
18
9
Definizione della pipe
stdin
proc stdout
stdin
stderr
proc stdout
stderr
• Il collegamento stdout-stdin si chiama pipe e
crea in memoria un canale diretto tra i due
processi
Sistemi Operativi - Shell
19
Redirezione dell'I/O tramite pipe
• comando1 | comando2
– pipe tra i due comandi
• Esempi:
– ls -la | more
Sistemi Operativi - Shell
20
10
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
21
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
•
•
•
•
•
•
Sistemi Operativi - Shell
22
11
C-shell: esempio di history
25%
26%
27%
28%
•
•
•
•
•
rm !$
!-1
!c
!25
rm !*
cc -g prog.c
vi iop.c
cc prog.c iop.c
a.out lettera
rm lettera
a.out lettera
cc prog.c iop.c
cc -g prog.c
esegue rm a.out lettera
Sistemi Operativi - Shell
23
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
24
12
Aliasing
• E’ possibile definire dei comandi con nuovi
nomi (alias), tipicamente più semplici
• alias
Elenca gli alias definiti
• alias nome valore (C-shell)
Definisce un alias (racchiudere valore tra apici
se contiene degli spazi)
• unalias nome
Cancella un alias
Sistemi Operativi - Shell
25
Esempi
• alias dir ls
• alias tgz tar czvf
Sistemi Operativi - Shell
26
13
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
27
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
Sistemi Operativi - Shell
28
14
Esecuzione batch
comando1
> comando1
> comando2
comando2
Sistemi Operativi - Shell
29
Esecuzione concorrente
comando1
comando2
Sistemi Operativi - Shell
> comando1 &
> comando2
30
15
Interruzione di processi
comando1
CTRL-Z
fg
Sistemi Operativi - Shell
31
Stato dei processi
• Esecuzione in foreground
– hanno i tre canali standard connessi al terminale
• Esecuzione in background
– sono privati di stdin
• Sospeso
Sistemi Operativi - Shell
32
16
Stato dei processi
comando
Shell
Run
fg
comando &
fg
fg
CTRL-Z
Sospeso
Sistemi Operativi - Shell
bg
Run
bg
33
Comandi per gestire i processi
• jobs
• bg %job-id
• fg %job-id
Sistemi Operativi - Shell
elenca i job
porta il job in background
porta il job in foreground
34
17
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
Sistemi Operativi - Shell
35
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
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
36
18
Il comando ps
• Il comando
Stato: ps permette di elencare i processi
ed il loro
R stato
in esecuzione
– -e T bloccato
elenca tutti i processi
– -f S sleeping
elenco in formato pieno
– -l Z zombie
elenco in formato lungo
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
37
Il comando ps
• Il comando ps permette di elencare i processi
ed il loro stato
– -e
elencadell’utente
tutti i processi
UID
– -f
elenco
formato pieno
che
haineseguito
ilelenco
comando
– -l
in formato lungo
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
38
19
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
Process
ID lungo
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
39
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
Parentlungo
PID
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
40
20
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 formatoConsole
lungo
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
41
Il comando ps
• Il comando ps permette di elencare i processi
ed il loro stato
– -e
elenca tutti i processi
Tempo complessivo
– -f
elenco in formato pieno
dedicato al processo
– -l
elenco in formato lungo
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
42
21
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
Comando
– -l
elenco in formato lungo
% ps -l
S UID PID PPID
R 2103 1728 1676
S
0 1675 110
S 2103 1676 1675
Sistemi Operativi - Shell
TTY
ttys0
ttys0
ttys0
TIME
0:00
0:00
0:00
COMD
ps
telnetd
-csh
43
Terminazione di un processo
• E’ possibile terminare forzatamente un
processo con i comandi:
– kill -9 pid
– kill -9 %job-id
Sistemi Operativi - Shell
44
22
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
Sistemi Operativi - Shell
45
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
46
23
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
Sistemi Operativi - Shell
47
Script di shell
#!/bin/csh
date
who
Sistemi Operativi - Shell
48
24
Caratteristiche della shell
•
•
•
•
•
•
•
•
•
Completion
Gestione di espressioni regolari
Redirezione dell'I/O
Pipeline
History
Aliasing
Gestione dei processi
Scripting
Variabili
Sistemi Operativi - Shell
49
C-shell: variabili
• La shell mantiene un insieme di variabili per la
personalizzazione dell'ambiente
• set variabile = valore
– assegna un valore alla variabile
• set
– visualizza il valore di tutte le variabili
• echo $variabile
– visualizza il valore della variabile indicata
Sistemi Operativi - Shell
50
25
Variabili di shell
• Variabili più utili:
– home = direttorio di login
– path = direttori in cui cercare i comandi (in
parentesi, separati da spazi)
– prompt = il prompt dei comandi
– cwd = il direttorio corrente
– status = il risultato dell’ultimo comando
• Usare rehash dopo aver cambiato il path
Sistemi Operativi - Shell
51
C-Shell: ambiente
• L'ambiente (environment) di un processo è
costituito da una lista di coppie:
(variabile , valore)
dove valore è una stringa di caratteri
• setenv variabile [ =valore ]
assegna un valore alla variabile
• printenv [ variabile ]
stampa il valore di una o tutte le variabili
d'ambiente
• env
stampa il valore di tutte le variabili d'ambiente
Sistemi Operativi - Shell
52
26
Variabili di ambiente
• HOME
– home directory
• LOGNAME
– username
• PATH
• SHELL
– shell utilizzata
Sistemi Operativi - Shell
53
Variabili di shell (e ambiente)
NON C-Shell
• Variabili
nome_variabile = valore_variabile
Es:
hi=“Hello World”
• Variabili di ambiente (in maiuscolo)
nome_variabile = valore_variabile
export nome_variabile
Es:
MACHINE=“Sun Sparc”
export MACHINE
Sistemi Operativi - Shell
54
27
Fly UP