La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la...

96
La shell di Unix Uso interattivo e scripting Paolo Baldan [email protected] Dipartimento di Informatica Universit ` a di Venezia La shell di Unix – p.1/96

Transcript of La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la...

Page 1: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

La shell di UnixUso interattivo e scripting

Paolo Baldan

[email protected]

Dipartimento di Informatica

Universita di Venezia

La shell di Unix – p.1/96

Page 2: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Obiettivi

L’obiettivo di questo ciclo di lezioni è quello di illustrare le funzionalitàprincipali della shell di UNIX e di tools comunemente presenti nelledistribuzioni di UNIX.

Uso interattivo della shellConcetti di base, interazione con la shell, comandi di base, personalizzazione.

Struttura e funzionalità della shell di UNIX (con particolareriferimento a Linux ed alla Bash shell).Espansione della riga di comando, ridirezione, comandi composti (liste, pipe, sequenze

condizionali).

Programmazione della shell (shell scripting).Funzioni, pattern matching, costrutti di controllo, tipi, segnali, debugging.

La shell di Unix – p.2/96

Page 3: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Introduzione a UNIX

(Ripasso)

La shell di Unix – p.3/96

Page 4: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cos’è UNIX

UNIX è un sistema operativo multiutente e multitasking.Più utenti possono avere vari tasks/processi che sono eseguiticontemporaneamente.

UNIX è anche un ambiente di sviluppo software.È nato ed è stato progettato per questo scopo. (Ad esempio fornisceutilità di sistema, editor, compilatori, assemblatori, interpreti, . . . )

UNIX è stato appositamente progettato per essere generale eindipendente dall’hardware (facilmente portabile essendo scritto nellinguaggio ad alto livello C).

La shell di Unix – p.4/96

Page 5: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Breve storia di UNIX/A

1965: La AT&T, il MIT e la General Electric si uniscono nelprogetto di un s.o. innovativo, che sia multiutente, multitasking,multiprocessore, con multilevel file system: MULTICS.

1969: Il progetto MULTICS “fallisce”.

Presso i Bell Laboratories della AT&T, dalle ceneri di MULTICS

nasce UNIX, sviluppato da Ken Thompson e Dennis Ritchie delgruppo Multics per un PDP-7. Anche sulla base dell’ esperienzaMULTICS, incorpora alcune caratteristiche e supera i limiti di sistemioperativi preesistenti, supportando, in modo efficiente, multiutenza emultitasking.

Il nome UNIX (inizialmente Unics) è scelto da Kernighan inopposizione a MULTICS.

La shell di Unix – p.5/96

Page 6: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Breve storia di UNIX / C

1973: La terza versione viene scritta nel linguaggio diprogrammazione ad alto livello C (anziché in assembler), sviluppatoai Bell Labs da Dennis Ritchie (come evoluzione di B) proprio persupportare UNIX.

È un passo importante dato che esisteva la convinzione che solo illinguaggio Assembly permettesse di ottenere un livello di efficienzaaccettabile.

Fine anni ’70: AT&T rende UNIX largamente disponibile, offrendoloalle Università a basso costo e distribuisce i sorgenti di varie versioni(costretta da un decreto dell’antitrust che le impone di scegliere tratelecomunicazioni e informatica).

La shell di Unix – p.6/96

Page 7: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Breve storia di UNIX / D

1984: presso l’Università di Berkeley (California) nasce la BerkeleySoftware Distribution (BSD).

versione 4BSD: sviluppata con una sovvenzione del DARPA alfine di progettare uno standard UNIX per uso governativo.

versione 4.3BSD: sviluppata originariamente per il VAX, è unadelle versioni più influenti. Verrà “portata” su molte altrepiattaforme.

1984: molte caratteristiche della BSD vengono incorporate nellanuova versione di AT&T: la System V.

Esistono oggi diverse implementazioni di UNIX supportate da moltecase costruttrici di computer: SunOS/Solaris (Sun Microsystems),Ultrix (DEC), XENIX (Microsoft), AIX (IBM), . . . .

La shell di Unix – p.7/96

Page 8: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Storia di “free” UNIX

1983: Richard Stallmann (MIT) inizia una reimplementazione “free”di UNIX, detta GNU (acronimo ricorsivo di “GNU is not UNIX”) cheporterà a un editor (emacs), un compilatore (gcc), un debugger(gdb) e numerosi altri tools.

1991: Linus Torvald (studente ad Helsinki) inizia l’implementazionedi un kernel POSIX compatibile, che prenderà il nome di Linux.Arricchito con i tools GNU esistenti ed altri sviluppati da volontari,diviene un sostituto completo di UNIX.

1991: L’ Università di Berkeley rilascia una versione “free” di UNIX,rimuovendo il codice proprietario rimanente della AT&T. Progettivolontari continueranno poi il suo sviluppo (FreeBSD, NetBSD,OpenBSD).

La shell di Unix – p.8/96

Page 9: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Copyleft

Public domain

Il metodo più semplice per produrre “free software” è quello direnderlo di pubblico dominio, senza copyright.

In questo modo, però, qualcuno può modificare il software edistribuirlo come un prodotto proprietario.

Copyleft: permette di distribuire un software come free, garantendoche eventuali versioni modificate ed estese saranno ancora free.

Ogni utente può avere accesso libero al software.

Può avere accesso ai sorgenti, modificare il programma edestenderlo.

Può ridistribuirlo, ma con lo stesso tipo di licenza.

La shell di Unix – p.9/96

Page 10: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Filosofia di UNIX

Influenzata da problematiche relative all’HW disponibile all’epoca dellaprogettazione di UNIX: i dispositivi di I/O erano teletype e più tarditerminali video con 80 caratteri per linea (ASCII fixed width).

Comandi, sintassi di input e output succinti (per ridurre il tempo dibattitura).

Ogni componente/programma/tool realizza una sola funzione inmodo semplice ed efficiente (UNIX vs. MULTICS). Es. who e sort.

L’output di un programma può diventare l’input di un altro.Programmi elementari possono essere combinati per eseguirecompiti complessi (Es. who | sort).

Il principale software di interfaccia (la shell) è un normaleprogramma, sostituibile, senza privilegi speciali.

Supporto per automatizzare attività di routine.

La shell di Unix – p.10/96

Page 11: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Motivi del successo di UNIX

Ha dimensioni relativamente ridotte, un progetto modulare e “pulito”

Indipendenza dall’hardware

Il codice del SO è scritto in C anziché in uno specificolinguaggio assembler.

UNIX e le applicazioni UNIX possono essere “facilmente”portate da un sistema hardware ad un altro. Il portingusualmente consiste nel trasferire il codice sorgente ericompilarlo.

È un ambiente produttivo per lo sviluppo del software

Ricco insieme di tool disponibili.

Linguaggio di comandi versatile.

La shell di Unix – p.11/96

Page 12: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Principali caratteristiche di UNIX

Gestione dei Processi

Sono basati sul modello fork / exec

Hanno un’identità ed un possessore, informazioni utilizzate perprotezione e scheduling.

La CPU è gestita in time-sharing, suddividendo il tempo di CPUin slice (quanti di tempo), assegnate ai processi in base a priorità(e comportamento passato).

Supporto alla programmazione concorrente e distribuita, tramitemeccanismi di IPC.

Gestione della memoria

basata su paginazione

con varianti, es. buddy system

La shell di Unix – p.12/96

Page 13: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Principali caratteristiche di UNIX/A

File System

Struttura gerarchica grafo radicato (aciclico), in cui file eprocessi hanno una propria locazione.

Strumenti per la creazione, modifica e distruzione e protezione(controllo degli accessi) ai file.

Unix è orientato ai file: Tratta i dispositivi periferici come sefossero dei file (speciali). Stampanti, terminali ed altridispositivi sono accessibili nello stesso modo di file ordinari.

La shell di Unix – p.13/96

Page 14: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Componenti di UNIX

Kernel: nucleo del sistema (gestore di risorse: CPU, memoria,dispositivi, . . . )

System Call e routine di libreria: facilitano la programmazione,permettendo di accedere a funzionalità del kernel (manipolazione difile, gestione di processi concorrenti e comunicazione tra processi).

Shell: interprete di comandi (interfaccia tra l’utente ed il kernel).

Utilities: programmi di utilità (editor, operazioni su file, stampa,supporto alla programmazione, . . . )

6?

�-

HW

kernelSystem call

UtenteShell

Programmi di utilita

La shell di Unix – p.14/96

Page 15: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Uso interattivo della shell

La shell di Unix – p.15/96

Page 16: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

La Shell (informalmente . . . )

Interfaccia (testuale) tramite la quale l’utente interagisce con ilsistema dopo il login.

È un interprete di comandi: legge ciascuna linea di comando, neinterpreta le diverse componenti e la esegue.

Ogni sistema UNIX mette a disposizione vari tipi di shell. Le shellpiù diffuse sono:

Bourne shell (sh), C shell (csh), Korn shell (ksh), TC shell (tcsh),

Bourne Again shell (bash).

Inizialmente, l’amministratore del sistema fornisce all’utente unashell di default che però può essere cambiata o personalizzata.

Ogni shell fornisce un linguaggio di programmazione. I programmidi shell, chiamati shell script, sono sequenze di comandi, concostrutti di controllo, che automatizzano semplici task.

La shell di Unix – p.16/96

Page 17: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Perché usare una shell testuale?

Ormai tutti i sistemi UNIX hanno un’interfaccia grafica. Perché usare icomandi in linea di una shell testuale?

Potenza e semplicità: I comandi UNIX sono progettati per risolvereproblemi specifici. Sono semplici (senza menù e opzioni nascoste) eproprio per questo potenti (es. grep parola filename).

Velocità e flessibilità: è più veloce scrivere pochi caratteri da tastierapiuttosto che cercare un programma opportuno e usare le operazioniche fornisce sulla base delle proprie specifiche esigenze.

Accessibilità: permette di accedere efficientemente ad un sistema inremoto.

La shell di Unix – p.17/96

Page 18: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

I comandi UNIX

La sintassi tipica dei comandi UNIX (builtin e file eseguibili) è la seguente

comando <opzioni> <argomenti>

Opzioni

Sono opzionali e influiscono sul funzionamento del comando.

Consistono generalmente di un hyphen (-) seguito da una sola lettera(Es. ls -l). Hanno anche una forma estesa (Es. ls --format

long). Possono avere un argomento (Es. dvips -o p.ps p.dvi).Spesso più opzioni possono essere raggruppate insieme dopo un solohyphen (Es. ls -al).

Argomenti

Si possono avere più argomenti o nessuno.

Alcuni argomenti sono opzionali. Se non specificati assumono valoridi default.

La shell di Unix – p.18/96

Page 19: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

I comandi di UNIX - Esempi

nessun argomento: il comando date mostra data e ora corrente.

date

un solo argomento: il comando cd cambia la directory di lavorocorrente in quella specificata dal suo argomento.

cd mydir

un’opzione ed un argomento: il comando wc conta il numero diparole/caratteri/righe in un file, in base all’opzione specificata.

wc -w file1 conta le parole in file1

wc -c file1 conta i caratteri in file1

wc -l file1 conta le linee in file1

La shell di Unix – p.19/96

Page 20: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

I comandi di UNIX - Esempi / A

numero arbitrario di argomenti: il comando cat concatena e mostrasullo schermo il contenuto dei file argomento.

cat file1 file2 file3

più opzioni ed un argomento di default:

ls -als

lista dettagliata (l, long) di tutti (a, all) i file, con dimensione(s, size). L’argomento di default è la directory corrente.

Più comandi, separati da “;” possono essere scritti sulla stessa linea.

cd newdir ; ls -l

I comandi possono essere scritti su più linee usano il caratterebackslash (\). Ad esempio,

cp /users/kelly/recipe kelly.recipe ; \

lpr -Pps3 kelly.recipeLa shell di Unix – p.20/96

Page 21: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Caratteri di controllo

Alcune combinazioni di tasti hanno un effetto particolare sul terminale.I caratteri di “controllo” sono ottenuti tenendo premuto il tasto Ctrl equindi premendo un secondo tasto. Ecco i più comuni:

Ctrl-u - erase the command line

Ctrl-c - stop/kill a command

Ctrl-h - backspace (usually)

Ctrl-z - suspend a command

Ctrl-s - stop the screen from scrolling

Ctrl-q - continue scrolling

Ctrl-d - exit an interactive program

(signals end of data)

La shell di Unix – p.21/96

Page 22: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Esempio - Ctrl-d

Il programma cat, senza argomenti, copia l’input (battuto datastiera) sull’output (schermo). Es.

/home/rossi$ catQuesto l’ho scritto io! ← inputQuesto l’ho scritto io! ← output

La mancanza del prompt indica che siamo ancora in cat.

Per segnalare a cat (ed a molti altri programmi interattivi) la finedell’inserimento dei dati occorre digitare Ctrl-d, detto carattere difine-file (End-Of-File o EOF).

Esempio: Provate il programma sort: se inserite un paio di linee epoi premete Ctrl− d, sort le visualizzerà in ordine alfabetico.

La shell di Unix – p.22/96

Page 23: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Editing della linea di comando

Molte shell, tra cui bash, offrono funzioni di editing della linea dicomando che sono “ereditate” dall’editor emacs. Ecco alcune dellefunzioni più utili:

Ctrl-a - va a inizio riga

Ctrl-e - va a fine riga

Ctrl-k - cancella il resto della linea

Ctrl-y - reinserisce la stringa cancellata

Ctrl-d - cancella il carattere sul cursore

La shell, inoltre, registra i comandi inseriti dall’utente. Il comandohistory li elenca. Per richiamarli . . .

!! - richiama il comando precedente

!n - richiama la n-ma entry

↑, ↓ - naviga nella history

La shell di Unix – p.23/96

Page 24: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Completamento dei comandi

Un’altra caratteristica di bash è il completamento automatico della linea dicomando con il tasto Tab.

Vediamo un esempio di utilizzo. Supponiamo di essere in questasituazione.

/home/rossi$ ls

un-file-con-un-nome-molto-lungo

Per copiare il file su corto, anziché digitare per esteso il nome sipuò digitare cp un. Quindi premendo il tasto Tab il resto del nomeviene mostrato nella riga di comando e si potrà a questo puntocompletare il comando.

Se esistono più completamenti possibili, premendo Tab verrà emessoun suono. Premendo nuovamente Tab si ottiene la lista di tutti i fileche iniziano in quel modo. La shell di Unix – p.24/96

Page 25: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Gestione dei files

La shell di Unix – p.25/96

Page 26: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

File system

File system: è la struttura che permette la memorizzazione el’organizzazione dei dati nel sistema.

È estremamente importante perché UNIX è un sistema orientato aifile nel senso che molte operazioni vengono effettuate tramite essi(accesso a periferiche e comunicazione tra processi).

Un nome nel file system può riferirsi a:

file dati (che può anche essere una directory)

dispositivo di input/output (disco, nastro, stampante, . . . )

memoria interna

informazioni sul sistema hardware e software

La shell di Unix – p.26/96

Page 27: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

File system / A

Un file può essere visto come una sequenza di byte,indipendentemente dal tipo di file (file dati, dispositivo, . . . )

Una directory può essere vista come un contenitore di file o didirectory, si ha quindi una struttura gerarchica (ad albero . . . se sitrascurano i link).

������������

��

��

����

��������

EE

��

�JJ

��

""

""�

� DD

�����

� BB

ZZ

ZZ

PPPPPPPP

����

��

��

��

���

���

��

��

/

bin

passwdsh date csh

dev

nullttya

usr

bin lib local

mail bin papers

home

user3user2user1group

etc lib tmp

La shell di Unix – p.27/96

Page 28: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Organizzazione del file system

Per tradizione esistono alcune directory che nel file system assumono un ruoloparticolare.

\ è la radice della gerarchia;

bin comandi più importanti del sistema;

sbin comandi che riguardano alcune importanti funzioni di gestione del sistema(dump, shutdown, ecc.);

dev dispositivi di input/output che possono essere visti dalla macchina (dischi, nastri, ecc.);

etc file di configurazione del sistema (passwd, fstab, lilo.conf, ecc.);

lib librerie condivise per ridurre la dimensione dei file eseguibili;

mnt mount point dei dispositivi esterni;

var contiene file di dimensione variabile (es. in log ci sono i file di log, in spoolci sono file usati da altri programmi (posta in ingresso, stampe, . . . );

usr contiene i file non essenziali ma utili (es: le sottodirectory bin con emacs, gzip, ...X11R6 con il sistema XWindow, man con tutti i manuali, src con tutti i sorgenti);

proc è un file system virtuale che contiene tutte le informazioni di sistema, dai processialla cpu (cpuinfo, version, . . . ).

home contiene le directory personali di tutti gli utenti.La shell di Unix – p.28/96

Page 29: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Working e Home directory

In UNIX ogni processo ha associata una working directory (directorydi lavoro).Per conoscere la directory corrente si può utilizzare il comando pwd

$ pwd

/home/rossi

$

Ogni utente “username” ha una home directory — la parte del filesystem riservata per suoi file. È indicata con

˜username

Dopo il login, l’utente si trova automaticamente nella propria homedirectory, da dove comincia a lavorare.

La shell di Unix – p.29/96

Page 30: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Navigare nel file system - cd

Ci si può spostare all’interno del file system e quindi modificare laworking directory con il comando cd.

cd [<dir>]

Il parametro <dir> è opzionale. Se non viene indicato, il comandoporta nella home directory. Es:

/home/rossi$ cd /bin

/bin$ cd

/home/rossi$

Per la navigazione risultano utili le directory: “.” (working directory)e “..” (directory padre). Es:.

/home/rossi$ cd ..

/home$ cd .

/home$La shell di Unix – p.30/96

Page 31: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Pathname

Specifica la locazione di un file all’interno di un file system.

Pathname assoluto: dice come raggiungere un file partendo dallaradice del file system; comincia sempre con / (slash).

/usr/local/doc/training/sample

Pathname relativo: dice come raggiungere un file a partire dallaworking directory o dalla home directory di un utente.

training/sample

../bin

˜/projects/report

˜rossi/projects/report

Esempio: Per spostarsi da /home/rossi a /home/bianchi:

cd ../bianchi - relative pathname

cd /home/bianchi - absolute pathname

La shell di Unix – p.31/96

Page 32: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Visualizzare una directory

Il comando ls permette di visualizzare il contenuto di una (o più)directory.

ls [-alsFR] [<dir1> ... <dirn>]

Alcune opzioni:

-a visualizza anche i file nascosti (che iniziano con “.”)

-l visualizza informazione estesa sui file

-s visualizza la dimensione

-F aggiunge un carattere finale al nome che ne denota il tipo:“/” per directory, “*” per eseguibile, “@” per link,“=” per socket, nessuno per i file ordinari).

-R mostra ricorsivamente le sottodirectory

Se non viene specificata nessuna directory, ls si riferisce alla directorycorrente.

La shell di Unix – p.32/96

Page 33: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Creare e rimuovere directory

Tramite i comandi mkdir e rmdir si possono creare e cancellare directory.mkdir <dir1> [<dir2> ... <dirn>]

rmdir <dir1> [<dir2> ... <dirn>]

Ognuno degli argomenti è considerato una directory da creare/cancellare.Es.:

/home/rossi$ mkdir report-2000 report-2001

/home/rossi$ ls -F

report-2000/ report-2001/

/home/rossi$ rmdir report-2000 report-2002

rmdir: report-2002: No such file or directory

/home/rossi/$ ls -F

report-2001/

Una directory può essere rimossa solo se è vuota:/home/rossi$ rmdir ..

rmdir: ‘..’: Directory not-emptyLa shell di Unix – p.33/96

Page 34: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Copiare, spostare, rimuovere file

Tramite il comando cp si possono copiare file:cp -i <oldname> <newname>

cp -ir <name1> [<name2> ... <namen>] <destdir>

Prima forma: crea una copia <newname> del file <oldname>. Con l’opzione“-i” il sistema chiede conferma prima di sovrascrivere un file. Es:

/home/rossi$ ls

chap1

/home/rossi$ cp chap1 chap2; ls

chap1 chap2

Seconda forma: il comando ha più di due argomenti. In questo casol’ultimo <destdir> deve essere una directory, dove vengono inseriti i file<name1> ... <namen>. L’opzione “-r” permette di copiarericorsivamente le sottodirectory.

La shell di Unix – p.34/96

Page 35: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Copiare, spostare, rimuovere file / A

Il comando mv per spostare/rinominare file ha sintassi efunzionamento simile a cp, se non per il fatto che il file originalescompare

mv -i <oldname> <newname>

mv -i <name1> [<name2> ... <namen>] <dest>

Copia + rimozione? Move tra fs diversi?

Il comando per la cancellazione di file è rm ed ha sintassi

rm -ir <name1> <name2> ... <namen>

Particolarmente interessante l’opzione “-r” che permette dirimuovere una directory con tutto il corrispondente “sottoalbero”.

La shell di Unix – p.35/96

Page 36: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

I Metacaratteri

Accade spesso di voler operare su più file contemporaneamente. Ad es.supponiamo di voler copiare tutti i file che cominciano con data nelladirectory ˜/backup).

UNIX fornisce un modo molto efficiente per ottenere questo scopo:/home/rossi/report$ ls -F

data-new data1 data2 inittab2 pippo

/home/rossi/report$ mkdir ˜/backup

/home/rossi/report$ cp data* ˜/backup

/home/rossi/report$ ls -F ˜/backup

data-new data1 data2

/home/rossi/report$

(Cosa farebbe cp d*2 ˜/backup?)

La shell di Unix – p.36/96

Page 37: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

I Metacaratteri / A

Ecco un elenco dei metacaratteri:

? ogni carattere

* ogni stringa di caratteri

[set] ogni carattere in set

[!set] ogni carattere non in set

dove set può essere una lista di caratteri (es. [abc]) oppure un intervallo(es. [a-c]) o una combinazione dei due.

Se la shell trova un’espressione contenente metacaratteri in una linea dicomando, la espande con tutti i nomi di file che “soddisfano” (match)l’espressione (espansione di percorso).

La shell di Unix – p.37/96

Page 38: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

I Metacaratteri / B

Per capire meglio come funziona l’espansione di percorso introduciamo unnuovo comando, echo. È un comando estremamente semplice: rimandasullo schermo ogni parametro./home/rossi$ echo Ciao!

Ciao!

/home/rossi$ cd report

/home/rossi/report$ ls -F

data-new data1 data2 inittab pippo pippo2

/home/rossi/report$ echo data*

data-new data1 data2

/home/rossi/report$ echo data?

data1 data2

/home/rossi/report$ echo [!id]*

pippo pippo2

/home/rossi/report$

Es. Cosa accade se si esegue cd *?La shell di Unix – p.38/96

Page 39: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Caratteri speciali

NEWLINE - initiates command execution

; - separates commands on same line

( ) - groups commands or identifies a function

& - executes a command in the background

| - pipe

> - redirects standard output

>> - appends standard output

< - redirects standard input

* - wildcard for any number of characters in a file name

? - wildcard for a single character in a file name

- quotes the following character

’ - quotes a string preventing all substitutions

" - quotes a string allowing variable and command substitution

‘ - performs command substitution

[ ] - denotes a character class in a file name

$ - references a variable

- command grouping within a function

. - executes a command (if at beginning of line)

# - begins a comment

: - null command La shell di Unix – p.39/96

Page 40: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Accesso ai file

La shell di Unix – p.40/96

Page 41: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Informazioni sui file

Time stamp — Ad ogni file sono associate tre date: cambiamentoattributi, la data di ultima modifica e ultimo accesso.

User (Proprietario) — Ogni file in UNIX è di proprietà di un utentedel sistema.

Group (Gruppo) — Ogni file è associato ad un gruppo di utenti:quello più comune per i file utente è chiamato users, ed ègeneralmente condiviso da tutti gli account utente del sistema.

Permessi — Ad ogni file sono associati dei permessi (chiamati anche“privilegi”), che specificano chi e in che modo (lettura, modifica,esecuzione) può accedere a quel file. Ognuno di questi permessi puòessere impostato separatamente per il proprietario, il gruppo e tuttigli altri utenti (others).

La shell di Unix – p.41/96

Page 42: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Modificare le informazioni sui file

Le informazioni sui file possono essere visualizzate tramite ilcomando ls -l. Per esempio

rossi@linuslab:/home/rossi/report > ls -l

total 2

-rw-r--r-- 1 rossi users 15 Mar 9 12:40 pippo

-rw-r--r-- 1 rossi users 155 Mar 9 12:41 pluto

drwxr-xr-x 2 rossi users 1024 Mar 7 17:33 OLD

In particolare, ogni linea include:

il tipo del file (primo carattere)

i permessi di accesso (caratteri 2-10):

2-4: owner 5-7: group 8-10: other

il proprietario

il gruppo

La shell di Unix – p.42/96

Page 43: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Permessi di accesso

I permessi possono (sostanzialmente) essere:r = permesso di letturaw = permesso di scritturax = permesso di esecuzione

- = mancanza di permesso

Alcuni esempi

-rw------- 1 rossi users 3287 Apr 8 12:10 file1

-rw-r--r-- 1 rossi users 13297 Apr 8 12:11 file2

-rwxr-xr-x 1 rossi users 4133 Apr 8 12:10 myprog

drwxr-x--- 1 rossi users 1024 Jun 7 10:00 SCCS

Il permesso x su una directory consente di “attraversarla”.

C’è una forma di dipendenza: per accedere ad un file, oltre ai dirittinecessari per l’operazione desiderata, occorre il permesso x su ognidirectory che compare nel pathname.

La shell di Unix – p.43/96

Page 44: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cambiare i permessi con chmod

chmod <triads> <filename>*

dove triads sono della forma who action permission

who action permission

u = user + = aggiunge r = read

g = group - = rimuove w = write

o = other = = assegna x = execute

a = all

= user

La shell di Unix – p.44/96

Page 45: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cambiare i permessi con chmod / A

Alcuni esempi:chmod a+r sample.c

chmod o-r sample.c

chmod og+rx prog*

chmod g=rw rep*

chmod +w *

L’opzione -R cambia (ricorsivamente) i permessi di una directory edi tutti i file e sottodirectory di quella directory.

La shell di Unix – p.45/96

Page 46: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

chmod “numerico”

I permessi di accesso rwx possono essere rappresentati come unnumero ottale. Es. r-x diviene 101 e quindi 58.

Il permesso r è rappresentato da 4, w da 2 e x da 1. Per ciascunacategoria di utenti (proprietario, gruppo, altri) questi valori possonoessere sommati. Quindi, si ha

0 = --- 4 = r--

1 = --x 5 = r-x (4+1)

2 = -w- 6 = rw- (4+2)

3 = -wx (1+2) 7 = rwx (4+2+1)

I permessi di accesso possono allora essere espressi con 3 cifre ottali.

user group others

chmod 640 file1 rw- r-- ---

chmod 754 file1 rwx r-x r--

chmod 664 file1 rw- rw- r--

La shell di Unix – p.46/96

Page 47: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Stabilire i permessi con umask

umask <mask>

Può essere utilizzato per assegnare i permessi di default.

Tipicamente è usato in uno dei file di startup (per esempio, .login,.cshrc, .profile) ma può essere usato anche in modo interattivo.

Specifiche ottali (anche simboliche in bash). Diversamente da chmod,rappresentano i permessi da “mascherare” (cioè, da rimuovere).

Octal number Access permissions given

0 rwx read, write and execute

1 rw- read and write

2 r-x read and execute

3 r-- read only

4 -wx write and execute

5 -w- write only

6 --x execute only

7 --- no permissionsLa shell di Unix – p.47/96

Page 48: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Stabilire i permessi con umask / A

Il sistema assegna di default i permessi 666 per i file e 777 per ledirectory.

Alcuni esempi:

umask 077

Sottrae 077 dai permessi di default del sistema per i file e ledirectory. Il risultato è che i permessi di default diventano 600per i file (rw-------) e 700 (rwx------) per le directory.

umask 002

Sottrae 002 dai permessi di default del sistema per i file e ledirectory. Il risultato è che i permessi di default diventano 664per i file (rw-rw-r--) e 775 (rwxrwxr-x) per le directory.

! umask sottrae i valori passati come parametri sempre ai valori didefault (666 e 777), anche se usato più volte consecutivamente.

La shell di Unix – p.48/96

Page 49: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cambiare proprietario e gruppo

Per cambiare il proprietario (owner) di un file

chown <new owner> <filename>

Nella maggior parte dei sistemi UNIX, per modificare il proprietariodi un file bisogna essere un super-user (es. l’amministratore delsistema).

Il proprietario di un file può cambiare il gruppo (group) del file conun qualsiasi altro gruppo a cui l’utente stesso appartenga.

chgrp <new group> <filename>

Per entrambi i comandi al’opzione -R permette di propagarericorsivamente il cambiamento su tutta una directory.

La shell di Unix – p.49/96

Page 50: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Visualizzare i file

La shell di Unix – p.50/96

Page 51: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Mostrare il contenuto di un file

Il comando cat concatena e visualizza sullo schermo (standardoutput) il contenuto di uno o più file .

cat [<filename1> ...<filenamen>]

Il comando echo visualizza sullo schermo l’argomento che gli vienepassato (a cui aggiunge un carattere newline, a meno che non sispecifichi l’opzione -n).

echo [-n] <string>

I comandi more, less e pg (potrebbero non essere tutti disponibili)mostrano il contenuto di un file una schermata alla volta. Inoltre,permettono di tornare a pagine precedenti, di effettuare ricerche, . . . .

La shell di Unix – p.51/96

Page 52: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Il comando less

Una volta digitato

less <filename>

si può navigare nel file. Ecco alcune opzioni

↑, ↓ scorre su e giù di una riga;

←,→ scorre a dx e sx di una schermata;

/<pattern> cerca <pattern> in avanti;

?<pattern> cerca <pattern> indietro;

<n>g va alla riga <n>;

g, G va ad inizio/fine file;

q esce e torna al prompt;

e molte altre (h dà l’help in linea).

La shell di Unix – p.52/96

Page 53: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Mostrare parte di un file

Il comando head mostra le prime 10 linee di un file. Se si usal’opzione -n, head mostra le prime n linee.

head [-n] file

Il comando tail mostra le ultime 10 linee di un file. Se si usal’opzione -n, tail mostra le ultime n linee.

tail [-n] file

La shell di Unix – p.53/96

Page 54: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare file e comandi

La shell di Unix – p.54/96

Page 55: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare un file

Il comando find permette di cercare un file che soddisfi un dato pattern.

find <pathname> -name <filename> -type <t> -print

dove

pathname indica la directory da cui deve iniziare la ricerca . Laricerca continuerà in ogni sottodirectory.

<filename> è il nome del file da cercare; può essere anche unpattern costruito con metacaratteri.

L’opzione -print viene usata per mostrare i risultati della ricerca.

Vediamo alcuni esempi d’uso del comando (con ulteriori opzioni):

find . -name mtg jan92 -print

find ˜/ -name README -print

find . -name ’*.ps’ -print

find /usr/local -name gnu -type d -exec ls {} \;La shell di Unix – p.55/96

Page 56: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare un file / A

Un problema di find è la sua pesantezza computazionale.

Una soluzione è data dal comando locate, che basandosi su di undatabase, periodicamente aggiornato (con updatedb), risulta molto piùefficiente

locate <modello>

Elenca i file che nelle basi di dati corrispondono a <modello>.

Esempio:/home/rossi$ locate astri

/usr/include/g++-3/std/bastring.cc

/usr/include/g++-3/std/bastring.h

/home/rossi$

La shell di Unix – p.56/96

Page 57: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare i programmi

Per cercare la locazione di un programma (tra i sorgenti, tra i file eseguibilie nelle pagine del manuale in linea):

whereis [-bms] <command>

Alcune opzioni utili sono:

-b solo file binari

-m solo pagine dei manuali

-s solo file sorgenti

Esempio

/home/rossi$ whereis -bms mail

mail:/bin/mail /usr/bin/mail /etc/mail.rc /etc/mail

/home/rossi$La shell di Unix – p.57/96

Page 58: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare un comando

Accade talvolta di essere a conoscenza dell’esistenza di un comando e divoler sapere quale file sarà eseguito quando il comando viene invocato.

which <command>

fornisce

il pathname completo del file eseguibile

l’alias corrispondente a <command>

Un comando (builtin nella bash) simile, ma più completo è type

type [-all -path] <command>

indica come la shell interpreta <command>, specificandone la natura (alias,funzione, file eseguibile, builtin, parola chiave della shell) e la definizione.Con l’opzione -all vengono fornite tutte le definizioni di <command>,mentre l’opzione -path restringe la ricerca ai file eseguibili.

La shell di Unix – p.58/96

Page 59: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Gestire archivi

Il comando tar permette di archiviare insiemi di file (in realtà parti delfilesystem, con informazioni sulla gerarchia delle directory) in un unicofile.

tar [-ctvx] [-f <file>.tar] [<directory/file>]

Alcune opzioni comuni sono

-c crea un archivio-t mostra il contenuto di un archivio-x estrae da un archivio

-f <file>.tar specifica il nome del file di archivio-v fornisce informazioni durante l’esecuzione

Alcuni esempitar -cf logfile.tar mylogs/logs.*

tar -tf logfile.tar

tar -xf logfile.tarLa shell di Unix – p.59/96

Page 60: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Comprimere file

Sono presenti alcuni tool che permettono di ridurre la dimensione di filecon algoritmi di compressione (che sfruttando la ridondanza dei dati dannorisultati migliori su file di testo):

compress [opt] <file>

uncompress [opt] <file>.Z

Ad esempiocompress logs.*

uncompress logfile.tar.Z

Oppure si può usare gzip (Lempel-Ziv coding LZ77) o bzip2

(Burrows-Wheeler block sorting text compression algorithm):

gzip [opt] <file> gunzip [opt] <file>.gz

Ad esempiogunzip logfile.tar.gz

gzip logs.*La shell di Unix – p.60/96

Page 61: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Esercizio

Scrivere un comando che crea una sottodirectory della directory corrente,con nome text-files. Quindi copia in questa directory tutti i file conestensione txt contenuti nella propria home directory. Se la directorytext-files è già presente rimuove da questa i file il cui nome non iniziacon almeno due caratteri alfanumerico o che non hanno estensione txt.

[Sugg.: Usare la concatenazione di comandi, il comando find e i

metacaratteri.]

La shell di Unix – p.61/96

Page 62: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Comandi di stampa

Alcuni comandi per la stampa dei file e la gestione della coda di stampa

UNIX BSD e Linux

lpr [opt] <filename>

lpq [opt] [<job#>] [<username>]

lprm [opt] [<job#>] [<username>]

Un’opzione usata frequentemente è -P <printername>.

UNIX System V

lp [opt] <filename>

lpstat [opt]

cancel [<requestID>] <printer>

La shell di Unix – p.62/96

Page 63: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolazione di testi

La shell di Unix – p.63/96

Page 64: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Linguaggi formali

Dato un alfabeto A = {a1, . . . , an}, l’insieme delle stringhe (finite)sull’alfabeto A è indicato con A∗, ovvero

A∗ = {s0 . . . sk : si ∈ A}.

Un linguaggio L sull’alfabeto A è un insieme di stringhe su A,ovvero L ⊆ A∗.

Operazioni sui linguaggi

Unione: L + L′ = {α : α ∈ L ∨ α ∈ L′}

Concatenazione: L · L′ = {αα′ : α ∈ L ∧ α′ ∈ L′}

Potenza: Ln definito induttivamente

L0 = {ε} Ln+1 = L · Ln

Stella di Kleene: L∗ =⋃

n∈NLn

La shell di Unix – p.64/96

Page 65: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Linguaggi Regolari

Classificazione dei linguaggi (Noam Chomsky)

Linguaggi Grammatiche [α→ β] Automi

tipo 0 generali automi di Turing

tipo 1 monotone / context sensitive automi limitati linearm.

tipo 2 context-free automi a pila

tipo 3 regolari automi a stati finiti

I linguaggi regolari sono molto semplici da trattare (ad es. ilproblema dell’appartenenza al linguaggio ha complessità lineare).

ab

q0q0L = {abn : n ≥ 0}

La shell di Unix – p.65/96

Page 66: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni regolari

Teorema (Kleene) Un linguaggio L sull’alfabeto A è regolarese e solo se

è ottenibile a dai linguaggi ∅ e {a} con a ∈ A, utilizzando gli operatori diunione +, concatenazione · e stella (_)∗.

Espressioni Regolari su di un alfabeto A = {a0, . . . , an} sono

re := ∅ | a0 | . . . |an | re + re | re · re | re∗

A ciascuna espressione regolare re è associato un linguaggio L(re):

L(∅) = ∅ L(ai) = {ai} L(re1 · re2) = L(re1) · L(re2)

L(re1 + re2) = L(re1) + L(re2) L(re∗) = L(re)∗

Per il teorema di Kleene, ogni linguaggio regolare è denotato daun’espressione regolare e viceversa.

La shell di Unix – p.66/96

Page 67: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni Regolari in Unix

Patterns (modelli) che individuano insiemi di stringhe (linguaggi) erappresentano uno strumento piuttosto potente e sofisticato di UNIX.

Ispirate alle espressioni regolari della teoria dei linguaggi formali,ma risultano molto più potenti.

Utilizzate da vari programmi di elaborazione di testi (ad es. grep,sed, awk, vi, emacs) per:

elencare/eliminare righe che contengono un’espressioneregolare

sostituire un’espressione regolare (~ find/replace)

...

La shell di Unix – p.67/96

Page 68: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni Regolari in Unix/A

insiemi di caratteri: pattern elementari che specificano la presenza uncarattere appartenente ad un certo insieme.

ancore: legano il pattern a comparire una posizione specifica dellariga (es. inizio, fine).

gruppi: “racchiudono” l’espressione regolare che può quindi essereriferita come una singola entità.

modificatori: specificano ripetizioni dell’espressione che precede ilmodificatore stesso.

La shell di Unix – p.68/96

Page 69: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni Regolari: Sintassi

[abc] match any of the characters enclosed

[a-d] match any character in the enclosed range

[ˆset] match any character not in the following set

. match any single character except <newline>

[:alpha:] some predefined character sets

[:digit:]

\ treat the next char literally. Normally used to

escape special characters such as "." and "*"

Esempi

[ˆ[:alpha:]] any non alphabetic char (same as [ˆa-zA-Z])

[ˆa-c] any char except ’a’, ’b’, ’c’

[\.a] chars ’z’ and ’.’

La shell di Unix – p.69/96

Page 70: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni Regolari: Sintassi / A

exp1 | exp2 match either exp1 or exp2

exp1 exp2 match exp1 followed by exp2

ˆexp exp must start at the beginning of the line

exp$ exp must end at the end of the line

Esempi:

a|the either the string ’a’ or the string ’the’

cat the string ’cat’

.at any char followed by ’at’, such as ’cat’, ’rat’,

’mat’, ’bat’, ’fat’, ’hat’

ˆcat ’cat’ at the beginning of the line

cat$ ’cat’ at the end of the line

[cC]at ’cat’ or ’Cat’

[0-9]$ any digit ending a line

La shell di Unix – p.70/96

Page 71: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni regolari: Sintassi / A

exp{n} match the regular expression exp exactly n times

exp{n,m} match exp a minimum of n times and a maximum

of m times

exp{m,} match exp a minimum of n times

(0 <= n,m <= 255)

exp* match exp zero or more times

exp+ match exp one or more times

exp? match exp zero or one times

Esempi:

xy*z any occurrence of an ’x’, followed by zero or

more ’y’s, followed by a ’z’

xy{3,5}z an ’x’, followed by 3 to 5 ’y’ and then ’z’

[A-Z][A-Z]* one or more upper case letters (same as [A-Z]+)

[A-Z]* zero or more upper case letters.

La shell di Unix – p.71/96

Page 72: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Espressioni regolari: Sintassi / B

\<exp\> match exp as long as it is a separate word

(exp) saves the matching exp in a buffer, for future reference.

Up to nine patterns can be saved for each line.

\n where n is a digit (1-9). Matches the nth expression

previously saved for this line.

Expressions are numbered starting from the left.

Esempi:

\<cat\> ’cat’ as a separate word (es. ’concatenate’ not ok)

(.*)\1 strings of the kind s s, where s is any string

(not regular nor context-free)

Questa è la sintassi per le espressioni regolari estese accettata da egrep, sed, awk, manon da grep (vedere man per ulteriori informazioni).

La shell di Unix – p.72/96

Page 73: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare espressioni regolari

Unix fornisce i comandi grep ed egrep (acronimo per [extended]generalized regular expression parser) per cercare espressioni regolari(estese) nei file.

egrep [-ivnwx] <regexpr> [<filename1> ... <filenamen>]

Il modo più semplice di usarlo è:

egrep <regexpr> <filename>

Esempio:/home/rossi$ cat ugolino

La bocca sollevo’ dal fiero pasto

quel peccator, forbendola a’capelli

del capo ch’elli avea di retro guasto.

/home/rossi$ egrep pasto ugolino

La bocca sollevo’ dal fiero pasto

La shell di Unix – p.73/96

Page 74: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare espressioni regolari / A

/home/rossi$ egrep ’(p|gu)asto’ ugolino

La bocca sollevo’ dal fiero pasto

del capo ch’elli avea di retro guasto.

/home/rossi$ egrep ’\<d.l\>’ ugolino

La bocca sollevo’ dal fiero pasto

del capo ch’elli avea di retro guasto.

Si osservi che non compare la rigaquel peccator, forbendola a’capelli

/home/rossi$ egrep ’ˆ.a|li$’ ugolino

La bocca sollevo’ dal fiero pasto

quel peccator, forbendola a’capelli

La shell di Unix – p.74/96

Page 75: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Cercare espressioni regolari / B

Alcune opzioni utili di egrep

-i non distingue tra maiscolo e minuscolo

-n mostra anche il numero di linea

-v mostra le linee che non contengono l’espressione

-w cerca parole intere

-x cerca linee intere

Se non si specifica <filename>, egrep esamina lo standard input.

Una versione semplificata di egrep è fgrep

fgrep [-ivn] <text> <filename>

è utilizzato per cercare stringhe in file di tipo testo. Le opzioni -i, -ne -v funzionano come per egrep.

La shell di Unix – p.75/96

Page 76: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Sostituire caratteri

Il comando tr converte un testo, carattere per carattere, secondo unacorrispondenza specificata.

tr ’<sourceCh>’ ’<destCh>’ < <file>

Esempio:/home/rossi$ tr ’aeiuo’ ’eiuoa’ < ugolino

Le bacce salliva’ del fuira pesta

qoil piccetar, farbindale e’cepillu ...

trasforma a→ e, . . . , o→ a.

Se ’<destCh>’ è più corto di ’<sourceCh>’, si usa l’ultimo carattere in’<destCh>’.

Opzioni

-c trasforma i caratteri non in ’<sourceCh>’ (complement)-s elimina caratteri uguali vicini (squeeze)-d cancella i caratteri in ’<sourceCh>’ (delete)

La shell di Unix – p.76/96

Page 77: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Sostituire caratteri / A

Esempi:

trasforma tutti i caratteri maiuscoli in minuscolitr ’A-Z’ ’a-z’ < filename

semplice encryption (a→ b, b→ c . . . , z→ a)tr ’a-zA-Z’ ’b-zA-Za’ < filename

rimuove tutte le cifre dall’inputtr -d ’0-9’ < filename

scompone l’input in parole, sistemandole una per rigatr -cs ’a-zA-Z0-9’ ’\n’ < filename

La shell di Unix – p.77/96

Page 78: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

sed - editor di stream

Il comando sed permette di scandire uno o più file, modificando le lineeche soddisfano una particolare condizione (nello stile dell’editor vi).

sed -e ’<edit commands>’ <filename>

sed -f <edit command file> <filename>

Nel primo caso le azioni da eseguire sono inserite nella linea di comando,nel secondo caso in un file, ed hanno forma <selettore><comando>.

Alcuni comandi di Editing

p stampa la linea corrente

d cancella la linea corrente

s/RegExp/Repl/ sostituisce la prima occorrenza di RegExp con Repl.

s/RegExp/Repl/g sostituisce ogni occorrenza di RegExp con Repl.

La shell di Unix – p.78/96

Page 79: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

sed - editor di stream / A

I comandi di editing possono essere qualificati con un pattern cheseleziona le linee alle quali tali comandi devono essere applicati.

Alcuni selettori di Linean linea numero n

n,m le linee dal numero n ad m

/RegExp/ le linee che corrispondono a RegExp

/RegExp1/,/RegExp2/ tutte le linee tra ogni occorrenza di RegExp1e la successiva occorrenza di RegExp2

Un’opzione interessante è

-n

sopprime ogni linea non esplicitamente selezionata (si ricordi che, altri-

menti, sed copia in output ogni linea, possibilmente modificata).La shell di Unix – p.79/96

Page 80: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

sed - editor di stream / B

Rimuove tutte le linee che contengono la stringa guastosed -e ’/guasto/d’ ugolino

Stampa solo le prime dieci linee di un file (simile a head)sed -n -e ’1,10p’ ugolino

Mostra il file delle password, fornendo solo le linee da root anobody, ovvero gli account di sistema.sed -n -e ’/ˆroot/,/ˆnobody/p’ /etc/passwd

Aggiunge due spazi all’ inizio di ogni riga.sed -e ’s/ˆ/ /’ filename

Elimina l’indentazione in un file, ovvero elimina tutti gli spazi adinizio riga.sed -e ’s/ˆ *//’ filename

La shell di Unix – p.80/96

Page 81: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

sed - Esercizi

Scrivere un comando sed che

visualizzi un file, cancellando le linee da 3 a 5.

visualizzi solo la parte di un file che inizia alla prima linea checontiene “start” e finisce alla prima linea che contiene “stop”.

visualizzi solo le linee non vuote di un file (cioè le linee checontengono almeno un carattere).

visualizzi solo le linee non vuote e non costituite di soli spazi.

dato un file lo visualizzi sostituendo ogni linea contenente la parolabomba con OMISSIS.

dato un file con riferimenti bibliografici del tipo “si veda [Kant12],visualizzi solo i riferimenti, uno per riga.

La shell di Unix – p.81/96

Page 82: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk

awk è un utility per la manipolazione di testi, il cui nome deriva dalleiniziali degli autori (Aho, Weinberger, Kerningham)

La sintassi, nelle forme più semplici, è la seguente:

awk ’<programma>’ <file>

awk -f <progfile> <file>

scorre un file (o più) ed esegue alcune azioni sulle linee chesoddisfano una data condizione, concordemente con quantospecificato nel programma.

La sintassi dei programmi è simile a quella del linguaggio C.

Si tratta di un’utility estremamente flessibile e potente. Qui cilimiteremo a vedere solo alcuni esempi (→ Perl).

La shell di Unix – p.82/96

Page 83: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - campi

Ogni linea di testo letta viene scomposta in campi (i separatori dicampo di default sono <space> e <tab>).

Il primo campo di una linea può essere riferito con $1, il secondocon $2, .... L’intera linea è riferita da $0. Il numero di campi èriferito dalla variabile predefinita NF.

Ad esempio

awk ’{print NF,$0}’ pippo

mostra il file pippo sullo schermo premettendo ad ogni linea ilnumero NF di campi (parole) che la compongono.

La shell di Unix – p.83/96

Page 84: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - script

Un programma awk è costituito da una o più linee della forma

[ <condizione> ] { <azione> }

<condizione> può essere

un’espressione che coinvolge operatori logici e relazionali,oppure espressioni regolari.

uno dei token speciali BEGIN e END, che risultano attivatiall’inizio del file (prima della prima linea) ed alla fine del file(dopo l’ultima linea)

<azione> è un insieme di istruzioni C-like.

La shell di Unix – p.84/96

Page 85: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - script / A

L’elenco di istruzioni C-like può contenere, ad esempio:

if (conditional) statement [ else statement]

while (conditional) statement

for (expr; conditional; expr) statement

for (var in array) statement

break

continue

variable = expression

print list-of-expressions

printf format list-of-expressions

statement; statement

{ statement }La shell di Unix – p.85/96

Page 86: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - script / B

Il programma awk viene eseguito secondo i passi seguenti:

il testo viene analizzato linea per linea e per ogni regola del tipo[ <condizione> ] { <azione> }

si valuta <condizione> e se questa è vera viene eseguita<azione>

se <condizione> è assente allora <azione> viene eseguita inogni caso.

se <azione> è assente allora la riga corrente è stampataimmutata.

La shell di Unix – p.86/96

Page 87: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - script / C

Si supponga che il file wordcount.awk contenga

BEGIN { print ‘‘Inizio ad elaborare il file ...’’ }

{ for (i = 1; i <= NF; i++)

num[$i]++

}

END { for (word in num)

print word, num[word];

print ‘‘Fine del file:’’, FILENAME

}

allora il comando

awk -f wordcount.awk file

restituisce la lista delle parole che compaiono nel file file e la lorofrequenza (word in num permette di scorrere gli indici di un array).

La shell di Unix – p.87/96

Page 88: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - variabili

awk supporta variabili definite dall’utente;

le variabili non devono essere dichiarate (tipico dei linguaggi discripting);

inizialmente ogni variabile ha valore null o 0

File: lfcount.awk

BEGIN { print ‘‘Inizio ad elaborare il file ...’’ }

NF == 5 {

printf ‘‘Linea %d: %s \n’’, NR, $0;

lineCount++;

wordCount += NF;

}

END { printf ‘‘Linee: %d, Campi: %d’’, lineCount, wordCount) }

Seleziona le linee che contengono 5 campi, le visualizza con il numero diriga, ne conta il numero ed il numero dei campi e lo visualizza.

La shell di Unix – p.88/96

Page 89: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - regexp

La condizione può essere

un’espressione regolare (estesa):

/RegExp/

valida per ogni riga che corrisponda all’espressione;

una coppia di espressioni regolari

/RegExp1/, /RegExp2/

in questo caso l’azione <action> si applica ad ogni linea tra la primache corrisponde a /RegExp1/ e la linea successiva a questa checorrisponde a /RegExp2/.

Esempio:

awk ’/start/, /stop/ { printf ‘‘line %d: %s’’, NR, $0}’

filename

La shell di Unix – p.89/96

Page 90: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

awk - pattern matching

Potenti funzioni di pattern matching su espressioni regolari:

Condizioni: str ˜exp oppure str !˜exp

Esempi:

‘‘abbc’’ /a[b]+c/: ok

‘‘ac’’ /a[b]+c/: no

Operatori su stringhe:

gensub(exp, str, h [, target]):Sostituisce la prima/tutte le occorrenze di exp in target constr (a seconda del valore di t). Quando target è assente usa$0. La stringa str può contenere \n.

split(str, array [, exp]):Suddivide la stringa str e mette i frammenti in un array. Usacome separatore exp (default FS)

La shell di Unix – p.90/96

Page 91: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Manipolare testi con awk - esercizi

Data un agenda con righe:

<cognome, nome, indirizzo, città, numero>

scrivere un programma awk per stampare le righe con nome uguale aGiovanni e città uguale a Milano.

Scrivere un programma awk che stampi le righe di un file dall’ultimaalla prima.

scrivere un programma awk per sostituire in un testo la parolasempre con la parola mai e contare le sostituzioni effettuate.

Scrivere un programma awk che spezzi una riga subito dopo il 20mocarattere, appenda uno come avvertimento e scriva a capo il restodella riga, giustificato a destra (la funzione substr(str,i,j)

fornisce la sottostringa di str dall’indice i all’indice j).La shell di Unix – p.91/96

Page 92: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Eliminare doppioni

L’utility uniq permette di modificare un file, sostituendo righe identicheadiacenti con un’unica occorrenza della riga ripetuta.

uniq [-c] <infile> <outfile>

Con l’opzione -c ogni riga è preceduta dal numero di occorrenze.

/home/rossi$ cat uniqfile

questa e’ una riga doppia

questa e’ una riga doppia

questa e’ una riga singola

questa e’ una riga tripla

questa e’ una riga tripla

questa e’ una riga tripla

/home/rossi$ uniq -c uniqfile

2 questa e’ una riga doppia

1 questa e’ una riga singola

3 questa e’ una riga tripla

La shell di Unix – p.92/96

Page 93: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Confrontare due file

Due utility permettono di confrontare file:

cmp <file1> <file2>

Verifica l’uguaglianza di <file1> e <file2> e

nel caso siano diversi fornisce la riga e l’offset (numero di bytedall’inizio del file) del primo mismatch

se uno è un prefisso dell’altro si ottiene un messaggio di EOFsul file più corto.

diff <file1> <file2>

Simile a cmp, ma fornisce una lista di differenze tra i due files(cambiamenti necessari per convertire il primo file nel secondo).

La shell di Unix – p.93/96

Page 94: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Un sommario dei comandi vistiawk - search for and process patterns in a file,

cat - display, or join, files

cd - change working directory

chgrp - change the group associated to a file

chmod - change the access mode of a file

cmp - compare files

chown - change the owner of a file

compress - compress files

cp - copy files

date - view/set the date of the system

diff - show differences between files

file - display file classification

find - find files

grep - search for a pattern in files (egrep, fgrep)

gzip - compress files

head - display the first few lines of a file

lp - print files (System V)

lpr - print files (Berkeley)La shell di Unix – p.94/96

Page 95: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Un sommario dei comandi visti / Alprm - remove a job from the print queue

ls - list information about files

mkdir - create a directory

more - display a file one screen at a time (System V)

mv - move and/or rename a file

pwd - print the working directory

rm - remove (delete) files

rmdir - remove (delete) a directory

sed - stream editor

sort - sort and/or merge files

tail - display the last few lines of a file

tar - store or retrieve files from an archive file

tr - transliterate charaters

umask - set file creation permissions

uniq - remove duplicates

wc - counts lines, words and characters in a file

whereis - show where executable is located in path

which - locate an executable program using "PATH"La shell di Unix – p.95/96

Page 96: La shell di Unix - dsi.unive.itlso/Slides/bash-01-tools.pdf · Concetti di base, interazione con la shell, comandi di base, personalizzazione. Struttura e funzionalità della shell

Altri comandi

df - display the amount of available disk space

du - display information on disk usage

fsck - check and repair a file system

groups - show user groups

ln - create a link to a file

spell - check a file for spelling errors

split - split files

cut - cut columns from a file

paste - join coulumns in a single file

whatis - list man page entries for a command

La shell di Unix – p.96/96