Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi N - Z > Sistemi operativi I
 
Esercizio esame lab
Clicca QUI per vedere il messaggio nel forum
Cic
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?

Cronovirus
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 :)

Cic
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.

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

Cronovirus
usa 'wc -c'

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

PrizeD
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.

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

PrizeD
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?

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

PrizeD
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

Cronovirus
prova per credere

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

PrizeD
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)

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

Cic
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ò.

PrizeD
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

PrizeD
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.

Cic
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.

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

Cic
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.

alexx
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

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.

alexx
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?

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.

alexx
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?

alexx
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.

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate