Link, redirezione, pipeline
Transcript
Link, redirezione, pipeline
Fondamenti Fondamenti di di Sistemi Sistemi Operativi Operativi DEI DEI--Politecnico Politecnicodi diBari Bari Linux - La Shell Bash • • • • • • I link • Hard link e soft link • Il comando ln Redirezione dell’I/O Concatenamento di comandi: la pipeline Visualizzazione ed diting di file Filtri e ricerche Esercizi G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 1 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Link 1/2 Gli elementi all’interno di un file system GNU/Linux non sono in realtà memorizzati con il loro nome, ma tramite dei numeri: gli index nodes o inode • Un cilindro è organizzato in i-node e data-blocks. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 2 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari Link 2/2 • Ad ogni file è associato un singolo ed unico i-node • Un i-node è un contenitore di metadati che memorizza la maggior parte delle informazioni restituite da stat (numero di link, dimensione, proprietario, allocazione sul disco, etc.) e i puntatori ai data block, in cui viene memorizzato il contenuto di un file. • All’aumento delle dimensioni del file può corrispondere un aumento dei data block allocati per il file. • Il data block di una directory viene detto directory block e contiene, per ogni file contenuto nella directory, una directory entry (#i-node, filename) contenente il nome del file e il numero di i-node ad esso associato. • Un riferimento ad un file è detto link. • Ogni file può avere un numero qualsiasi di link. • UNIX ha due tipi di link: hard link e soft link. Entrambi possono essere creati con il comando ln. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 3 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari Hard link 1/2 • Un hard link è un puntatore all'i-node di un file esistente. • Non viene creato un nuovo file ma solo un directory-entry (inode#, nome_file) nella directory contenente il nuovo collegamento. • Un hard link eredita tutte le informazioni associate all'i-node del file originale e non c'è più modo di distinguere tra l'hard link e il file originale. • Le directory hanno un numero di link almeno pari a 2: un puntatore è memorizzato nella voce corrispondente contenuta dalla directory ‘padre’; un puntatore è contenuto nella stessa directory verso ‘.’ • La maggior parte di implementazioni UNIX moderne non consente di creare ulteriori hard link a directory. Questo limite viene imposto per evitare ricorsioni infinite nel tentativo di attraversare un albero che parte da un hard link che punta alla propria directory padre. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 4 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Hard link 2/2 Non è possibile effettuare un hard link con un file memorizzato su una partizione diversa da quella della directory in cui lo si vuole creare. • Ogni volta che si crea un hard link ad un file, il link count per il file si incrementa di 1. • Quando il comando rm riceve come argomento un hard link, il sistema decrementa il link count (nell’i-node del file) di 1. • Se il link count non è 0, il sistema rimuove solo la directory entry del file cancellato. Il contenuto del file e altre directory entry per quel file (hard link) rimangono inalterati. • Se il link count è 0, il sistema rimuove la directory entry per quel file, libera l’-inode del file e dealloca i data block che contenevano il file. • La cancellazione di un file non implica automaticamente che l’inode corrispondente venga liberato: ciò avverrà unicamente se non sono presenti altri hardlink che puntanto a tale inode. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 5 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Soft link o symbolic link Un soft link (o symbolic link) corrisponde ad un file che contiene, all’interno dell’unico data block ad esso associato, il percorso assoluto di un altro file. I soft link superano i limiti degli hard link in quanto consentono di: - creare collegamenti tra entità su filesystem diversi; - creare link a directory. • Un soft link può essere utilizzato per: - creare puntatori a file o directory lasciando sempre ben chiara la distinzione tra il file originale e il link. • Ogni volta che il sistema incontra un soft link sostituisce il suo contenuto con il percorso che lo individua • Quando il comando rm riceve come argomento un soft link, cancella quest'ultimo e non il file a cui esso si riferisce. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 6 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • ln ln: realizza i collegamenti tra file. Di default realizza un hard link. SINTASSI HARD LINK • ln [opzioni] fileSorgente1 [fileSorgente2 … fileSorgenteN] fileDestinazione • fileSorgenteX non può essere una diretory, X:1 … N • fileDestinazione può essere una directory. FLAG • -n non crea il link se fileDestinazione esiste già SINTASSI SOFT LINK • ln [opzioni] directorySorgente fileDestinazione FLAG • -s crea un collegamento simbolico a fileSorgente o a directorySorgente con il nome fileDestinazione. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 7 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • • ln /home/user/file1.txt hardlinkFile1 ls –li 2622543 -rw-rw-r-- 2 annarita annarita 0 mag 4 18:04 file1.txt 2622543 -rw-rw-r-- 2 annarita annarita 0 mag 4 18:04 hardlinkFile1 – – – – – • • Esempio comando ln Il numero di i-node coincide Il numero di link al file è 2, in quanto entrambi i file puntano allo stesso inode La data e l’ora di creazione dell’hard link coincide con la data di creazione del file sorgente Non occupa spazio su disco Il file hardlinkFile1 è un file lo si evince dal – nell’ACL ln –s /home/user/file1.txt softlinkFile1 ls –li 2622543 -rw-rw-r-- 2 annarita annarita 0 mag 4 18:04 file1.txt 417295 lrwxrwxrwx 1 annarita annarita 9 mag 5 15:47 softlinkFile1 -> file1.txt – – – – – Il numero dell’inode è differente La data e l’ora di creazione differisce da quella del file sorgente Occupa spazio su disco Il file softlinkFile è un link lo si evince dalla lettera l nelll’ACL La freccia indica il nome del file sorgente a cui il link punta G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 8 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari Canali di comunicazione e redirezione I programmi dispongono di 3 canali di comunicazione standard: 0 standard input (tastiera) 1 standard output (terminale) 2 standard error (terminale) SINTASSI comando operatore file • < Redirige lo standard input del comando su un file anzichè da tastiera, equivalente a 0< • > Redirige solo lo standard output su un file sovrascrivendone il contenuto, equivalente a 1>,modalità truncate • >> Redirige lo standard output su un file aggiungendo il contenuto in coda al file di ridirezione, append mode • • 2> Redirige lo standard error in modalità truncate • 2>> Redirige lo standard error su un file in modalità append • n> Redirige il descrittore n-esimo (n>> append mode) • n>&m Concatena i due canali di comunicazione associati ai descrittori di file n ed m • &> Redirige sia lo stdout che lo stderr nel file specificato G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 9 Fondamenti di Sistemi Operativi Esempio DEI - Politecnico di Bari • ls -l > stdout.txt • Contenuto del file stdout.txt total 16 -rw-r--r--rw-r--rw-rw-r--r--rw-rw-r--rw-r--r-- • 1 1 1 1 1 user user user user user user user user user user 13 28 215 125 0 2010-05-31 2010-05-31 2010-05-31 2010-05-31 2010-06-01 06:36 05:56 11:55 11:48 06:22 esempio_sort_num.txt esempio_sort.txt esempio_uniq.txt file_esempio.txt stdout.txt N.B. nella stessa linea di comando possono essere fatti più reindirizzamenti: comando < fileInput > fileOutput 2> fileError G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 10 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari Concatenamento comandi: la pipeline (1/2) Il simbolo di pipe (|) serve a redirigere lo standard output del comando a sinistra della pipe nello standard input del comando a destra della pipe. • La shell attende che tutti i comandi della pipeline siano terminati prima di restituire un valore. SINTASSI [!] comando1 [| comando2] • Se all'inizio nella pipeline c'è un punto esclamativo (!) il valore restituito corrisponde alla negazione logica del risultato normale. • G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 11 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Concatenamento comandi: la pipeline (2/2) Sulla stessa linea è possibile eseguire una lista di comandi separandoli con caratteri speciali SINTASSI comando1 ; comando2 • I comandi separati da punto e virgola (;) sono eseguiti sequenzialmente (prima comando1 e poi comando2) SINTASSI comando1 && comando2 • L'operatore di controllo && si comporta come l'operatore booleano AND. Il comando1 viene eseguito sempre, il comando2 soltanto se il primo ha terminato con successo. SINTASSI comando1 || comando2 • L'operatore di controllo || si comporta come l'operatore booleano OR. Il comando1 viene eseguito sempre, il comando2 solo se il primo non ha terminato con successo oppure non si è potuto eseguire. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 12 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • echo echo: stampa una stringa sullo standard output. SINTASSI echo [stringa] ESEMPI • echo hello world! • echo ~ • echo “testo” >> file_prova G. Piscitelli - M. Ruta - A. Cinquepalmi Mostra il percorso della home-directory dell'utente loggato Inserisce la stringa "testo" in coda al file_prova A.A. 2013-2014 13 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • cat cat: (concatenate) legge ogni file argomento in sequenza e mostra sullo standard output il contenuto, ovvero concatena file. L'operazione non genera alcun file e si utilizza per controllare il contenuto di file testuali. SINTASSI cat [opzioni] file FLAG • -n Numera le righe sullo stdout ESEMPI • cat file1 • cat file1 file2 > file3 G. Piscitelli - M. Ruta - A. Cinquepalmi Mostra sullo standard output il contenuto di file1. Genera file3 che è il risultato del concatenamento in sequenza di file1 e file2 A.A. 2013-2014 14 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • file file : visualizza il tipo di uno o più file. SINTASSI file file_esempio ESEMPI • file esempio_uniq.txt esempio_uniq.txt: UTF-8 Unicode text G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 15 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • less (more) less (more): visualizza un file in modo interattivo. Apre il paginatore e formatta il testo in pagine per facilitarne la lettura. SINTASSI less nomefile • • more è un paginatore alla stregua di less, ma consente solo lo scorrimento delle pagine in avanti. N.B. I paginatori si possono scorrere con i tasti invio, spazio e frecce. Per uscire dal paginatore si usa Q. Per chiedere l'help del paginatore si usa H. ESEMPI • ls -l | less Mostra mediate il paginatore less l'output del comando precedente G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 16 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari Esercizi 1. Visualizzate il contenuto del file /etc/passwd. 2. Visualizzate l'inizio e la fine del file /etc/passwd attraverso un paginatore. 3. Determinare la tipologia dei file /etc/passwd e /bin/ls. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 17 Fondamenti di Sistemi Operativi sort DEI - Politecnico di Bari • sort: ordina il file ottenuto concatenando i file indicati e scrive il risultato sullo standard output. Se non è indicato alcun file, ordina lo standard input. SINTASSI sort [opzioni] [file1 … fileN] ESEMPI • cat esempio_sort.txt RIGA RIGA RIGA RIGA • A D C B sort esempio_sort.txt RIGA RIGA RIGA RIGA A B C D G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 18 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari sort (flag) • -c Controlla se i file indicati siano già ordinati. Se non lo sono viene emessa una segnalazione di errore e il programma mostra la prima riga che non rispetta l'ordine • sort -c esempio_sort.txt • sort: esempio_sort.txt:3: disorder: RIGA C RIGA A OK RIGA D OK RIGA C ERR RIGA B G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 19 Fondamenti di Sistemi Operativi sort (flag) DEI - Politecnico di Bari • -n Esegue un ordinamento numerico considerando anche il segno meno e il punto decimale • cat esempio_sort_num.txt 1.1 100 5 11 • sort esempio_sort_num.txt 100 11 1.1 5 • sort –n esempio_sort_num.txt 1.1 5 11 100 G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 20 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari sort (flag) • -m Fonde insieme i file indicati che devono essere già ordinati • -b Ignora gli spazi (e tabulazioni) vuoti iniziali • -d Ignora tutti i caratteri che non siano lettere, numeri o spazi • -f Non distingue tra lettere maiuscole e minuscole • -i Ignora • -r • -o file i caratteri speciali al di fuori del set ASCII puro Inverte l'ordine della comparazione Invece di utilizzare lo standard output, utilizza il file indicato per inserire il risultato dell'operazione. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 21 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • wc 1/2 wc (word count) conta e mostra righe, parole, caratteri e byte per ogni file. Di default conta righe, parole e byte. SINTASSI wc [opzioni] [file] FLAG • • • • -l numero di linee -w numero di parole -m numero di caratteri -c numero di byte Formato risposta: [righe] [parole] [caratteri] [byte] nome_file G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 22 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • • cat elencotel • roberto 48000529 • marco 3452328 • mario 5567843 • luigi 674211467 wc elencotel • • wc 2/2 4 8 60 elencotel wc -wlmc elencotel • 4 8 60 60 elencotel G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 23 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • head head: copia le prime X linee o byte di un file sullo standard output (default X=10). Se nessun file è specificato, copia linee dallo standard input. SINTASSI head [opzioni] [filename] FLAG • • • • -c #X Mostra i primi #X byte di un file -c -#X Mostra i byte di un file esclusi gli ultimi #X byte -n #X Mostra le prime #X righe di un file (equivale a -#X) -n -#X Mostra le righe di un file escluse le ultime #X ESEMPI • cat elencotel • head -1 elencotel (equivale a $ head -n 1 elencotel) • head -n -1 elencotel G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 24 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • tail tail copia il file sullo standard output, iniziando da un posto specificato (linee, blocchi o caratteri dall'inizio o dalla fine del file). Se non è specificato nessun file, copia lo standard input. Mostra le ultime righe o byte di un file, di default le prime 10 righe. SINTASSI tail [opzioni] [file] FLAG • • • • -c #X Mostra gli ultimi #X byte di un file -c +#X Mostra gli ultimi byte di un file a partire dal byte #X -n #X Mostra le ultime #X righe di un file (equivale a -#X) -n +#X Mostra le ultime righe di un file a partire dalla riga #X ESEMPI • cat elencotel • tail -c +3 elencotel • tail -n 3 elencotel G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 25 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • uniq uniq: mostra od omette le linee ripetute. Se non è specificato nessun flag visualizza tutte le righe senza ripeterle. SINTASSI uniq [opzioni] [file_esempio] ESEMPI • cat esempio_uniq.txt • Questa riga è presente una sola volta. • Questa riga è presente due volte. • Questa riga è presente due volte. • Questa riga è presente tre volte. • Questa riga è presente tre volte. • Questa riga è presente tre volte. • uniq esempio_uniq.txt • Questa riga è presente una sola volta. • Questa riga è presente due volte. • Questa riga è presente tre volte. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 26 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • -d • uniq (flag) Mostra solo le linee duplicate uniq -d esempio_uniq.txt • Questa riga è presente due volte. • Questa riga è presente tre volte. • -u • Mostra solo le linee uniche non duplicate uniq -u esempio_uniq.txt • Questa riga è presente una sola volta. • -c • Per ogni riga indica il numero di occorrenze uniq -c esempio_uniq.txt • 1 Questa riga è presente una sola volta. • 2 Questa riga è presente due volte. • 3 Questa riga è presente tre volte. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 27 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari uniq (flag) • -f N Salta il confronto delle prime N parole • -i Nel confronto ignora la differenza tra lettere maiuscole e minuscole • -s N Salta il confronto dei primi N caratteri • -w N Confronta non più di N caratteri per riga G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 28 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • cut 1/2 cut Permette di estrarre sezioni di una riga di testo, delimitate da un carattere separatore. SINTASSI: cut [opzioni] [file] FLAG • • • • -b range Estrae solo i byte indicati nel range (N, N-M, -N, N-) -c range Estrae solo i caratteri indicati nel range (N, N-M, -N, N-) -d separatore Indica il carattere/stringa separatore da utilizzare (anzichè TAB) -f intervallo Indica la lista dei campi da estrarre (N, N-M, -N, N-) ESEMPI • cat • • • cut_file nome cognome matricola pippo pluto 123456 ciccio pallino 098765 G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 29 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • cut -f 2 cut_file • cat • • • cut 2/2 cut_file_delim nome;cognome;matricola;email;CDL pippo;pluto;123456;[email protected];AUT ciccio;pallino;098765;[email protected];INF • cut -d \; -f 2-3,5 cut_file_delim Considera ogni riga composta da più stringhe separate dal (;) e ne visualizza solo la seconda, la terza e la quinta. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 30 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari diff - colordiff diff Trova differenze tra due file. Questo comando risulta molto utile per confrontare i file di configurazione. Se si sostituisce a uno dei file da confrontare il trattino (-), questo indica che il confronto verrà eseguito con lo standard input. SINTASSI diff [opzioni] file1 file2 FLAG • -b Ignora le differenze nella quantità di spazi bianchi • -B Ignora le differenze che consistono solo in righe vuote • -r Confrontando due directory, confronta ogni sottodirectory ricorsivamente • --brief Riferisce solo se i file sono diversi, senza mostrarne le differenze • --ignore-case Considera allo stesso modo maiuscole e minuscole, ignorando ogni relativa differenza ESEMPI • diff --brief /etc/passwd /etc/shadow • • colordiff il comando ha le stesse opzioni ed effetti di diff ma mostra un output colorato che permette una maggiore leggibilità. G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 31 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Esercizi Scrivere una combinazione di comandi Unix che consenta di visualizzare: 1. la terza e la quarta riga del file elenco 2. le penultime 3 righe del file elenco 3. l’ n-esima riga del file elenco head - 4 elenco | tail -2 tail - 4 elenco | head -3 head -n elenco | tail -1 • Conta il numero di linee contenute nel file /etc/passwd wc - l /etc/passwd • Visualizza le righe del file /etc/passwd in ordine alfabetico sort /etc/passwd G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 32 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Esercizi Con un opportuno comando Unix visualizzare: 1. il contenuto del file /etc/passwd 2. Estrarre il primo campo dal file /etc/passwd ordinato alfabeticamente • cat /etc/passwd • cut –d\: -f1 /etc/passwd | sort • Realizzare una combinazione di comandi unix per visualizzare l’ultimo file in ordine alfabetico presente nella directory di lavoro • ls | sort | tail -1 G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 33 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Esercizi Con opportuni comandi Unix modificare il file di testo votoStudenti.txt formato da m righe rimuovendo la prima riga Gianni 20 Carlo 10 Bruno 15 Alice 30 • • • wc -l votoStudenti.txt (4 righe è il valore restituito) tail -3 votoStudenti.txt > tmp mv tmp votoStudenti.txt (rinomina il file tmp nel file votoStudenti.txt) G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 34 Fondamenti di Sistemi Operativi DEI - Politecnico di Bari • Esercizi Realizzare una combinazione di comandi unix che, dato un file di testo esistente elenco, crea un nuovo file nominativo, contenente la riga di elenco che viene lessicograficamente per seconda. Il contenuto di un file elenco è il seguente: • valeria • aldo • roberta • bruno • sandro • paola sort elenco | head –2 | tail –1 > nominativo G. Piscitelli - M. Ruta - A. Cinquepalmi A.A. 2013-2014 35