.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- Esercizio esame lab (http://www.dsy.it/forum/showthread.php?threadid=44091)


Posted by Cic on 20-11-2016 16:10:

Esercizio esame lab

Ciao a tutti, mi sto preparando in vista dell'esame di sistemi operativi di gennaio e c'è un esercizio, che mi è capitato all'esame di laboratorio con Monga, che non riesco proprio a risolvere. Il testo dell'esercizio diceva:

trovare tutti i file .c e contare il numero di caratteri nel loro nome.
Compresa la loro estensione, esempio pippo.c=7.

Qualcuno saprebbe darmi una mano?


Posted by Cronovirus on 20-11-2016 19:57:

Con la find trovi tutti i nomi dei file .c e con una opsione li stampi tutti di fila, poi in pipe conti i caratteri :)


Posted by Cic on 22-11-2016 10:19:

Sì, sull'idea su come procedere non ho grossi problemi. Il fatto è che una volta trovati i file .c, contate le linee dei nomi, non riesco a contare il numero di caratteri delle linee praticamente, che poi sarebbero i nomi dei file.


Posted by Cic on 22-11-2016 10:20:

Praticamente mi manca l'ultimo passaggio, perché finché si tratta di trovarli e stamparli, non ho problemi.


Posted by Cronovirus on 22-11-2016 15:24:

usa 'wc -c'


Posted by Cic on 22-11-2016 15:41:

Alla fine ci sono riuscito, se a qualcuno può interessare, ho fatto così:

sudo find / -type f -name "*.c" | rev | cut -d "/" -f1 | rev | wc -m


Posted by PrizeD on 29-12-2016 16:06:

Originally posted by Cic
Alla fine ci sono riuscito, se a qualcuno può interessare, ho fatto così:

sudo find / -type f -name "*.c" | rev | cut -d "/" -f1 | rev | wc -m


Ciao, stavo provando anche io a fare questo esercizio, e mi sono accorto che facendo così vengono contati anche gli \n presenti. Alla fine sono arrivato a:

sudo find / -type f -name "*.c" | cut -d "/" -f2 | xargs printf "%s" | wc -m

Usando printf al posto di echo non c'è più il problema di \n letti a fine riga.


Posted by Cronovirus on 29-12-2016 20:39:

find ./ -type f -name "*.c" -printf "%f" | wc -c


Posted by PrizeD on 29-12-2016 21:07:

Originally posted by Cronovirus
find ./ -type f -name "*.c" -printf "%f" | wc -c


Ma "wc -c" non stampa il numero di byte di un file?


Posted by Cronovirus on 29-12-2016 21:09:

si, nota che un carattere è un byte e quindi è giusto. Puoi usare anche wc -m, non cambia niente


Posted by PrizeD on 29-12-2016 21:40:

Si, ma l'esercizio era di contare i caratteri contenuti nel nome. E inoltre, rimane il problema degli \n, che con molta probabilità vengono contati da -c


Posted by Cronovirus on 29-12-2016 22:05:

prova per credere


Posted by Cic on 04-01-2017 12:02:

Ha ragione Cronovirus, con la soluzione proposta da lui, non vengono contati gli \n. Grazie.


Posted by PrizeD on 16-01-2017 15:41:

Scusa Cic se mi riaggancio al tuo post, ma evito di aprirne uno nuovo.
Stavo facendo questo esercizio:

- Trovare tutti i file che abbiano lo stesso numero di blocchi

count=0; prevf=""; prevb=0; find / -type f | head -20 | while read file; do blocks=$(stat -c %b $file); echo "$blocks $file"; done | sort -n | while read blocks file; do if [ $count -eq 0 ]; then prevb=$blocks; prevf=$file; fi; ((count++)); if [ $blocks -ne $prevb ]; then if [ $count -gt 2 ]; then echo "$prevb BLOCKS $prevf"; fi; prevb=$blocks; prevf=$file; count=1; fi; if [ $count -gt 1 ]; then echo "$prev BLOCKS $prevf"; prevf=$file; fi; done


In pratica leggo tutti i file e li stampo con il relativo numero di blocchi, riordino e stampo solo se trovo più di 1 file con un certo numero di blocchi. (head -20 l'ho messo per velocizzare le prove)

Che ne pensate? Come avreste fatto voi? (commenti e correzioni al codice sono più che ben accetti)


Posted by Cic on 16-01-2017 16:23:

Sembra andare bene, al momento non mi vengono in mente altre soluzione. Se ne trovo una alternativa, la pubblicherò.


Posted by Cic on 18-01-2017 13:06:

Ciao PrizeD, ho provato a trovare una soluzione alternativa all'esercizio che ha hai sottoposto. Ho fatto così:

sudo find / -type f | head -10 | xargs du $dim1 | find / -type f | head -11 -a head -20 | xargs du $dim2 | awk '{if($dim1==$dim2) print $dim1, "\n", $dim2}'.

In pratica faccio 2 find sui file che vanno prima da 1 a 10 e poi da 11 a 20, memorizzando la loro dimensione in blocchi in $dim1 e $dim2. Poi verifico che abbiano le stesse dimensioni in blocchi e faccio la stampa di questi valori. Non sono sicuro al 100% che vada bene però.


Posted by PrizeD on 18-01-2017 16:23:

Uhmmm.. Correggimi se sbaglio, ma $dim1 e $dim2 non li hai dichiarati ne gli hai assegnato nulla, in xargs se vuoi usare l'input letto (che comunque viene appeso alla fine) devi usare "-I {}".
Inoltre (head -20 l'avevo usate per velocizzare i test, in realtà erano da cercare tutti i files) non penso che "head -11 -a head -20" funzioni, piuttosto sarebbe da fare "head -20 | tail -10".

Per quanto riguarda awk invece, non ne ho la più pallida idea...so che è un comando che semplifica molto la vita, ma non saprei come usarlo bene


Posted by PrizeD on 18-01-2017 20:26:

Avrei una domanda, riguardo un paio di esercizi:
- Per ogni utente trovare i 3 file più vecchi del sistema
- Memorizzare in un archivio .ar tutti i file creati negli ultimi 2 giorni di dimensione minore di 5k.

(tralasciando l'archivio .ar, che penso sia un errore di copia e incolla) Come si potrebbero risolvere, dato che di un file abbiamo soltanto atime mtime e ctime?
Googlando un po' ho letto che questo dato dovrebbe essere rappresentato dal campo "Birth" in stat, però a seconda del filesystem, potrebbe non essere presente.


Posted by Cic on 19-01-2017 11:33:

Per quanto ne so io, il problema dei 2 giorni è risolvibile con -ctime -2. Per l'archivio ar invece, a quanto pare, è un formato vecchio che non è più riconosciuto. Per quello dei file più grossi io farei così:

sudo find / -type f -user $UID | xargs du | head -3.


Posted by PrizeD on 19-01-2017 13:09:

Ma -ctime non rappresenta il giorno in cui il file è stato "cambiato"?
Ovvero sono stati modificati gli attributi per esempio.


Posted by Cic on 19-01-2017 14:57:

In teoria no, perché -ctime ti dice l'ultima modifica che è stata fatta ad un file in un intervallo di giorni. Di conseguenza se tu crei un file oggi ed esegui la ricerca su file modificati negli ultimi 2 giorni, ti comparirà anche quello appena creato, perché la data di creazione effettivamente rappresenta l'ultima modifica che ha subito il file stesso.


Posted by alexx on 25-01-2017 09:41:

ciao ragazzi. vorrei sapere una cosa: all'esame di laboratorio per prendere 18 è sufficiente fare giusto il partizionamento? inoltre non ho capito se va fatto su qemu e quindi usare un disco virtuale.
grazie


Posted by Cic on 25-01-2017 11:11:

Ciao alexx, l'esercizio sul partizionamento serve soltanto per accedere al 2° esercizio. Sbagliando l'esercizio sul partizionamento l'esame finisce con una votazione insufficiente. Facendo bene il primo e il secondo puoi prendere fino a 24, inoltre facendo bene anche il secondo puoi scegliere se fare o meno il terzo esercizio, che è su JOS. Poi per esercitarti a casa dovrai usare qemu con un'immagione del sistema operativo, puoi trovare tutto sul sito del lab.


Posted by alexx on 26-01-2017 10:54:

Originally posted by Cic
Ciao alexx, l'esercizio sul partizionamento serve soltanto per accedere al 2° esercizio. Sbagliando l'esercizio sul partizionamento l'esame finisce con una votazione insufficiente. Facendo bene il primo e il secondo puoi prendere fino a 24, inoltre facendo bene anche il secondo puoi scegliere se fare o meno il terzo esercizio, che è su JOS. Poi per esercitarti a casa dovrai usare qemu con un'immagione del sistema operativo, puoi trovare tutto sul sito del lab.


si so che bisogna usare qemu, ma durante l'esame il disco che si deve partizionare è un disco virtuale da creare su qemu?

non c'è una guida che facciamo prima?
ps: e all'esame bisogna semplicemente farlo o consegnare anche uno script dei comandi utilizzati?


Posted by Cic on 26-01-2017 15:11:

All'esame l'ambiente sul quale lavorerai è già tutto predisposto. Non devi consegnare niente in formato cartaceo. Ogni esercizio ha un limite di tempo prefissato, esaurito il tempo, qualsiasi cosa tu stia facendo, l'ambiente di lavoro si resettarà in automatico. Comunque per tutti i dettagli, vai qui https://mameli.docenti.di.unimi.it/...iki/TemaDEsame.


Posted by alexx on 26-01-2017 15:34:

Originally posted by Cic
All'esame l'ambiente sul quale lavorerai è già tutto predisposto. Non devi consegnare niente in formato cartaceo. Ogni esercizio ha un limite di tempo prefissato, esaurito il tempo, qualsiasi cosa tu stia facendo, l'ambiente di lavoro si resettarà in automatico. Comunque per tutti i dettagli, vai qui https://mameli.docenti.di.unimi.it/...iki/TemaDEsame.


ho trovato una guida del prof Re. qui a pag 70 https://homes.di.unimi.it/re/Corsi/...AB_L2_lez4.pdf.

ho risolto. non c'era proprio l'eseguibile

ok ce l'ho fatta. la partizione estesa non conta in quelle richieste nell'esame vero?


Posted by alexx on 06-02-2017 15:38:

ciao ragazzi. una cosa: quando uso find per trovare dei file,
quindi find ./ -name "*.c" | , se dopo la pipe metto un grep, questo opera sui contenuti dei file o sui nomi? nel caso ci fosse bisogno dello xargs non è che riuscireste a spiegarmi cosa fa. perche non riesco proprio a capire. a volte viene usato e altre volte no.


All times are GMT. The time now is 18:57.
Show all 27 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.