![](//www.dsy.it/forum/images/space.gif) |
Gehur |
allora volevo sapere come fare operazioni matemati ... |
05-06-2008 20:42 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Gehur |
.grande:maestro.
Registered: Apr 2006
Posts: 519 (0.08 al dì)
Location: Milano
Corso: Informatica
Anno:
Time Online: 3 Days, 0:41:42 [...]
Status: Offline
Edit | Report | IP: Logged |
allora volevo sapere come fare operazioni matematiche con i risultati ottenuti da comandi di shell
esempio:
dire quanto occupano i file dell'utente A e dell utente B, cioè trovo tutti i file dell'utente A e quelli dell'utente B, li conto ma come faccio a sommare i 2 risultati??
per la seconda,ad esempio, faccio la ricerca di tutti i file di A con le rispettive dimensioni e redirigo l'output dentro a file
adesso ho un file di testo con la lista delle dimensioni dei file
come posso sommare i numeri presenti all'interno del file??
grazie ![:D](images/smilies/icon_mrgreen.gif)
|
05-06-2008 20:42 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Bloom |
metti la somma dell'utente1 in un file,la stessa c ... |
06-06-2008 08:05 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Bloom |
.illuminato.
Registered: May 2006
Posts: 229 (0.03 al dì)
Location:
Corso:
Anno:
Time Online: 2 Days, 3:14:49 [...]
Status: Offline
Edit | Report | IP: Logged |
metti la somma dell'utente1 in un file,la stessa cosa per l'utente2.
Dopodiche fai una cosa del tipo
SUM=$(expr $(cat utente1) + $(cat utente2))
echo "$SUM"
Per la seconda:
find / -type f -user pippo|xargs ls -l|awk {'print $5'}>prova
con questo comando selezioni solo le dimensioni di tutti i file di pippo e direzioni la lista su prova.
dopo di che con questo script dovresti trovarti la somma dei file
#!/bin/sh
SUM=0
for COUNT in $( cat prova|cut -f 1);do
SUM=$(expr $SUM + $COUNT)
done
echo "la somma e' $SUM"
Prova a vedere
Last edited by Bloom on 06-06-2008 at 08:54
|
06-06-2008 08:05 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
darkshadow |
Se ho capito bene dici di avere due file del tipo: ... |
06-06-2008 09:23 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
darkshadow |
Are You From The Past?
![](avatar.php?userid=9912&dateline=1222031114)
Registered: Jul 2007
Posts: 485 (0.08 al dì)
Location: Milano
Corso: Informatica Magistrale
Anno: 1
Time Online: 13 Days, 13:38:56 [...]
Status: Offline
Edit | Report | IP: Logged |
Se ho capito bene dici di avere due file del tipo:
file1
2
4
6
8
file2
1
3
5
7
Ma secondo me ti conviene tenere tutto in un unico file; basta che fai l'append mettendo >> invece che >.
Quindi abiamo una cosa del tipo:
file
2
4
6
8
1
3
5
7
A questo punto fai:
code: sum=0 #valore iniziale
#Leggo una riga alla volta finchè non arrivo alla fine; e metto il contenuto della riga in tmp.
cat file | while read tmp
do
sum=$(expr $sum + $tmp) #aggiungo a sum il contenuto di tmp.
done
echo $sum
Solo che provandolo mi restituisce sum=0 alla fine e non capisco il perchè. Ho fatto la stampa delle somme parziali e le effettua ma quando stampo la somma finale sembra che mi prenda il valore di inizializzazione (0).
__________________
by Ð@rk§h@ÐØw
Last edited by darkshadow on 06-06-2008 at 09:26
|
06-06-2008 09:23 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Bloom |
[QUOTE][i]Originally posted by darkshadow [/i]
... |
06-06-2008 09:28 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Bloom |
.illuminato.
Registered: May 2006
Posts: 229 (0.03 al dì)
Location:
Corso:
Anno:
Time Online: 2 Days, 3:14:49 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by darkshadow
Se ho capito bene dici di avere due file del tipo:
file1
2
4
6
8
file2
1
3
5
7
Ma secondo me ti conviene tenere tutto in un unico file; basta che fai l'append mettendo >> invece che >.
Quindi abiamo una cosa del tipo:
file
2
4
6
8
1
3
5
7
A questo punto fai:
code: sum=0 #valore iniziale
#Leggo una riga alla volta finchè non arrivo alla fine; e metto il contenuto della riga in tmp.
cat file | while read tmp
do
sum=$(expr $sum + $tmp) #aggiungo a sum il contenuto di tmp.
done
echo $sum
Solo che provandolo mi restituisce sum=0 alla fine e non capisco il perchè. Ho fatto la stampa delle somme parziali e le effettua ma quando stampo la somma finale sembra che mi prenda il valore di inizializzazione (0).
Ti restituisce zero perche il while quando esci dal ciclo ti azzera la variabile.
Prova ad rindirizzare il risultato sum su file
|
06-06-2008 09:28 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Gehur |
grazie ragazzi proverò al + presto ... |
06-06-2008 12:46 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Gehur |
.grande:maestro.
Registered: Apr 2006
Posts: 519 (0.08 al dì)
Location: Milano
Corso: Informatica
Anno:
Time Online: 3 Days, 0:41:42 [...]
Status: Offline
Edit | Report | IP: Logged |
grazie ragazzi proverò al + presto
|
06-06-2008 12:46 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Larios |
ma durante la prova cos'è che devi dare a monga l ... |
06-06-2008 14:51 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Larios |
.consigliere.
Registered: Oct 2007
Posts: 114 (0.02 al dì)
Location:
Corso:
Anno:
Time Online: 20:21:35 [...]
Status: Offline
Edit | Report | IP: Logged |
ma durante la prova cos'è che devi dare a monga le istruzioni che fai o i risultati che ottieni con le operazioni che ti richiede?
|
06-06-2008 14:51 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Bloom |
Entrambi ... |
06-06-2008 15:54 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Bloom |
.illuminato.
Registered: May 2006
Posts: 229 (0.03 al dì)
Location:
Corso:
Anno:
Time Online: 2 Days, 3:14:49 [...]
Status: Offline
Edit | Report | IP: Logged |
Entrambi
|
06-06-2008 15:54 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Larios |
comunque qui ci sono alcuni esercizi che non sono ... |
24-06-2008 08:12 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Larios |
.consigliere.
Registered: Oct 2007
Posts: 114 (0.02 al dì)
Location:
Corso:
Anno:
Time Online: 20:21:35 [...]
Status: Offline
Edit | Report | IP: Logged |
comunque qui ci sono alcuni esercizi che non sono proprio giusti:
- archiviare i files più grandi di 5k e più piccoli di 100k:
find / -type f -size +10 -a -size -200 | xargs tar cvf archivio.tar
la size si setta in blocchi da 512 byte non diretamente in kb...
cercare tutte i file che contengono la parola login:
find / -type f | xargs grep -l "login" | xargs tar -cvf archivio.tar
questo da "grep: line too long - truncated" anche se il comando è corretto ![:|](images/smilies/face4.gif)
|
24-06-2008 08:12 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Gehur |
[QUOTE][i]Originally posted by Larios [/i]
... |
24-06-2008 09:35 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Gehur |
.grande:maestro.
Registered: Apr 2006
Posts: 519 (0.08 al dì)
Location: Milano
Corso: Informatica
Anno:
Time Online: 3 Days, 0:41:42 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Larios
comunque qui ci sono alcuni esercizi che non sono proprio giusti:
- archiviare i files più grandi di 5k e più piccoli di 100k:
find / -type f -size +10 -a -size -200 | xargs tar cvf archivio.tar
la size si setta in blocchi da 512 byte non diretamente in kb...
nell'esempio del man indica le dimensioni in kb, poi se hai provato personalmente non saprei..
|
24-06-2008 09:35 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Amorphis |
[QUOTE][i]Originally posted by darkshadow [/i]
... |
25-06-2008 21:22 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Amorphis |
.precettore.
Registered: Jan 2008
Posts: 81 (0.01 al dì)
Location:
Corso: informatica
Anno: 2
Time Online: 1 Day, 10:59:09: [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by darkshadow
A questo punto fai:
code: sum=0 #valore iniziale
#Leggo una riga alla volta finchè non arrivo alla fine; e metto il contenuto della riga in tmp.
cat file | while read tmp
do
sum=$(expr $sum + $tmp) #aggiungo a sum il contenuto di tmp.
done
echo $sum
Solo che provandolo mi restituisce sum=0 alla fine e non capisco il perchè. Ho fatto la stampa delle somme parziali e le effettua ma quando stampo la somma finale sembra che mi prenda il valore di inizializzazione (0). [/B]
| awk '{i=i+$1} END {print i}'
dovrebbe sommare tutto
es.
find / -type f -user 2 -exec du {} \; | cut -f 1 | awk '{i=i+$1} END {print i}'
la somma di tutti i file dell'utente con UID 2
|
25-06-2008 21:22 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
pamarcan |
sort su campi diveri |
26-06-2008 21:25 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
pamarcan |
.primate.
Registered: Mar 2006
Posts: 68 (0.01 al dì)
Location:
Corso: informatica
Anno:
Time Online: 1 Day, 7:02:16 [...]
Status: Offline
Edit | Report | IP: Logged |
sort su campi diveri
In una lezione di laboratorio di Monga era sorto il problema di ordinare con sort su più campi diversi (numerici, alfanumerici). Penso potrebbe servire per l'esame; l'ho fatto per la shell di Linux quindi è da adattare perchè funzioni in Minix
ps aux |head -n 1 >> finale;
ps aux |sort -dr -k 1|tail -n +2|sort -r > psef;
a=$(cat psef |head -n 1|tr ' ' ' '|cut -d ' ' -f 1);
cat psef > tmp
cat tmp|while read i;
do
cat psef|head -n 1 > riga
t=$(cat riga|tr ' ' ' '|cut -d ' ' -f 1);
if test $t = $a
then
cat riga >> appoggio;
else
cat appoggio|sort -n -k 5 >> finale;
cat riga > appoggio;
fi;
cat psef|tail -n +2 > psef
a=$t;
done
rm appoggio;
cat finale;
rm finale;
rm riga;
rm tmp;
exit 0;
|
26-06-2008 21:25 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
carla86 |
qualcuno d voi sa come si archiviano i file cn ar? ... |
08-07-2008 14:19 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
carla86 |
.illuminato.
Registered: Dec 2006
Posts: 219 (0.03 al dì)
Location: Milano
Corso: Informatica
Anno: Terzo
Time Online: 6 Days, 21:40:54 [...]
Status: Offline
Edit | Report | IP: Logged |
qualcuno d voi sa come si archiviano i file cn ar? nell'ultima prova d'esame ha chiesto ke invece che archiviare cn tar, archiviare cn ar....
|
08-07-2008 14:19 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Fredx |
visto che questo thread mi è stato utile, scrivo ... |
10-07-2008 13:49 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Fredx |
.simpatizzante.
Registered: Mar 2008
Posts: 18 (0.00 al dì)
Location: Milano
Corso: Informatica
Anno: 2
Time Online: 1 Day, 20:36:26 [...]
Status: Offline
Edit | Report | IP: Logged |
visto che questo thread mi è stato utile, scrivo anche io le domande che mi sono state fatte:
- shell: trovare i file eseguibili binari (non script shell) presenti sul sistema
- kernel: stampare il pid ogni volta che un processo muore
per quanto riguarda la prima domanda, non sono riuscito all'esame a trovare il modo di capire quali file sono binari e quali no, quindi ho fatto solo il resto e mi ha tolto 2 punti (alla fine ho preso 28 :razz![:)](images/smilies/smile.gif)
da quanto ho capito molti altri hanno avuto lo stesso problema, e la risposta di trentini è stata "cercate sui manuali, sono fatti apposta!"... ma se uno non sa cosa cercare difficilmente trova qualcosa.
Cmq a casa, avendo internet, in 5 minuti ho trovato il comando giusto che è file.
Il comando file restituisce una cosa del tipo:
nome_file: tipo_file
dove "tipo_file" è una stringa che rappresenta il tipo del file, ad esempio per gli eseguibili restituisce "MINIX 32 bit executable, sep I&D stripped" e per gli script di shell "shell script".
Quindi il comando completo è:
code: find / -type f -perm -1 | xargs file | grep ' executable' | cut -f 1 -d :
spiegazione
find / -type f -perm -1: trova tutti i file eseguibili a partire dalla root (all'esame io ho usato la soluzione proposta nelle prime pagine: find / -type f | xargs ls -F | grep '\*$', ma trentini mi ha detto che non era molto utile visto che c'è il comando -perm... quindi penso gli vada bene anche -perm -1
xargs file: passo ogni file trovato al comando file
grep ' executable': prendo solo le linee che contengono la stringa " executable" (ho messo anche lo spazio perché altrimenti se un file si chiama executable o è in una cartella di nome executable, viene preso lo stesso=
cut -f 1 -d :: prendo solo i nomi dei file, tagliando la scritta generata dal comando file
Per la domanda sul kernel invece quello che ho fatto è stato aggiungere nella funzione clear_proc() del file /usr/src/kernel/system/do_exit.c la seguente stringa:
code: kprintf("%d", rc->p_nr);
che stampa il campo p_nr del PCB del processo che viene terminato... in realtà non sembrava che questo numero fosse il PID, e forse andava aggiunto qualcosa anche in do_kill... però a trentini è andato bene così
Per gli esercizi di partizionamento e shell ci han fatto loggare con gli utenti la cui sessione scadeva dopo rispettivamente 10 e 30 minuti dal login, e quindi minix veniva chiuso... mentre per la parte del kernel ci han fatto loggare come root/root e si sono scritti il tempo entro il quale dovevamo finire (dopo mezz'ora)... a me personalmente non sono venuti a controllare finché non li ho chiamati io, quindi sono stato un bel po' di più (non so quanto)
Vi allego anche un file .txt dove mi sono scritto i vari esercizi di shell e kernel trovati nel thread, con molte soluzioni spesso elaborate da me (e quindi magari un po' diverse da quelle trovate qui), poi ho anche fatto alcuni esercizi di cui non è stata postata la soluzione (ad esempio trovare i 10 file più vecchi del sistema e indicare di chi sono, o trovare per ogni utente il processo più grande a lui appartenente ed eseguirlo tutti i venerdì alle 17). Non sono assolutamente sicuro se siano giusti o meno anche se molti li ho testati, in ogni caso se avete dubbi chiedete qui e qualcuno risponderà ![:razz:](images/smilies/icon_razz.gif)
la parte del kernel è fatta in maniera molto riassuntiva, e anche lì ho molti dubbi sulla correttezza
Spero possa esservi utile...
Attachment: esercizilabso.txt
This has been downloaded 70 time(s).
|
10-07-2008 13:49 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Gehur |
ma per la parte kernel hai dovuto ricompilare??
... |
11-07-2008 14:59 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Gehur |
.grande:maestro.
Registered: Apr 2006
Posts: 519 (0.08 al dì)
Location: Milano
Corso: Informatica
Anno:
Time Online: 3 Days, 0:41:42 [...]
Status: Offline
Edit | Report | IP: Logged |
ma per la parte kernel hai dovuto ricompilare??
poi non ho ben capito, la parte di shell sei riuscito a farla???
|
11-07-2008 14:59 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
Fredx |
nella parte di shell la richiesta era "trovare i f ... |
11-07-2008 18:48 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
Fredx |
.simpatizzante.
Registered: Mar 2008
Posts: 18 (0.00 al dì)
Location: Milano
Corso: Informatica
Anno: 2
Time Online: 1 Day, 20:36:26 [...]
Status: Offline
Edit | Report | IP: Logged |
nella parte di shell la richiesta era "trovare i file eseguibili binari (non script shell) più grandi di 8k, presenti sul sistema" (la parte "più grandi di 8k" me l'ero scordata ieri, cmq ovviamente basta aggiungere un -size +16 al find). Quello che sono riuscito a fare io è trovare i file eseguibili più grandi di 8k presenti sul sistema, senza distinzione tra binari e script di shell... perché non conoscevo il comando file.
Trentini mi ha detto "va beh dai, se vuoi ti dò ancora un po' di tempo per cercare" e io gli ho risposto "è 20 minuti che cerco, non ho trovato niente, non penso di trovare qualcosa in 10 minuti" ![:D](images/smilies/icon_mrgreen.gif)
Quindi mi fa "va beh dai, ti dò un OK-- in questa parte, che sarebbe 22", poi mi ha fatto fare la parte del kernel.
La parte kernel è andata bene e ovviamente ho dovuto ricompilare, quindi alla fine mi ha tolto 2 punti per la parte shell e mi ha messo 28
|
11-07-2008 18:48 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
All times are GMT. The time now is 14:52. |
|
|
![Post New Thread](images/newthread.gif) |
|
![Post A Reply](images/reply.gif) |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|