Il sistema operativo UNIX
La shell
Niccolò Battezzati
<[email protected]>
Politecnico di Torino
Dip. Automatica e Informatica
Sistemi Operativi - Introduzione
1
Organizzazione
Esercitazioni in aula
– MAR 14:30 – 16:00
(AULA 14 – non tutte le settimane)
Laboratorio
– MER 13:00 – 16:00
– MER 16:00 – 19:00
(LAIB 1D)
Sistemi Operativi - Introduzione
Squadre:
– A: A-I + PoliTONG
– B: J-Z
– Alterniamo gli orari ???
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
4
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
5
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
6
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
7
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
8
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
9
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
10
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
11
Caratteristiche e uso della shell
BASH
•
•
•
•
•
•
•
Parametri
Completamento
Pipeline
Redirezione dell'I/O
History
Aliasing
Gestione dei processi
Sistemi Operativi - Introduzione
12
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
13
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]})
14
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
15
Pipe
stdin(0)
proc stdout(1)
stderr(2)
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
16
Pipe
• 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
17
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
18
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
19
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
20
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
21
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
22
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 ...”
– ~: sostituito con $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
23
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
24
Interpretazione - flusso
Word splitting
Fatti solo per
le parti non
“quotate”
Brace expansion
Tilde expansion
per il nuovo
comando si ripete
l’espansione
Parameter expansion
Command expansion
Arithmetic expansion
Word splitting
Pathname expansion
Quote removal
Sistemi Operativi - Introduzione
25
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
26
Indice
• Introduzione
• Caratteristiche
• Espansione dei comandi
• Introduzione agli script
Sistemi Operativi - Introduzione
27
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
28
Script - introduzione
#!/bin/bash
#so_es1=“~/so_es1”
this is a comment
backup_dir=“backup_`date`”
mkdir ~/so_es1/”$backup_dir”
cp –r ~/so_es1/*.{c,h} ~/so_es1/”$backup_dir”
Sistemi Operativi - Introduzione
29
Scarica

so_1011_2