Prova intercorso - ICAR

Transcript

Prova intercorso - ICAR
Prova intercorso labos 2010/2011 Gruppo 2
Nome:
Valutazione
Cognome:
Parte a:
/10
Matricola:
Parte b:
/10
Email:
Parte c:
/10
Parte a (10 punti)
Supponendo che nella directory corrente si posseggano i permessi di lettura scrittura ed esecuzione e che non esistano
directory denominate uno e due ignorando lo standard error si scriva lo standard output dei seguenti comandi (0.5 punti
ciascuno):
a1) mkdir uno && chmod a-r uno && mkdir uno/uno && \
touch uno/uno/uno && cat uno/uno/uno && echo uno
a2) mkdir due && chmod a-x due && mkdir due/due || \
echo due.1 && touch due/due/due && echo due.2
Supponendo che nella directory corrente ci siano i seguenti file:
INSTALL Makefile Makefile.am Makefile.in README aux.c core input.c main.c main.o
functions.h
si scriva l'output dei seguenti comandi (0.5 punti ciascuno)
a3) ls|grep '.c'
a6) ls|grep '^[[:upper:]]'|wc -l
a4) ls|grep '[ux]'
a7) ls|sed 's/put/get/'|grep get
a5) ls|grep '[[:upper:]]*'|wc -l
a8) ls|sed 's/a\(.*\)n/a\1\1n/'
Si scriva un comando per ognuno dei seguenti obiettivi (0.5 punti ciascuno):
a9) rimuovere tutti i file che hanno estensione di 3 caratteri di cui l'ultimo carattere è una cifra (es. song.mp3,
archivio.tar.bz2, …)
a10) rimuovere tutti i file il cui nome non inizia con un cifra
a11) contare le righe di un file che iniziano per una vocale
a12) visualizzare le righe di un file che iniziano con due o più cifre consecutive o con una vocale ed una cifra utilizzando
grep ed una singola espressione regolare
(1.5 punti ciascuno)
a13) scrivere nel file mytmpfiles nella home directory dell'utente l'elenco di file regolari di proprietà dell'utente contenuti
nella directory /tmp, il comando deve funzionare a prescindere dal nome utente e dalla directory corrente, supponendo che
l'output di ls -l abbia il seguente formato:
total 48
-rw-rw---- 1 granger
gryffindor
3540 Jul 16 2009 avis
-rw-rw---- 1 potter
gryffindor
3680 Sep 23 2009 confringo
-rw-rw---- 1 malfoy
slytherins
5194 Feb 16 13:46 densaugeo
-rw-rw---- 1 rweasley
gryffindor
906 May 5 2009 descendo
-rw------- 1 crabbe
slytherins
21302 May 5 2009 fiendfyre_curse
drwx------ 4 dumbledore
gryffindor
4096 Sep 23 2009 secret_spells
a14) stampare le matricole degli studenti file matricole nei formati:
N86113 N86000100 N86\113 N8633 N86000034 N86\132 566127 566000033 566/44 566\255
nel formato modificato:
N86/113 … 566/255
(1 punto)
a15) Si scriva un comando che conti le occorrenze del basename di un file (la parte prima del punto o il nome del file se non
c'è il punto). Esempio se nella directory ci sono i seguenti file:
hello main.c main.i main.o main.s Makefile Makefile.am Makefile.in
il comando produrrà un output del tipo
1 hello
4 main
3 Makefile
Parte b (10 punti)
(6 punti)
Si realizzi uno script che accetta come argomento sulla linea di comando due parametri: una parola chiave ed il nome di un
file. A seconda della parola chiave passata lo script visualizza l'elenco di file memorizzati nella directory corrente con le
caratteristiche specificate:
Parola chiave
Caratteristiche
newer
file con data di ultima modifica successiva a quella del file passato come argomento
older
file con data di ultima modifica antecedente a quella del file passato come argomento
larger
file con dimensione maggiore di quella del file specificato come argomento
smaller
file con dimensione maggiore di quella del file specificato come argomento
Lo script dovrà verificare gli argomenti passati a linea di comando (numero di argomenti, esistenza del file, validità parola
chiave). Si supponga che nella directory corrente ci sono solo file regolari.
(4punti)
Si realizzi uno script che stampi a video la somma degli interi passati come argomento sulla linea di comando fino ad
arrivare ad una massima di 100 ed in caso venga superato questo limite stampi la frase.
La somma e' maggiore di 100
Parte c (10 punti)
Si supponga di avere un file che registra gli accessi ad un server ftp con il seguente formato
IP Ora:Min Giorno-Mese-Anno utente file byte
come nel seguente esempio:
#April 2011
79.22.211.129 10:30 21-04-2011 636151808 debian-6.0.1a-amd64-CD-9.iso
95.246.144.13 11:15 22-04-2011 677017600 debian-6.0.1a-amd64-CD-1.iso
192.168.1.10 10:30 25-04-2011 677017600 debian-6.0.1a-amd64-CD-1.iso
192.168.1.11 20:13 26-04-2011 677017600 debian-6.0.1a-amd64-CD-1.iso
95.246.144.13 22:47 26-04-2011 677017600 debian-6.0.1a-amd64-CD-1.iso
95.246.144.13 23:32 26-04-2011 671174656 debian-6.0.1a-amd64-CD-2.iso
#May 2011
95.246.144.13 00:15 02-05-2011 679342080 debian-6.0.1a-amd64-CD-3.iso
Si realizzi un programma awk che, ignorando i delimitatori mensili (linee che iniziano con #), processi il file di log
riportando:
• il numero di gigabyte scaricati in totale (escludendo gli host con indirizzo 192.168.1.X)
• i gigabyte scaricati da indirizzi IP diversi da 192.168.1.X
• il file più scaricato in assoluto (vanno conteggiati anche i download effettuati da indirizzi 192.168.1.X)
Suggerimento 1Gigabyte = 230 Byte
Nel caso in esempio l'output dello script è:
Traffico totale 3.11127 GB
Traffico verso IP esterni:
95.246.144.13 2.51881 GB
79.22.211.129 0.592463 GB
File più scaricato debian-6.0.1a-amd64-CD-1.iso (4 volte)