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
 
Esame Laboratorio Gennaio
Clicca QUI per vedere il messaggio nel forum
Java
ciao a tutti


ma l'iscrizione per l'esame di laboratorio di venerdì prossimo non è ancora stata pubblicata o sono scemo io?

f3d386
stesso problema...devo sostenere la prova di laboratorio di venerdì 16 ma non ho ancora trovate tracce di iscrizioni...nemmeno nel wiki.

francescoo
ciao..ho lo stesso problema..
visto che anche voi avete l'esame venerdi sapete come faccio a trovare solo i file di testo?
è una domanda che puo fare all'esame..
vi dico gia che fare find / -type f -name "*.txt " non va bene poichè i file di testo non sono solo quelli con estensione txt..
sapete un altro modo?

Java
se tu i file che trovi con la find li passi al comando file ti da informazioni sul tipo di file

ora sono al lavoro, stasera magari ci guardo e ti scrivo però si deve usare il comando file :-D

francescoo
io vorrei trovare tutti i file di testo per ogni utente..quindi facevo cosi
for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq) ; do
for FILE in $(find / -type f -user $UID | xargs file | grep -v "EXECUTABLE-PC") ; do
done
done

francescoo
pero se provate a farlo vi da out of space..

Java
se posso darti un consiglio, i comandi invece di metterli nel for mettili in un file e scorri il file con cat, secondo me il problema del space lo risolvi

Java
http://sl-lab.it/dokuwiki/doku.php?id=sistop:esamelab

francescoo
ciao java..cioè?non ho capito come intendi..
mi puoi fare vdee il codice..un esempio..

Java
al mio esame di settembre trentini mi aveva consigliato invece di mettere il comando nel for, dove possibile, mettere l'output in un file e nel for eseguire il cat del file

cioè
for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq) ;

diventa

cut /etc/passwd -d : -f 3 | sort -n | uniq > prova.txt

for UID in $(cat prova.txt);

francescoo
e cosi dici che funziona?
il problema vero che o non riesco a risolvere è questo:
per ogni utente trovare il file di testo per ogni riga
mi fai vedere tu come lo risolveresti?
intendo proprio risoluazone completa?
ti chiedo questo gran favore
grazie mille in anticipo..

francescoo
scusa il testo era :
per ogni utente trovare il file di testo con piu righe

Java
scusa se rispondo solo ora ma ieri sera non riuscivo ad accedere a dsy

comunque

Per Ogni Utente trovare file di testo con piu righe

#!/bin/sh
for uid in $(cat /etc/passwd | cut -d ':' -f 3);do
max=0;
filemax='';
for file in $(find / -type f -user $uid | xargs file | grep executable | cut -f 1 -d ':');do
if $(expr $(cat $file | wc -l) -gt $MAX);then
MAX=$(cat $file |wc -l)
FILEMAX=$file
fi;
done;
echo "$uid -> $FILEMAX"
done;


il for interno può essere sostituito tutto da questo comando, però non capisco il perchè il wc -l mi tiri fuori due totali alla fine boh..provalo


find / -type f | xargs file | grep executable | cut -d : -f 1 | xargs wc -l | sort -n | tail -3 | head -1


la questione file di testo l'ho risolta cercando gli executable però anche lì è limitato il range di file che tira fuori...

wizard
Il modo di procedere è corretto:

C'é un errore nel secondo for:

grep -v executable
(mancava l'opzione -v che esclude gli eseguibili)

Inoltre le variabili sono case sensitive, quindi se si dichiara, per es.: max=0 non si può usare $MAX

Nel comando in fondo inoltre:

sintassi tail: tail -n 3
sintassi head: head -1
(hanno questa lieve differenza, non so perché)

Java
concordo sul grep -v e sul case sensitive e gli errori sono dovuti semplicemente al fatto che ho dovuto copiare a mano il programmino in blocco note in windows..banale errore di copiatura...
la questione del tail a me funziona anche senza la -n
boh

ma secondo te x trovare i file di testo è corretto procedere come ho fatto o c'è un altro procedimento magari

wizard
Rettifico, funziona anche con: tail -3 :-D

wizard
Per trovare i file di testo il metodo che avrei utilizzato è quello.

Cercando in internet ho visto che si può anche usare quest'altro metodo:

test -x nome_file

che restituisce 0 se il file è eseguibile. Si tratta quindi di negare la condizione

Java
ho provato il comando test ma non riesco a utilizzarlo boh

wizard
Svelato il mistero del comando: test -x <file>

si riferisce al permesso di esecuzione del file (i flag: rwx per intenderci)
Infatti se prendi un file qualsiasi e gli imposti il chmod +x, il file risulta OK a test -x

Quindi non va bene. La soluzione al momento rimane il comando: file

Java
perfetto. grazie mille e già che ci siamo e ti vedo molto esperto, riesci a illuminarmi sul SUID?
e poi tu come risolveresti
"Per ogni utente trovare il processo che occupa piu memoria"
"per ogni utente calcolare il numero dei processi attivi e dire l'utente che ne ha di piu"

sono un po in difficolta su questi

francescoo
ciao java..
ieri sera non riuscivo ad accedere al dsy..
ma la procedura che hai scritto te per trovare il file di testo con piu righe per ogni utente l'hai provata e funziona?
perchè a me da comunque out of space...

Java
la versione che ho scritto da out of space anche a me

perchè io pirla non ho messo anche il secondo for in un file

oppure al posto del secondo for utilizza il comando che ti ho messo
find / -type f | xargs file | grep executable | cut -d : -f 1 | xargs wc -l | sort -n | tail -3 | head -1

secondo me funziona anche cosi

wizard
Per quanto riguarda SUID so solo che è l'owner del file.

Per quanto riguarda:
"Per ogni utente trovare il processo che occupa piu memoria"
...mi risulta molto laborioso.

Con le mie conoscenze la vedo come:

1. legger il contenuto di: ps -alx
2. ordinarlo sul campo UID (campo 3): sort +3 -n
3. scorrere il risultato ottenuto riga per riga (comando sed - sintassi piuttosto incasinata) memorizzando lo user corrente ed estraendo ogni volta la dimensione del processo per fare un confronto con l'ultima dim. letta.

Piuttosto laborioso. Non ho trovato soluzioni più semplici (spero ce ne siano)

francescoo
ciao java..adesso provo quello che mi hai detto..ma xke metti tail -3 e poi head -1
non capisco prendi prima gli ultimi 3 e poi di questi prendi il primo?

Java
x' il comando wc alla fine mette anche il totale a quanto ho notato..e con quel comando che avevo provato me ne tirava fuori due di totali che veramente non capivo..quindi prendo gli ultimi tre
ultimo file, totale1, totale2
e prendo solo il primo cioè il file...

f3d386
scusate la domanda probabilmente stupida ma...
all'inizio di ogni script bisogna mettere #!/bin/bash o #!/bin/sh ??? e ke differenza c'è tra i due?

Java
io uso #!/bin/sh

non so la differenza e non credo sia fondamentale :D

f3d386
ah ok...ah scusami ancora...ma se volessi mettere i risultati di un echo in un file...
ho pensato di fare echo $i >> file.txt
ma se eseguo lo script più di una volta dentro troverò dei doppioni...come faccio a far sì che ogni volta che eseguo lo script il file sia sovrascritto?

Java
il >> inserisce in coda
il > scrive il file da zero

mentre se vuoi salvare tutti i dati e visualizzare i dati presi una sola volta usi il >> e fai cat file.txt | uniq

f3d386
grazie mille...l'ultima cosa...mi spieghi perchè nello script seguente non funziona la parte count=$(($count +1)) ??

#!/bin/bash

trovati=$(find / ! -type d -mtime -X)
count=0

for myFile in $trovati; do
echo $myFile
count=$(($count+1)) ------> mi stampa tipo 0+1+1+1+1+ ma nn la somma totale
done

echo $count

Java
Metti uno spazio prima e dopo il piu

count=$(expr $count + 1)

dovrebbe andare è solo questione di spazi

f3d386
ho visto sul wiki l'es per trovare i tre utenti che occupano più spazio sul sistema...ma non mi convince...non esiste una maniera più semplice?io col du ho provato...il problema è ke lo spazio occupato dai file di ogni utente è sempre lo stesso...anche per utenti con 4 file scarsi...
qualche idea in merito???

francescoo
ciao java..ho provato a fare come mi hai detto..cioè
a mettere tutti e 2 i for in file di nn va
allora ho provato a fare il secondo senza for
find / -type f | xargs file | grep executable | cut -d : -f 1 | xargs wc -l | sort -n | tail -3 | head -1
il problema è che appena metto il sort è lo faccio partire mi da per ogni file wc nnot open ...
invece se nn metto il sort nn da questo problema..
pero a me il sort rve per forza perke devo prendere quello maggiore..
lo da anche a te qst errore??

Java
il cannot open te lo da sui file protetti credo :D

infatti ho provato a lasciare andare e vedo mille wc cannot open e dopo quelli ci sono altri file con la lunghezza corretta...l'unica cosa è che con il sort li vedi tutti all'inizio :D

francescoo
scusami..è vero..l'ho notato ora..

francescoo
java..
per ora ho provato il comando da solo e va..ora lo provo nel programma..ma a me funziona gia mettendo sort -n | tail -1 senza fare anche tail3 | head -1..non so..

Java
eh allora il tail -3 head -1 lo avevo fatto perchè il wc tira fuori anche i totali di non so cosa e me li ritrovavo alla fine della lista, sarebbe stato piu corretto filtrare le righe che non contenevano ' total' per dire

boh
io sono in ansia per venerdi comunque...è il mio ultimo esame e c'è in gioco molto...

francescoo
ifnatti..gli ultimi file si chiamano total..ma dici quindi non sono file??e cosa sono?
stessa cosa per ..se non lo passo devo rifare tutto..
ufff

Java
per ogni utente trovare il processo che occupa piu spazio in memoria

#!/bin/sh
echo $(cat /etc/passwd | cut -d ' ' -f 3) > utenti.txt
echo "" > processi.txt
for uid in $(cat utenti.txt);do
echo "$uid -> $(ps -axl| tr -s ' ' ' ' | cut -d ' ' -f 4, 8-15 | grep "^$uid"|cut -d ' ' -f 2-8 | sort -n | tail -1)" >> processi.txt
done;
cat processi.txt



Trovare i tre utenti che occupano piu spazio sul sistema

#!/bin/sh
echo "" > utentisize.txt
echo $(cat /etc/passwd | cut -d ':' -f 3) > utenti.txt
for uid in $(cat utenti.txt);do
echo $(find / -type f -user $uid | xargs du -s | cut -f 1) > file utente.txt
SOMMA=0
for dim in $(cat fileutente.txt);do
SOMMA=$(expr $SOMMA + $dim)
done;
echo "$uid $SOMMA" >> utentisize.txt
done;
cat utentisize.txt | sort +1 | tail -3

Java
Originally posted by f3d386
ho visto sul wiki l'es per trovare i tre utenti che occupano più spazio sul sistema...ma non mi convince...non esiste una maniera più semplice?io col du ho provato...il problema è ke lo spazio occupato dai file di ogni utente è sempre lo stesso...anche per utenti con 4 file scarsi...
qualche idea in merito???


prova a postare la soluzione che hai provato, che ci guardiamo

francescoo
ciao java..
quello delle righe l'ho risolto fialmente..come dicevi tu..quindi invece di fare un secondo for ho fatto un comando unico..
mi è venuto un dubbio:
c'è qualche comando che mi dice di che utente è un determinato file?
cioè ad es: trovare il file piu grosso del sistema e dire di che utente è..??

Java
si si

l'ho scoperto ieri notte

è il comando stat con il parametro -uid

oppure soluzione piu complicata, passare dal ls -l e agire di cut e mille balle

riesci a postare il tuo esercizio delle righe completo e funzionante ?

francescoo
ciao java..scusa se ti rispondo ora ma oggi ero fuori..la mia sol. funzionante è:
for uid in $(cat /etc/passwd | cut -d ':' -f 3 | sort -n | uniq ); do
echo "utente $uid"
find / -type f -user $uid | xargs file | grep -v 'executable' |cut -d ':' -f 1 | xargs wc -l | grep -v 'total' | sort -nr | head -1
done

#come hai visto nel find ho fatto il grep su total xke ogni tot stampa a video le righe totali di tutti i file e quindi le tolgo

francescoo
guarda questo:
calcolare lo spazio occupato da un utente ( dai suoi files)
questo è quello che ho fatto io:

procsize=0
sum=0
for uid in $(cut etc/passwd -d ':' -f 3 | sort -n | uniq); do
echo "utente $uid"
for procsize in $(find / -type f -user $uid | xargs du | cut -f 1); do
sum=$(expr $sum + $procsize)
done
echo "$sum"
sum=0
done


essendoci 2 for mi da out of space..ho provato a metterli nei file ma da lo stesso errore..
tu riesco a trovare una soluzione?

Java
guarda che poco sopra cè una soluzione funzionante per Trovare i tre utenti che occupano piu spazio sul sistema

basta togliere l'ultima istruzione :P

francescoo
echo "" > utentisize.txt
con questo hai inizializzato utentisize.txt?

poi:
echo $(cat /etc/passwd | cut -d ':' -f 3) > utenti.txt
se non mettevi echo non funziona?lo devo sempre mettere per salvare nel fie di testo?

francescoo
scusa..ti volevo chiedere anche che differenza c'è tra mettere du e du -s?
mi sembra che non cambi nulla...

francescoo
java ma l'esercizio per la somma dei file l'hai provato?e funziona?
xke a me da out of space..

Java
si, funziona

echo "" > utentisize.txt
azzera il file

echo $(cat /etc/passwd | cut -d ':' -f 3) > utenti.txt
puoi non mettere il echo $

francescoo
puo essere ke l'utente 0 da me abbia troppi file??
xke l'ho copiato identico ma da out of space...
uffi

f3d386
scusate ragazzi se sparo ogni volta un argomento diverso...
ho letto in altri post che a volte chiede di fare un archivio .gz anzichè .tar...cm faccio a farlo???

Java
oh grazie a tutti! a chi ha scritto qua, a chi mi ha conosciuto di persona nonostante il mio stato pietoso :D e a chi non mi ha riconosciuto

passato con 22 quindi 24 in totale
esami finiti






giusto per la cronaca:
1 partizione solita, l'ho sbagliata -.- ahahaha son partito da 0 invece che da 1...l'emozione
2. trovare i file piu grandi di 10k che contengono 'copyright' e dire di che tipo sono! una cazzataaaaaaaa

elex1984
2. trovare i file piu grandi di 10k che contengono 'copyright' e dire di che tipo sono!

SCUSA MA COME FAI A DIRE DI CHE TIPO SONO??? :-(

Java
xargs file

f3d386
Ragazzi passatooooooooo!!!!!

Vorrei ringraziare questo thread ed in modo particolare Java ke è sempre stato pronto e disponibile x tt i miei mille dubbi, anche oggi di persona all'esame...
partizioni tutto ok a parte ke le ho fatte della metà delle dimensioni richieste (il solito pirla!!!:-D:-D:-D)
x quanto riguarda l'esercizio shell mi ha chiesto :

"creare un archivio ar contenente tutti i file minori di 500 kb che inizino per "v"

---> find / -type f -size -1000 -name "v*"|xargs ar rc archivio.ar

UNA CAZZATAAAAAAA!!!!

per la parte kernel mi ha chiesto l'es del tasto F8 che purtroppo non ricordavo...comunque l'importante era passare e così è stato...

grazie di nuovo a tutti voi...

francescoo
ringrazio anche io tutti!!!PASSATOOOOOO
grazie grazie :D :D :D

madkiller
graaande jaaavaaaa...volevo ringraziare anch'io java (l'avevo conosciuto all'esame di java appunto :D) che mi aveva dato una "mano" a fare il progetto ;) e adesso con sistemi
si' casso sei sofort graaaandeee

Dazan
ragazzi x quanto riguarda l'esercizio di shell come si fa a salvare lo script che ci viene richiesto?

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