Comments
Description
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