Il sistema operativo UNIX
La shell
Niccolò Battezzati
<[email protected]>
Politecnico di Torino
Dip. Automatica e Informatica
Sistemi Operativi - Introduzione
1
Organizzazione
SISTEMI OPERATIVI
Docente:
Prof. Pietro Laface ([email protected])
Esercitatore:
Ing. Niccolò Battezzati ([email protected])
Esercitazioni in aula
– GIO 12:30 – 14:30
(AULA 14)
Sistemi Operativi - Introduzione
Laboratorio
– MER 08:30 – 10:30 (A-L)
– MER 10:30 – 12:30 (M-Z)
2
Programma
• Linux: introduzione e comandi principali
• Shell: l’interprete dei comandi
• Linux: dettagli e comandi avanzati
• Shell: uso avanzato e script
• vi(m): un editor di testo
Sistemi Operativi - Introduzione
3
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Scripting di base
Sistemi Operativi - Introduzione
5
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
6
Programs
Shell
Unix kernel
Introduzione
HW
• E’ lo strato più esterno del S.O. e fornisce
un’interfaccia utente
– era l’unica interfaccia prima dell’introduzione
del server X
• In Unix la shell non è parte del kernel
– è un normale processo utente
Sistemi Operativi - Introduzione
7
Introduzione
• Una shell può essere attivata:
– automaticamente al login
– in modo annidato dentro un'altra shell
• Per terminare una shell:
– exit
– il carattere di EOF (tipicamente ^d)
Sistemi Operativi - Introduzione
8
Introduzione
• 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 - Introduzione
9
Introduzione
• All’avviamento ogni shell esegue i comandi
elencati nei propri file di inizializzazione:
– /etc/profile: comandi globali
– ~/.profile: comandi per il singolo utente
• alcune shell usano anche il file .logout per
eseguire comandi quando vengono terminate.
Sistemi Operativi - Introduzione
10
Introduzione
• Per la shell bash, i file di inizializzazione sono:
– /etc/profile: comandi per tutti gli utenti
– ~/.bash_profile opp. ~/.profile: comandi propri
dell’utente
– ~/.bashrc: comandi propri dell’utente eseguiti
in una shell non di login.
Sistemi Operativi - Introduzione
11
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
12
Caratteristiche e uso della shell
BASH
•
•
•
•
•
•
•
Parametri
Completamento
Pipeline
Redirezione dell'I/O
History
Aliasing
Gestione dei processi
Sistemi Operativi - Introduzione
13
Parametri
• I parametri sono delle entita` che memorizzano
un valore (indicato con $parametro):
– parametri posizionali: 0, 1, 2, 3... Sono usati per
indicare i parametri passati a un comando o a
una funzione;
– parametri speciali:
– *: la lista dei parametri posizionali
– #: il numero di parametri posizionali
– ?: il valore di ritorno dell’ultimo comando
– variabili: contengono un valore non tipizzato.
Sistemi Operativi - Introduzione
14
Variabili
• Una variabile ha un nome e un valore, che viene assegnato come
segue:
• nome=“valore”
(usare echo $nome per visualizzarlo)
• Il comando export variabile permette di renderla visibile ad
altri processi
• Il comando unset variabile ne cancella il valore
• Built-in variables, tra cui:
• PATH
• HOME
• BASH_ARGV, BASH_ARGC
• Array unidimensioanli:
• nome[indice]=“valore” (usare echo
Sistemi Operativi - Introduzione
${nome[indice]})
15
Completamento
• Espansione dei nomi di file con il carattere TAB
– se la stringa comincia con $ la shell cerca di
completare col nome di una variabile
– altrimenti, la shell cerca di completare col nome
di un comando
– altrimenti, la shell cerca di completare con
nomi di file ordinari nella directory corrente.
Sistemi Operativi - Introduzione
16
Pipeline
stdin
proc stdout
stderr
stdin
proc stdout
stderr
• Il collegamento stdout-stdin si chiama pipe e
crea in memoria un canale diretto tra i due
processi
Sistemi Operativi - Introduzione
17
Pipeline
• comando1 | comando2
– pipe tra i due comandi
Esempi:
–
–
–
–
ls -la | more
ls –l | grep “main.c”
cat main.h | sed ‘s/N 10/N 12/g’
cat main.c | awk –f my_script.awk
Sistemi Operativi - Introduzione
18
Redirezione dell’I/O
•
•
•
•
comando < file:
comando > file:
comando >> file:
comando << FINE:
text
FINE
• comando &> file:
• comando 2> file:
stdin da file
stdout in file (cancellato se esiste)
stdout accodato a file
stdin da “here document”
(bash) stderr+stdout in file
(bash) stderr in file (1 è stdout)
/dev/null e` un file speciale su cui si puo` scrivere
senza accumulare byte su disco
Sistemi Operativi - Introduzione
19
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 la prima occorrenza
di vecchio nell'ultimo comando con nuovo
• CTRL-r com: filtra la history mostrando solo i
comandi che contengono la stringa com.
•
•
•
•
•
•
•
Sistemi Operativi - Introduzione
20
Aliasing
• E’ possibile definire dei comandi con nuovi nomi
(alias)
• Gli alias sono locali alla shell corrente
• alias:
• alias nome=“valore”:
• unalias nome:
elenca gli alias definiti
definisce un alias
cancella un alias
Esempi:
alias ll=“ls -al”
alias vi=“vim”
Sistemi Operativi - Introduzione
21
Gestione dei processi
Esecuzione batch: i processi vengono eseguiti in
modo sequenziale.
comando1
Last-login: …
> …
> comando1
output comando1
comando2
Sistemi Operativi - Introduzione
> comando2
output comando2
22
Gestione dei processi
Esecuzione concorrente: i processi vengono
eseguiti in modo “concorrente”.
Last-login: …
> …
comando1
comando2
Sistemi Operativi - Introduzione
> comando1 &
output comando1
> comando2
output comando1
output comando2
23
Gestione dei processi
I processi si possono interrompere con il comando
CTRL-z e ripristinare con il comando fg.
Last-login: …
> …
comando1
CTRL-z
fg
Sistemi Operativi - Introduzione
> comando1
output comando1
CTRL-z
> fg %1
output comando1
24
Stato dei processi
comando
Shell
Run
fg
comando &
fg
fg
CTRL-Z
Stopped
Sistemi Operativi - Introduzione
bg
Run
bg
25
Gestione dei processi - comandi
• jobs
• bg %job-id
• fg %job-id
• kill -9 pid
• killall -9 name
• ps
Esempi:
ps –e
ps –f
ps –u root
Sistemi Operativi - Introduzione
elenca i job
porta il job in background
porta il job in foreground
termina il processo
termina tutti i processi name
elenca i processi con i relativi dettagli
26
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
27
Quoting
• Serve per dire alla shell di non interpretare
alcuni caratteri speciali. Ci sono tre metodi:
– \ preserva il valore letterale del carattere che
segue;
– ‘’ preservano il valore letterale del loro
contenuto. Non possono essere innestati;
– “” preservano il valore letterale del contenuto
tranne dei simboli $, ‘, \. Possono essere
innestate.
Sistemi Operativi - Introduzione
28
Interpretazione
• Dopo aver suddiviso la linea di comando in parole, la shell
applica diversi tipi di sostituzione (in ordine!):
– preamble{e1, e2, ...}: sostituito con “preamblee1 preamblee2 ...”
– ~: sostituitoin $HOME
– $param: sostituito col valore del parametro (se il parametro e`
complesso meglio usare ${param})
– `comando`: sostituito con lo standard output di comando
– $((espressione)): sostituito col risultato dell’espressione aritmetica
– parole contenenti *, ? e [ sono sostituite con il valore
dell’espressione regolare.
Sistemi Operativi - Introduzione
29
Regexp
• La shell espande le espressioni regolari secondo
le sguenti regole:
–*
una qualsiasi stringa
–?
un qualsiasi carattere singolo
– [...]
uno qualsiasi dei caratteri in parentesi
Sistemi Operativi - Introduzione
30
Esempio
• Come vengono espansi i seguenti comandi?
– so_es1=“~/so_es1”
– backup_dir=“backup_`date`”
– mkdir $so_es1/”$backup_dir”
– cp –r $so_es1/*.{c,h} $so_es1/”$backup_dir”
Sistemi Operativi - Introduzione
31
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
32
Script - introduzione
• 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
– ./scriptname args
– è necessario che il file 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 - Introduzione
33
Script - introduzione
#!/bin/bash
so_es1=“~/so_es1”
backup_dir=“backup_`date`”
mkdir $so_es1/”$backup_dir”
cp –r $so_es1/*.{c,h} $so_es1/”$backup_dir”
Sistemi Operativi - Introduzione
34
Scarica

so_0910_2 - Politecnico di Torino