Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX La shell Niccolò Battezzati...

Post on 01-May-2015

217 views 1 download

Transcript of Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX La shell Niccolò Battezzati...

Sistemi Operativi - Introduzione1

Il sistema operativo UNIXLa shell

Niccolò Battezzati <niccolo.battezzati@polito.it>

Politecnico di Torino

Dip. Automatica e Informatica

Sistemi Operativi - Introduzione2

Organizzazione

Laboratorio

– MER 13:00 – 16:00

– MER 16:00 – 19:00(LAIB 1D)

Esercitazioni in aula

– MAR 14:30 – 16:00(AULA 14 – non tutte le settimane)

Squadre:

– A: A-I + PoliTONG

– B: J-Z

– Alterniamo gli orari ???

Sistemi Operativi - Introduzione3

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 - Introduzione4

Indice• Introduzione

• Caratteristiche

• Espansione dei comandi

• Scripting di base

Sistemi Operativi - Introduzione5

Indice• Introduzione

• Caratteristiche

• Espansione dei comandi

• Introduzione agli script

Sistemi Operativi - Introduzione6

Introduzione

• 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 - Introduzione7

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 - Introduzione8

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 - Introduzione9

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 - Introduzione10

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 - Introduzione11

Indice• Introduzione

• Caratteristiche

• Espansione dei comandi

• Introduzione agli script

Sistemi Operativi - Introduzione12

Caratteristiche e uso della shell BASH

• Parametri• Completamento• Pipeline• Redirezione dell'I/O• History• Aliasing• Gestione dei processi

Sistemi Operativi - Introduzione13

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 - Introduzione14

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 ${nome[indice]})

Sistemi Operativi - Introduzione15

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 - Introduzione16

Pipe

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

procprocstdin(0) stdout(1)

stderr(2)

procprocstdin stdout

stderr

Sistemi Operativi - Introduzione17

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 - Introduzione18

Redirezione dell’I/O• comando < file: stdin da file• comando > file: stdout in file (cancellato se

esiste)• comando >> file: stdout accodato a file• comando << FINE: stdin da “here document”

textFINE

• comando &> file: (bash) stderr+stdout in file• comando 2> 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 - Introduzione19

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 - Introduzione20

Aliasing• E’ possibile definire dei comandi con nuovi nomi

(alias)• Gli alias sono locali alla shell corrente

• alias: elenca gli alias definiti• alias nome=“valore”: definisce un alias• unalias nome: cancella un alias

Esempi:alias ll=“ls -al”alias vi=“vim”

Sistemi Operativi - Introduzione21

Indice• Introduzione

• Caratteristiche

• Espansione dei comandi

• Introduzione agli script

Sistemi Operativi - Introduzione22

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 - Introduzione23

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 - Introduzione24

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 - Introduzione25

Interpretazione - flusso

Word splitting

Brace expansion

Tilde expansion

Parameter expansionCommand expansionArithmetic expansion

Word splitting

Pathname expansion

Quote removal

per il nuovo comando si ripete l’espansione

Fatti solo per le parti non “quotate”

Sistemi Operativi - Introduzione26

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 - Introduzione27

Indice• Introduzione

• Caratteristiche

• Espansione dei comandi

• Introduzione agli script

Sistemi Operativi - Introduzione28

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 - Introduzione29

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”