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 |
| 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??? :-( |
| 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? |
|
|
|