Lezione 15 File System Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2014/2015 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi 1
Quote of the day (Meditate, gente, meditate...) In UNIX, everything is a file; if something is not a file, it is a process. Ken Thompson (1943-) Programmatore Il padre dei SO UNIX e Plan 9 Ideatore dei linguaggi B e Go 2
Esercizi (1 min.) 1. Quanti dispositivi a blocchi di tipo disco (con quante partizioni) sono attaccati e riconosciuti sulla vostra macchina? 3
Soluzioni 1. Si elenchino i dispositivi a blocchi di tipo disco con il comando: ls l- /dev/sd* Ogni output del tipo /dev/sda, /dev/sdb, identifica una intera unità disco. Ogni output del tipo /dev/sda1, /dev/sdb1, identifica una singola partizione di una unità. 4
Esercizi (5 min.) 2. Si estraggano le stringhe contenute in un disco rigido a scelta. 5
Soluzioni 2. Per estrarre tutte le stringhe si dia il seguente comando: strings -a /dev/sdb Si sostituisca /dev/sdb con il file speciale del dispositivo scelto. 6
Esercizi (10 min.) 3. Si esegua l'applicazione chromium. Si risponda alle seguenti domande: quanti file apre? quante librerie dinamiche usa? 7
Soluzioni 3. Si individua chromium: PID=$(pgrep -o chromium) Si conta il numero di file aperti da chromium: ls /proc/$pid/fd wc -l Si contano le librerie dinamiche caricate in memoria (file.*so): grep -E '\.so' /proc/$pid/maps awk '{print $6}' uniq wc -l 8
Esercizi (2 min.) 4. Si tracci l'esecuzione del comando appena dato. Si salvi la traccia nel file seguente: mkfs-img.trace. 9
Soluzioni 4. È sufficiente scrivere il comando seguente: strace -o mkfs-img.trace mkfs-img.ext3 ext3.img Si risponda di sì alla richiesta di sovrascrittura del file system. 10
Esercizi (2 min.) 5. Quali segnali gestisce fsck.ext3? 11
Soluzioni 5. Si legga la pagina di manuale di fsck.ext3: man fsck.ext3 fsck.ext3 gestisce SIGUSR1: stampa un indicatore di progresso. SIGUSR2: smette di stampare un indicatore di progresso. 12
Esercizi (3 min.) 6. Usando mount è possibile visualizzare tutti i file system montati? Se sì, come? 13
Soluzioni 6. Basta lanciare il comando mount senza argomenti: mount Vengono mostrati tutti i file system: quelli memorizzati su supporto secondario (fisico o file) il primo campo del record è un file. quelli generati dal kernel (virtuali) il primo campo del record è un nome. 14
Esercizi (3 min.) 7. Si ordini l'output di lsblk per dimensione del file system. 15
Soluzioni 7. Si visualizzano i campi di ordinamento di lsblk: lsblk -x Si individua il campo SIZE. Si ordina l'output di lsblk su tale campo: lsblk -x SIZE 16
Esercizi (10 min.) 8. Si trovino tutti i file di testo nel file system. Si usino i seguenti comandi: find, file. 17
Soluzioni 8. Leggendo la pagina di manuale di find, si scopre che: non passando alcun altro argomento, sono stampati tutti i file. usando l'opzione -exec, è possibile eseguire un comando arbitrario su ogni file individuato. In particolare, -exec richiede un template di comando: in cui '{}' rappresenta il file trovato da find. che deve essere terminato con la sequenza \;. 18
Soluzioni 8. Combinando i singoli pezzi, si costruisce il comando: find / -exec file '{}' \; Pter filtrare i file di testo, basta selezionare l'output di file corrispondente alla stringa ASCII text : find / -exec file '{}' \; grep ASCII text 19
Esercizi (5 min.) 9. Si modifichi la pipeline precedente in modo tale da monitorare la percentuale di tempo in cui la CPU è inattiva (CPU idle). 20
Soluzioni 9. La versione di mpstat fornita da Debian GNU/Linux (stable) presenta il campo %idle all'undicesima colonna. mpstat 1 stdbuf -ol tr -s cut -f 11 -d 21
Esercizi (5 min.) 10. Si modifichi il programma lseek_txt.c in modo tale da spostare la posizione al penultimo carattere del file. 22
Soluzioni 10. Si studi il sorgente del programma lseek_txt.c, contenuto nell'archivio 15-soluzioni.tar.bz2. Si noti come SEEK_END porti la posizione ad un byte dopo la fine del file. Tornando indietro di un byte, ci si posiziona sull'eof! Tornando indietro di due byte, ci si posiziona sull'ultimo byte del file. 23