Sistemi Operativi – La shell Salvatore Campagna Email:...

30
Sistemi Operativi – La shell Salvatore Campagna Email: [email protected] Politecnico di Torino Dipartimento di Automatica e Informatica

Transcript of Sistemi Operativi – La shell Salvatore Campagna Email:...

Page 1: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Sistemi Operativi – La shell

Salvatore CampagnaEmail: [email protected] di TorinoDipartimento di Automatica e Informatica

Page 2: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell - InstroduzioneLo strato più esterno del Sistema

OperativoIn UNIX/Linux la shell non è parte

del sistema operativo ma è un normale processo utente

Utilizzata per impartire comandi

Page 3: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell - IntroduzioneIn UNIX esistono diverse shell

◦Bourne Shell (sh)◦C-shell (csh)◦Korn shell (ksh)◦Tahoe C-shell (tcsh)◦Bourne Again Shell (bash)

Page 4: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell - InstroduzioneAll’avvio della shell vengono

eseguiti i comandi contenuti in due file:

1. /etc/profile: per i comandi globali

2. ~/.profile: comandi per il singolo utente

Alcune eseguono anche i comani contenuti nel file .logout quando terminano

Page 5: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Avvio shell BashPer la shell Bash i file sono:

◦Shell di login:  /etc/profile e poi dalla propria home .bash_profile, .bash_login, .profile (di questi ultimi tre verrà letto solo il primo file esistente)

◦Shell di login: .bash_logout, questo file viene letto all'uscita dalla shell

◦Interattiva: .bashrc

Page 6: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Caratteristiche della shellParametriCompletamento automaticoPipe (o Pipeline)Redirezione dell’I/OHistoryAliasingEspansione dei comandi

Page 7: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – I parametriSimili a variabili di un linguaggio

di programmazioneMemorizzano uno o più valoriNon hanno un tipoPossono avere un nome ($n,

$nome, $address,…)Posizionali ($1, $2, …) se si

riferiscono a parametri passati a un programma sulla riga di comando

Page 8: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Parametri speciali$0: nome del comando in esecuzione$#: numero di parametri posizionali sulla

riga di comando$?: exit stats dell’ultimo comando$$: process ID della shell corrente$!: process ID dell’ultimo comando

eseguito in background$-: opzioni passate alla shell corrente$*: una stringa contenente tutti i

parametri posizionali ($1, $2, …)$@: come $*

Page 9: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Le variabiliAssegnazione: nome=“Alice”,

max=“10”ATTENZIONE: non inserire spazi

tra “=“ e ‘”’export nome: rende la variabile

nome visibile ad altri processiunset nome: cancella la variabile

e il suo valore

Page 10: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Le variabiliVariabili built-in:

◦PATH: variabile che indica le directory in cui cercare i comandi

◦HOME: variabile che punta alla home directory dell’utente

◦BASH_ARGV, BASH_ARGC: parametri e numero di parametri passati alla shell

Vettori◦vett[1]=‘’uno’’, vett[2]=‘’due’’◦v=(uno due tre quattro)

Page 11: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – visualizzazione di variabiliSi deve precedere il nome della

variabile con il simbolo ‘$’Esempi:

◦echo $nome visualizza il contenuto della variabile nome

◦echo ${vett[2]} visualizza il contenuto dell’elemento con indice ‘2’ del vettore vett

Page 12: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Completamento automaticoIl tasto TAB permette di espandere

e completare nomi di file, variabili e comandi:◦Se la riga comincia con $ la shell cerca

di completare con un nome di variabile◦Altrimenti cerca di completare la riga

con un comando◦In fine cerca di completare con il nome

di un file ordinario della directory corrente

Page 13: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell - PipeConcatenazione di più comandi in

modo tale che lo stdout di un processo diventi lo stdin di un altro processo

proc1proc1stdin(0) stdout(1)

stderr(2)

proc2proc2stdin stdout

stderr

Page 14: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell - PipeSintassi: comando1 | comando2L’output di comandi1 diventa

l’input di comando2Esempi:

◦ls –la | more◦cat /etc/passwd | sed ‘s/bash/csh/g’◦cat /etc/passwd | grep “alice”

Page 15: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Redirezione dell I/OE’possibile redirigere stdout,

stdin e stderr di un processo su file

comando < file: redirige lo stdin di comando in modo che l’input sia letto da file

comando > file: redirige lo stdout di comando in modo che scriva su file

Esempio: cat /etc/passwd | grep “alice” > alice_data.txt

Page 16: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Redirezione dell’I/Ocomando >> file: redirige lo stdout di

comando in modo che venga scritto su file in modalità append (non cancella i dati presenti)

comando << file: redirige lo stdin di comando in modo che venga letto da HERE DOCUMENT

Esempio:◦$ tr a-z A-Z <<END_TEXT ◦> one two three◦> uno dos tres◦> END_TEXT ◦ONE TWO THREE ◦UNO DOS TRES

Page 17: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell – Redirezione dell’I/Ocomando &> file: redirige stderr

e stdout di comando su filecomando 2> file: redirige stderr

su filecomando 1> file: redirige stdout

su file (come comando > file)comando 1> filea 2>fileb:

redirige stdout e stderr su file diversi

Page 18: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La shell redirezione dell’I/O/dev/null è un file virtuale con la

caratteristica di scartare (non memorizzare) tutti i dati che gli vengono scritti

comando > /dev/null: scrive scartando i dati di output

comando < /dev/null: legge un end-of-file EOF

comando 2> /dev/null: ignora i messaggi di errore

Page 19: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La history : mostra i comandi eseguiti

precedentementehistory: visualizza tutti I comandi

eseguiti su due colonne con <numero comando> <comando>

Si può fare riferimento a un comando contenuto nella history attraverso il suo numero

Page 20: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

La history!n: esegue il comando n

◦Se n è negativo esegue l’n-ultimo comando

!<stringa>: esegue l’ultimo comando che comincia con <stringa>

!!:s/<old>/<new>: rimpiazza la prima occorrenza di <old> nell’ultimo comando con <new>

CTRL-r: entra in modalità di ricerca

Page 21: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

AliasingE’ possibile definire nuovi nomi

da associare a un comandoIl nuovo nome è un aliasIl comando alias senza parametri

visualizza gli alias definiti per la shell corrente

alias <alias>= ‘’valore’’ definisce un nuovo alias

unalias <alias>: cancella l’alias con nome <alias>

Page 22: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

AliasingEsempi:

◦alias ll = ‘’ls –l’’◦alias rm = ‘’rm –i’’◦alias cd.. = ‘’cd ..’’◦alias dir = ‘’ls –l’’◦alias vi=‘’vim’’

Sono validi nella shell correnteSe inseriti in

/home/<user>/.bashrc gli alias vengono definiti all’avvio della shell

Page 23: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiLa shell esegue una serie di

espansioni o sostituzioni in un comando

Esempio: ls $HOMELa shell espande (o sostituisce) la

variabile $HOME con il suo contenuto

Il comando eseguito diventa ls /home/alice

Page 24: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiIl quoting serve a evitare

l’espansioneCi sono tre modi per fare quoting

◦Usare il carattere ‘\’: preserva il valore letterale del carattere che segue

◦Gli apici singoli ‘ ‘: preservano il valore letterale del loro contenuto

◦Gli apici doppi: come precedenti ma escluso $, $() e \

Page 25: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiLa shell esegue l’espansione in un

ordine ben preciso dopo aver analizzato la riga di comando

Brace Expansion: viene sostituito prima il contenuto delle parentesi graffe (se non quotate)◦Esempio: cat file{1,2,3}.txt viene sostituito

da cat file1.txt file2.txt file3.txtTilde Expansion: viene espanso i

carattere tilde ~ (se non quotate)◦Esempio: cat ~/file.txt viene espanso in

cat /home/alice/file.txt 

Page 26: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiParameter Expansion: si sostituisce il

parametro col suo valore◦Esempio: dir=‘’/tmp’’; find $dir –name

‘’*.c’’ viene espanso in find /tmp -name ‘’*.c’’

Command Expansion: si sostituisce con l’output del comando◦Esempio: cat $(find . –name ‘’*.c’’) viene

espanso in cat main.c file1.c file2.cSupponendo che la directory corrente contenga i file main.c file1.c e file2.c

Page 27: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiArithmetic Expansion: viene

espanso il risultato di una operazione aritmetica◦Esempio: echo $((2*3+1)) viene

espanso in echo 7Word Splitting: la riga di

comando viene suddivsa in parole

Page 28: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiFilename expansion: vengono sostituiti i

nomi di file in corrispondenza di espressioni contenenti *, ? E [...]◦Esempio: cat *.c viene espanso in cat main.c

file1.c file2.c (* = qualsiasi stringa)◦Esempio: cat file?.c viene espanso in cat

file1.c file2.c (? = qualsiasi carattere singolo)◦Esempio: cat file[ab].c espanso in cat filea.c

fileb.c ([ ] = qualsiasi carattere tra parentesi)Supponendo che la directory corrente contenga i file main.c file1.c e file2.c

Page 29: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

Espansione dei comandiQuote Removal: tutte le occorrenze non

quotate dei caratteri \ ‘ e ‘’ vengono rimossi a meno che queste non siano il risultato di una espansione◦Esempio echo ‘Hello World’ espanso in echo

Hello World◦Esempio: var=‘ ’’hello’’ ‘ l’espansione di

echo $var da come risultato echo ‘’hello’’◦Gli apici doppi sono il risultato della

parameter expansion della variabile var e quindi non vengono rimossi quando viene eseguito il quote removal

Page 30: Sistemi Operativi – La shell Salvatore Campagna Email: salvatore.campagna@polito.itsalvatore.campagna@polito.it Politecnico di Torino Dipartimento di Automatica.

EsempioCome vengono espansi i seguenti

comandi?◦so_es=‘’ ~/so_es ‘’◦backup_dir=‘’backup_$(date)’’◦mkdir -p $so_es/”$backup_dir”◦cp –r ~/so_es1/*.{c,h} ~/so_es1/”$backup_dir”