.dsy:it. Pages (4): « 1 [2] 3 4 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- Esame di laboratorio (Giugno 2007) - Domande (http://www.dsy.it/forum/showthread.php?threadid=31182)


Posted by Simaldeff on 20-07-2007 12:50:

la domanda che mi e' stata fatta era : dare per ogni utente il numero di file che possiede.

ho fatto un piccolo script :

#!/bin/sh
for USER in $(cut -d : -f 1 /etc/passwd ); do
echo" numero file di ${USER}"
find / -user ${USER} -type f | wc -l
done
exit 0


fatto
ho pure insegnato qualcosa al trentini (anche se l'esercizio me lo ha datto monga ... ma me lo ha coretto trentini)
"il find di minix accetta anche il nome in lettere dello user"

fatto 24/30 ... non ho fatto il kernel in quanto avevo un'appuntamento alle 13 a monza ed erano gia le 12:10.

__________________
There is no way to happyness, happyness is the way. -Buddha-


Posted by plafo on 20-07-2007 12:53:

Originally posted by =kimi=
ciao raga
anche io ho fatto l'esame oggi, posso dirvi che l'esercizio dishell fa a fortuna! a me ha chiesto proprio quello di paul03 ( con l'aggiunta che dovevano anche essere file eseguibili ).
per il kernel dovevo modificare il file do_exit.c per farsi che ogni volta un processo usciva, dovevo incrementare un contatore e visualizzare ad ogni uscita il suo valore.

cmq si a fortuna...

in bocca al lupo...





ma la percentuale promossi/bocciati com'è stata?


Posted by =kimi= on 20-07-2007 15:07:

guarda io sono stato uno dei primi a finire, e non erano stati bocciati in molti,
cmq non per farti preoccupare ma dipende molto da che tipo di esercizio ti capita... il mio è stato semplice, ma se me ne capitava un altro che ha fatto un mio compa ( che e stato bocciato ) avrei fatto la sua stessa fine


Posted by plafo on 20-07-2007 15:32:

Originally posted by =kimi=
guarda io sono stato uno dei primi a finire, e non erano stati bocciati in molti,
cmq non per farti preoccupare ma dipende molto da che tipo di esercizio ti capita... il mio è stato semplice, ma se me ne capitava un altro che ha fatto un mio compa ( che e stato bocciato ) avrei fatto la sua stessa fine





ok grazie
ricordi com'era l'esercizio del tuo amico?


Posted by Snorlux on 20-07-2007 17:02:

Ciao a tutti, ho fatto l'esame stamattina, ma non l'ho passato.... Ho avuto dei problemi perché la shell è diversa. In lab c'è la bash mentre quella dell'immagine da scaricare dal sito è sh. Inoltre comandi uguali danno risposte diverse.

Dai prof mi è stato detto che il comando "find / -type f -name l*" cerca solo nella mia directory e non in tutto il file system. Perchè?
E soprattutto perchè a casa mi dà errore e in lab no?


Posted by Peach on 20-07-2007 19:32:

Stesso problema di snorlux sopratutto perchè a qualcuno impazziva il pc (non salvando le partizioni) e a me è impazzato elle!
Con il mio pc uso elle tranquillamente e mi muovo anche con le freccine invece in laboratorio...clicchi le freccine e escono i caratteri tipo A B C D (che a casa mia GIURO che non escono) morale della favola ho dovuto killare 2 volte il processo perchè mi era impazzito alla terza volta non ce l'ho fatta più...quello che scrivevo scrivevo e dopo qualche riga di codice tutto a iniziato a funzionare corettamente (non chiedetemi il perchè però!) ma sono stata bocciata cmq perchè ho sbagliato lo script di shell (colpa mia che non l'avevo studiato!...poco tempo....hehe)


Posted by plafo on 20-07-2007 20:22:

Originally posted by Peach
Stesso problema di snorlux sopratutto perchè a qualcuno impazziva il pc (non salvando le partizioni) e a me è impazzato elle!
Con il mio pc uso elle tranquillamente e mi muovo anche con le freccine invece in laboratorio...clicchi le freccine e escono i caratteri tipo A B C D (che a casa mia GIURO che non escono) morale della favola ho dovuto killare 2 volte il processo perchè mi era impazzito alla terza volta non ce l'ho fatta più...quello che scrivevo scrivevo e dopo qualche riga di codice tutto a iniziato a funzionare corettamente (non chiedetemi il perchè però!) ma sono stata bocciata cmq perchè ho sbagliato lo script di shell (colpa mia che non l'avevo studiato!...poco tempo....hehe)





che esercizio ti era capitato?


Posted by Vid on 20-07-2007 20:49:

Alcuni problemi effettivamente c'erano durante l'esame: anche a me il pc dopo la partizione non lasciava creare il filesystem con mkfs, ho provato a fare un reboot e dopo me lo montava.

Per quanto riguarda il problema di bash vs. sh, credo che se uno script gira correttamente su sh ma non funziona ugualmente bene su bash (anche se credo che eventuali problemi in questo senso si limitino all'utilizzo di variabili o alla command substitution, non certo all'invocazione di comandi), basti salvarlo su file rendendolo eseguibile e selezionando sh come interprete (basta inserire come prima riga la stringa #!/usr/bin/sh ) in modo tale che anche se avete bash come shell predefinita, lo script verrà interpretato da sh.
Io personalmente non ho incontrato problemi in questo senso.


Posted by Snorlux on 20-07-2007 22:43:

Come faccio a mettere la shell bash nella versione di Minix che ho scaricato dal sito di sisop?


Posted by iuz-lab on 21-07-2007 06:15:

30 :-)))))

le domande..
cerca gli utenti di un utente specifico che siano stati modificati da meno di 5 giorni ed archiviali..

soluzione a memoria..
#!/usr/bin/env sh

if [ $# -ne 2 ]; then
echo "usage: $0 username archive_name"
exit
fi;

uid=`cat /etc/passwd | grep ^$1: | cut -d : -f 3`

if [ -z $uid ]; then
echo "username not valid"
exit
fi;

find / -type f -user $uid -mtime -5 | ar r $2

modifica il kernel in modo che venga stampato a video quante volte si e' usata la syscall exit..
e devo dire che qui i docenti mi sono venuti incontro..
ho fatto le modifiche e quando ho ricompilato ho sbagliato make ordinando di ricompilare il mondo.. quasi un'ora di attesa :-(((( e con tutte le ore di sonno che avevo ogni riga che attraversava lo schermo si portava via un pezzetto della mia anima..

alla fine riavvio e funzionava.. ma andava in crash durante il boot.. che ha quanto diceva il trentini era una cosa capitata anche a lezione e non si conoscevano ancora le ragioni..
comunque la mia soluzione era una semplice modifica al file AICR kernel/system/do_exit.c aggiungendo una variabile statica, incrementandola e stampandone il valore tramite kprintf..


Posted by bog86 on 03-08-2007 14:21:

Originally posted by iuz-lab
30 :-)))))

le domande..
cerca gli utenti di un utente specifico che siano stati modificati da meno di 5 giorni ed archiviali..



Tradotto in italiano sarebbe?


Posted by Kurt84 on 07-08-2007 17:17:

Originally posted by matteojacoca
Ciao Raga,
a me hanno chiesto:

1)Calcolare per ogni utente lo spazio occupato sul sitema
2)Come esercizio di Kernel: Visualizzare quante volte viene terminato un processo.

1)Per il primo..ci sono rimasto male...in quanto...io come molti ci eravamo studiati tutti gli esercizi proposti qui e sul wiki...peccato che (non so che cacchio hanno combinato Trentini e Monga) sta di fatto che molti degli esercizi proposti ieri a casa andavano benissimo e chi sà come mai all'esame non funzionavano....

Vi faccio vedere la mia soluzione del Primo:

#!/bin/sh
for i in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do
SUM=0
for file in $(find / -type f -user $i | xargs du | cut -f 1); do
SUM=$(expr $SUM + $file)
done
echo "L'utente $i occupa $SUM KB sul sistema"
done

A casa perfetta, all'esame restituiva..."Out of Space".....bene....
Allora mi sono dovuto inventare una soluzione assurda....mettendo prima le dimensioni in un file...poi attraverso un while...cercare di sommarle....(che poi ovviamente non mi è venuto)....morale sono riuscito a portami a casa un SUDATISSIMO...21....e non sò ancora come ho fatto...
Conclusione:
State attenti, perchè molte delle soluzioni proposte sia qui che sul wiki, potrebbero NON funzionare...anche se sono PERFETTAMENTE CORRETTE....ho visto un sacco di gente bocciata per questo!!!!

Ciao



Penso che " l'out of space " sia dovuto all'output abnorme del find (o anche /etc/passwd troppo lungo?). Qualcuno sa darmi qualche suggerimento per una versione di questo script che risolve il problema ?

Grazie

Io avevo provato così:

#!/bin/sh
cut /etc/passwd -d : -f 3 | sort -n | uniq | while read i; do
SUM=0
find / -type f -user $i | xargs du | cut -f 1 | while read file; do
SUM=$(expr ${SUM} + ${file})
done
echo "L'utente ${i} occupa ${SUM} KB sul sistema"
done


Ma non funzionava come avrebbe dovuto..

PS Ho appurato che SUM è corretta(la somma viene fatta correttamente) finchè non esce dal while più interno, uscita da questo while incredibilmente diventa 0 e quindi mi dice che tutti gli utenti occupano 0 kb!



Posted by Kurt84 on 08-08-2007 00:54:

Ho trovato un modo per farlo senza pericolo di "out of space", anche se non è molto ortodosso:

#!/bin/sh
cut /etc/passwd -d : -f 3 | sort -n | uniq | while read i; do
SUM=0
echo "0">somme --------------------------------------> inizializzo il file somme a 0
find / -type f -user $i | xargs du | cut -f 1 | while read file; do
SUM=$(expr ${SUM} + ${file})
echo "${SUM}">somme ----------------------------> SUM copiato in somme
done
echo "L'utente ${i} occupa $(cat somme) KB sul sistema"
done

Praticamente uso il file somme come se fosse una variabile, al posto di SUM, per stampare a video quanto occupa un utente (quando faccio SUM=$(expr ${SUM} + ${file}) le modifiche apportate a SUM non vengono viste fuori da questo while, non so per quale congiunzione astrale, quindi l'occupazione in KB di ogni utente risulta sempre 0).
Memorizzando invece ogni somma nel file somme ( con ">" sovrascrivo il file, quindi l'ultimo dato scritto su "somme" è la somma totale dell'utente) posso stampare a video il dato.


Posted by umibozu on 10-08-2007 14:50:

ragazzi sto sbattendo la testa su un esercizio dato all'esame di luglio e non riesco a trovare una soluzione,la domanda era
questa:
- Calcolare l'occupazione totale dei processi in memoria per ogni utente.

seleziono l'utente attraverso questa istruzione:
for UID in $(ps -axl | sort +4 -n | tr -s ' ' ' ' | cut -d ' ' -f 4);do

e mi blocco qui perchè non riesco a trovare un modo per innestare un ciclo for dove per ogni utente prendo
un processo alla volta e sommo la sua dimensione.
se riuscite a completare la mia soluzione o avete altre soluzione scrivetele perchè mi sta facendo impazzire!!!!!!!

altre domande fatte a luglio:

-Archiviare tutti i file che incominciano per f e di dimensione < 5k in tar.gz

-Calcolare la somma della dimensione di file eseguibili che hanno all'interno la parola copyright non sensitive

-Trovare il processo che occupa più spazio in memoria

-Trova il processo che occupa per ogni utente più memoria(anke questa non riesco a risolvere)

-Archiviare i file modificati negli ultimi 5 giorni più grandi di 5k e più piccoli di 100


Posted by bog86 on 23-08-2007 14:41:

RISOLTO!
è troppo semplice, speriamo che all'esame siano un po' piu difficili altrimenti mi annoio...

codice:
#!/bin/sh
cut /etc/passwd -d : -f 3 | sort -n | uniq | while read UID; do
SUM=0
ps -alx | tr -s ' ' ' ' | cut -d ' ' -f 4,8 | while read file; do
UTENTE=$(echo "$file" | cut -d ' ' -f 1)
SPAZIO=$(echo "$file" | cut -d ' ' -f 2)
if [ $UTENTE = "$UID" ]; then
SUM=$(expr $SUM + $SPAZIO)
fi
echo "$SUM">figa
done
echo "L'utente $UID occupa: $(cat figa) kb"
done
exit 0


Posted by poi_1969 on 23-08-2007 15:13:

modesto .. vero


Posted by DarkSchneider on 27-08-2007 23:36:

ho fatto un po' di confusione...

ma queste domande di laboratorio fanno riferimento al turno di Bruschi, a quello di Trentini, oppure sono uguali per entrambi ? :?


Posted by poi_1969 on 28-08-2007 08:35:

tutto uguale
La prova di laboratorio è unica Trentini e Monga.


Posted by imperator on 28-08-2007 10:57:

Originally posted by umibozu

-Calcolare la somma della dimensione di file eseguibili che hanno all'interno la parola copyright non sensitive



io l'ho risolto in questo modo:

#! /bin/sh

SUM=0

for SIZEFILE in $(find / -type f | xargs grep -il "copyright" | xargs ls -lF | grep "\*$" | tr -s " " : | cut -d : -f 5); do
SUM=$(expr $SUM + $SIZEFILE)
done
echo "la somma è: $SUM"

le opzioni -il del grep mi consentono di:
-i per il case insensitive
-l per elencare il nome del file contente la parola copyright (altrimenti mi avrebbe stampato per ogni file la riga contenente la parola copyright)

ciauz


Posted by imperator on 28-08-2007 16:07:

Originally posted by umibozu
-Trova il processo che occupa per ogni utente più memoria(anke questa non riesco a risolvere)


ho provato a risolverlo così:

#! /bin/sh

MAXSIZE=0

for USER in $(cat /etc/passwd | cut -d : -f 3 | uniq); do

for PROC in $(ps -axl | tr -s " " : | cut -d : -f 4,8 | grep -v "SZ"); do
UID=$(echo $PROC | cut -d : -f 1)
SIZE=$(echo $PROC | cut -d : -f 2)

if [ $UID -eq $USER -a $SIZE -gt $MAXSIZE ]; then
MAXPROC=$PROC
MAXSIZE=$SIZE
fi

done
echo "il processo dell'utente $USER + grande è: $MAXPROC"
MAXPROC="nessun processo"
MAXSIZE=0
done


Posted by umibozu on 30-08-2007 10:45:

grazie!! ora ho un quesito da chiedervi... quando si usa il du per conoscere quanto spazio occupa un file in memoria,viene restituito
un valore con quale unità di misura??? byte,kilobyte, numero di blocchi, patate, pomodori!!!!!!!!!!!! il man non specifica
quale unità di misura si usa e facendo un test un file di 256 byte il du restituisce 4!!!


Posted by Kurt84 on 02-09-2007 13:11:

Originally posted by n3o
[list]


[*]Spostare tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra
[B]mv /directory/albero1/m* /directory/albero2




così copio file e sottodirectory che iniziano per m : se ho una sottodirectory che si chiama "mare" copierò anche tutti i file di questa sottodirectory, compresi quelli che NON iniziano per m.


Posted by Kurt84 on 02-09-2007 13:17:

Originally posted by umibozu
grazie!! ora ho un quesito da chiedervi... quando si usa il du per conoscere quanto spazio occupa un file in memoria,viene restituito
un valore con quale unità di misura??? byte,kilobyte, numero di blocchi, patate, pomodori!!!!!!!!!!!! il man non specifica
quale unità di misura si usa e facendo un test un file di 256 byte il du restituisce 4!!!


Dovrebbero essere i blocchi occupati. Tieni conto che nel man dice anche che a volte du potrebbe sovrastimare l'occupazione effettiva di un file..


Posted by umibozu on 03-09-2007 10:37:

Grazie Kurt! la parte del man dove dice ke il du potrebbe sovrastimare l'occupazione dei file l'ho letta ankio xò se un blocco è di 512 byte e il risultato del du per un file da 256 byte è 4 blocchi... penso ke sia un pò esagerata come misura!!!


Posted by umibozu on 04-09-2007 16:05:

Avete altri esercizi dati durante l'esame di laboratorio??


Posted by marcolino78 on 17-09-2007 10:47:

Question domandina

Ciao gente,
piccola domandina???
Durante un esame di lab è stato chiesto di:

copiare una directory mantenendo la struttura delle sottodirectory e i permessi, evitando però di copiare il contenuto delle cartelle(i file che all'interno che non sono directory)

Aiutoooo?!?!?!?!

Idee???


Posted by Dazan on 17-09-2007 11:56:

per esercitarmi a casa come si fa?


Posted by umibozu on 19-09-2007 10:28:

ciao a tutti!
Marco io ho risolto l'esercizio usando uno script perchè non ho trovato ne in cp ne in cpdir un comando utile per ottenere solo
le directory.

#/bin/sh
cpdir -p /directoryA /directoryB
for file in $(find /root/paper -type f); do
rm $file
done


Posted by marcolino78 on 19-09-2007 14:31:

credo che possa andar bene anche così,
perchè rimuovi i file all'interno di /root/paper????


Mille grazie.


Posted by Dazan on 19-09-2007 15:24:

gli esercizi che ci sno si fanno dal dos di windows?


Posted by Bennyk on 20-09-2007 11:03:

Ciao a tutti,
aggiungo un'altra domanda fatta all'esame:

- Quali e quante estensioni ci sono nel sistema?
(per estensioni si intende qualsiasi cosa ci sia dopo il carattere “.”, es: archivio.gz)

La soluzione è questa:

find / | rev | cut -f 1 -d '.' | grep -v / | rev | sort | uniq -c | sort -n

Spiegazione:

find / trova tutto (files e directories) a partire dalla root dir
rev inverte ogni riga dell'output
cut -f 1 -d '.' estrae il primo campo di ogni riga usando il . come separatore
grep -v / eliminazione delle sole directories
rev inverte di nuovo ogni riga dell'output
sort ordina l'output
uniq -c elimina righe duplicate contandole, ora l'output è del tipo 123 gz
sort -n (non necessario) ordina i risultati numericamente

Nota:
Si può evitare il grep -v / usando cut -f 1 -d '.' -s.


Posted by Bennyk on 20-09-2007 14:03:

Originally posted by darkman13
[...] Trovare il processo con pid dispari che occupa più spazio in memoria?


Io ho provato così, è un pò più brutale ma funziona:

code:
ps -axl|tr -s ' ' :|cut -d : -f 8,5|tr -d \)|tr -d \(|tr : ' '|grep -v "[0|2|4|6|8]$"|sort -nr| head -1


Posted by banjoo on 20-09-2007 14:29:

Informazione pratica...

Scusate l'ignoranza, ma...come si svolge fisicamente la prova di laboratorio??? Ok, partizioni, script e kernel, ma quando ci si siede ti fanno creare un utente? e poi? alla fine devi salvare in qualche modo? so che la domanda è banale ma non ho capito come si svolge la prova dal punto di vista pratico....grazie e scusate ancora per la banalità!!!


Posted by Bennyk on 20-09-2007 16:09:

L'esame consta di tre prove a tempo davanti al PC:

1 partizionamento (10 min)
2 scripting (30 min)
3 modica kernel (30 min)

La prova si svolge seduti al computer, già pronto con MINIX che gira su qemu, il prof scrive sul foglio l'esercizio indicando con quale utente e password loggarsi. Scaduto il tempo MINIX esce dalla shell, il prof dà la valutazione e si passa alla prova successiva.

Attenzione che le prove vengono effettuate nell'ordine sopra riportato ed è necessario passare la prima per accedere alla seconda e la seconda per accedere alla terza.

Per voti fino dal 18 al 24 bisogna passare le prime due, per voti fino al 30 anche la terza.


Posted by banjoo on 20-09-2007 16:15:

!!!!!

grande!!!!!! GRAZIE MILLE!!!!!


Posted by collo on 20-09-2007 16:32:

ciao nn riesco ad eseguire l'erercizio che chiedeva di creare un archivio gzip che contenga tutti i file che iniziano per c e la cui dimensione sia inferiore di 10 kb...nn riesco a capire come si usa ar


ho provato cosi ma nn va:
find / -type f -name c\* -size -20 | ar r archivio.ar

mi da errore con il comando ar!!
suggerimenti:?:?:?:?
thanks


Posted by bog86 on 20-09-2007 17:25:

hai dimenticato xargs


Posted by Bennyk on 20-09-2007 17:56:

Re: domandina

Originally posted by marcolino78

Durante un esame di lab è stato chiesto di:

copiare una directory mantenendo la struttura delle sottodirectory e i permessi, evitando però di copiare il contenuto delle cartelle(i file che all'interno che non sono directory)


Sei sicuro di questa domanda? Su Linux non sarebbe un problema ma i comandi di MINIX sono molto limitati, io non ne sono ancora venuto a capo.
Qualcuno ha idee?


Posted by =kimi= on 20-09-2007 20:00:

PER COLLO

non mi ricordo bene, ma all'esame mi ha fatto una domanda simile alla tua... con ar prova a mettere ar rc ....
in pratica dovresti aver dimenticato la c....
guarda sul man di ar e vedi... dovresti usare l'opzione che t crea larchivio e laltra che aggiunge i file nell'archivio


Posted by umibozu on 21-09-2007 14:22:

scusa marco!! il paper non centra niente è una cartella ke ho usato per provare la mia soluzione quindi al posto di
$(find /root/paper -type f) ci va $(find /directoryB -type f)


Posted by marcolino78 on 21-09-2007 14:48:

Thumbs up

mille grazie...speriamo bene :-D


Posted by =kimi= on 22-09-2007 20:34:

era una domanda dell'appello di luglio, in minix qualcuno sa cosa significa fare la statistica dei file < 10k 100k 1000k ??????????


Posted by jeremy.1983 on 23-09-2007 14:36:

Originally posted by =kimi=
era una domanda dell'appello di luglio, in minix qualcuno sa cosa significa fare la statistica dei file < 10k 100k 1000k ??????????


Secondo me dovevi dare una percentuale dei file

Io l'ho risolto facendo così
code:
#! /bin/sh TOT=$(find / -type f | wc -l | tr -s ' ' : | cut -f 2 -d :) DIECIK=$(find / -type f -size -20 | wc -l | tr -s ' ' : | cut -f 2 -d :) CENTOK=$(find / -type f -size -200 | wc -l | tr -s ' ' : | cut -f 2 -d :) MILLEK=$(find / -type f -size -2000 | wc -l | tr -s ' ' : | cut -f 2 -d :) CENTO=100 STAT=$(expr $DIECIK \* $CENTO) STAT1=$(expr $STAT / $TOT) STAT=$(expr $CENTOK \* $CENTO) STAT2=$(expr $STAT / $TOT) STAT=$(expr $MILLEK \* $CENTO) STAT3=$(expr $STAT / $TOT) echo "I file inferiori a 10k sono il ${STAT1}%" echo "I file inferiori a 100k sono il ${STAT2}%" echo "I file inferiori a 1000k sono il ${STAT3}%"


Posted by =kimi= on 23-09-2007 14:54:

ah sei riuscito a risolverlo????
cavoli io non ci avevo capito niente....


Posted by jeremy.1983 on 23-09-2007 21:00:

Ciao,

ma quando mi dà l'errore Out of space, che vuol dire che sto sbarellando di memoria o di hard disk???

Stavo provando a modificare questo esercizio:

-Determinare l'occupazione totale di un utente(somma dei suoi file)

in

-Determinare l'occupazione totale per ogni utente

Ho fatto lo script, lo lancio.... Out of space :wall::wall:


Posted by marcolino78 on 24-09-2007 09:58:

altro esercizietto

ciao a tutti, vi sottopongo un'altro esercizietto che ho sentito:

creare 10 nuovi utenti prendendoli da un file di testo???

idee???

come si a passare i valori presi da un file di testo???


Posted by jeremy.1983 on 24-09-2007 10:42:

Questa domanda era già stata risolta sul sito del corso ma lì è un un po' un casino, ti consiglio piuttosto di guardare QUI .

Le estensioni hanno poco significato in minix: quindi se tu crei user.list o user.txt non cambia nulla.

Se usi lo script devi lanciarlo così:

<nomescript> <nomefilelistautenti>

Ciao


Posted by jeremy.1983 on 24-09-2007 11:20:

Re: Re: domandina

Originally posted by Bennyk
Sei sicuro di questa domanda? Su Linux non sarebbe un problema ma i comandi di MINIX sono molto limitati, io non ne sono ancora venuto a capo.
Qualcuno ha idee?


Ho fatto uno script, pensando di replicare la directory "/bin"

code:
#! /bin/sh cpdir -pr /bin /bin2 rm $(find /bin2 -type f)


Ciao


Posted by banjoo on 24-09-2007 14:06:

Dimensione totale dei file per utente

Ciao, secondo voi può andar bene una cosa del genere per trovare l'occupazione totale per un utente?

#!/bin/sh
for NUM in $( find / -type f -user UTENTE | xargs du -s | cut -f 1); do
COUNT=$( expr $COUNT + $NUM)
done
echo "Totale: $COUNT"

a me sembra funzionare....
l'unica cosa, come faccio ad inserire l'utente come parametro quando lancio lo script? E' una cosa fattibile?

Grazie.


Posted by Bennyk on 24-09-2007 23:25:

Re: Re: Re: domandina

Originally posted by jeremy.1983
Ho fatto uno script, pensando di replicare la directory "/bin"[...]


Io ho provato così e sembra funzionare, certo non è proprio immediato...

code:
#!bin/sh if [ $# -lt 2 ]; then echo “syntax: $0 path1 path2 exit 1 fi echo “Copying folders...” find $1 -type d | sort | while read $DIR; do mkdir -p $2/$DIR chmod $(stat -mode $DIR | cut -d ',' -f 1) $2/$DIR done echo “Finished copying.” exit 0


Posted by Bennyk on 24-09-2007 23:46:

Re: Dimensione totale dei file per utente

Originally posted by banjoo
Ciao, secondo voi può andar bene una cosa del genere per trovare l'occupazione totale per un utente?

[...]

a me sembra funzionare....
l'unica cosa, come faccio ad inserire l'utente come parametro quando lancio lo script? E' una cosa fattibile?


Per inserire l'utente come parametro ti basta usare $1 (i parametri che passi sulla riga di comando sono numerati $1, $2... $n. $0 è il nome del file chiamato).

Inoltre consiglio vivamente di usare il while, invece del for, per evitare errori di "Out of space" nella command substitution, specialmente in casi tipo: $(find / ...).

Trovate qualche esempio QUI

code:
#!bin/sh if [ $# -lt 1 ]; then echo “syntax: $0 userID exit 1 fi find / -type f -user $1 | xargs du -s | cut -f 1 | while read $NUM; do ...


Posted by marcolino78 on 25-09-2007 10:54:

X jeremy.1983

sono andato a vedere la pagina che mi hai indicato e in effetti lo script non è complicato

1) #!/bin/bash
2) NUM=$(cat $1 | wc -l)
3) COUNT=0
4) while [ $NUM -ne $COUNT ]; do
5) COUNT=$(expr $COUNT + 1)
6) adduser $(cat $1 | awk "NR == $COUNT")
7) done

l'unica cosa che non ho capito è il $1, mi spiego meglio:
se per esempio chiamo il mio script NuovoUtente e il file FileUtenti.txt, come faccio a lanciarlo per far si che il cat $1 prenda come parametro il mio file???

forse cosi:
./NuovoUtente FileUtenti.txt

oppure manca qualcosa?
Grazie.


Posted by Peach on 25-09-2007 14:51:

Io faccio ./ nome script ma dice no such file or directory,ma se faccio find - type f lo trovo....come mai?????


Posted by banjoo on 25-09-2007 16:26:

Prova così, facendo attenzione agli spazi:

./NOMESCRIPT NOMEFILE

io personalmente non ho provato a dare estensione .txt al file di testo, ma questo non dovrebbe influire.

Attenzione anche alla directory in cui ti trovi al momento dell'esecuzione.


Posted by Peach on 25-09-2007 16:39:

allora

io creo il mio file con elvis (ad esempio nfile)
poi faccio chmod +x nfile
e se faccio ./ nfile mi dice no such file or directory
ma se faccio . /root/nfile funziona....

Come faccio a sapere la directory in cui sto eseguendo?


Posted by imperator on 25-09-2007 16:46:

basta lanciare il comando pwd


Posted by Peach on 25-09-2007 16:50:

ok e se non sto eseguendo su root cosa faccio?


Posted by Assochespasso on 26-09-2007 08:47:

Originally posted by Bennyk
Ciao a tutti,
aggiungo un'altra domanda fatta all'esame:

- Quali e quante estensioni ci sono nel sistema?
(per estensioni si intende qualsiasi cosa ci sia dopo il carattere “.”, es: archivio.gz)

La soluzione è questa:

find / | rev | cut -f 1 -d '.' | grep -v / | rev | sort | uniq -c | sort -n

Spiegazione:

find / trova tutto (files e directories) a partire dalla root dir
rev inverte ogni riga dell'output
cut -f 1 -d '.' estrae il primo campo di ogni riga usando il . come separatore
grep -v / eliminazione delle sole directories
rev inverte di nuovo ogni riga dell'output
sort ordina l'output
uniq -c elimina righe duplicate contandole, ora l'output è del tipo 123 gz
sort -n (non necessario) ordina i risultati numericamente

Nota:
Si può evitare il grep -v / usando cut -f 1 -d '.' -s.


Okkio che così trovi anche tutte le cartelle e file nascosti ( del tipo .cartella o .file).
Ho fatto uno script simile al tuo, escludendo cartelle e file nascosti:

find / -type f -name *.* | tr -s '/' ' ' | rev | cut -d ' ' -f 1 | rev | grep -v "^\." | rev | cut -d '.' -f 1 -s | rev | sort | uniq -c

find / -type f -name *.* cerco tutti i file che contengono un punto nel nome del file (i file trovati sono completi di path ad es. /root/prova/file)
tr -s '/' ' ' spazi al posto di /
rev stampo il nome del file al contrario
cut -d ' ' -f 1 estraggo il primo campo (è il nome del file al contrario). In questo modo ho il nome del file senza path
rev ristampo il nome del file "dritto"
grep -v "^\." escludo tutti i file che INIZIANO con un punto (sono quelli nascosti)
rev non lo ripeto più
cut -d '.' -f 1 -s estraggo il primo campo. Così ho l'estensione del file
rev
sort ordino le estensioni in ordine alfabetico, così posso eliminare le ripetizioni con uniq
uniq -c per ogni estensione ho il numero di ripetizioni


Posted by bog86 on 26-09-2007 09:36:

Originally posted by Peach
allora

io creo il mio file con elvis (ad esempio nfile)
poi faccio chmod +x nfile
e se faccio ./ nfile mi dice no such file or directory
ma se faccio . /root/nfile funziona....

Come faccio a sapere la directory in cui sto eseguendo?

Non mi funziona in nessuno modo! con . /root/nfile si impalla, con ./nfile nomi.txt dice no such file or directory...
come si fa allora?? help!!!!!


Posted by Bennyk on 26-09-2007 19:34:

Originally posted by Assochespasso
Okkio che così trovi anche tutte le cartelle e file nascosti ( del tipo .cartella o .file).
Ho fatto uno script simile al tuo, escludendo cartelle e file nascosti:

find / -type f -name *.* | tr -s '/' ' ' | rev | cut -d ' ' -f 1 | rev | grep -v "^\." | rev | cut -d '.' -f 1 -s | rev | sort | uniq -c

...


Si, avevo notato questo side effect ed ho provato con un altro script:

code:
find / | while read i; do basename $i; done | grep -v “^\.” |rev| cut -f 1 -d '.' -s |rev|sort|uniq -c|sort -nr


Ottima la tua soluzione con il triplo rev!

La domanda però, non era limitata ai soli files, ma qualsiasi estensione nel file system, anche eventuali cartelle tipo: cartella.ext (un pò insolito ma non impossibile).
Per questo io non uso -type f.


Posted by bog86 on 27-09-2007 09:14:

Re: domandina

Originally posted by marcolino78
Ciao gente,
piccola domandina???
Durante un esame di lab è stato chiesto di:

copiare una directory mantenendo la struttura delle sottodirectory e i permessi, evitando però di copiare il contenuto delle cartelle(i file che all'interno che non sono directory)

Aiutoooo?!?!?!?!

Idee???


Ma se volessimo copiare anche i file basterebbe un cpdir -pR dir1 dir2???


Posted by banjoo on 27-09-2007 09:38:

Originally posted by bog86
Non mi funziona in nessuno modo! con . /root/nfile si impalla, con ./nfile nomi.txt dice no such file or directory...
come si fa allora?? help!!!!!


Ma il file ha estensione txt???

Allora, se ti sei loggato con root ti trovi di default nella dir /root, quindi tutto il tuo lavoro verràè salvato qui. Esegui:

elvis nomefile, crei lo script, lo salvi ed esci.
Controlla con ls se esiste nella dir.
chmod 755 nomefile
./nomefile

oppure

./nomefile nomesorgente -->se devi usare un file esterno come sorgente dati

nota che tra ./nomefile NON CI SONO SPAZI. ./ ti serve per dirgli di lavorare sulla directory corrente.


Posted by alien on 27-09-2007 11:23:

Scusate l'ignoranza ma non ho seguito lezione di laboratorio,quindi non so dove si trova "aula Palestra di Sistemi Operativi"!
Grazie


Posted by bog86 on 27-09-2007 12:25:

Re: X jeremy.1983

Originally posted by marcolino78
sono andato a vedere la pagina che mi hai indicato e in effetti lo script non è complicato

1) #!/bin/bash
2) NUM=$(cat $1 | wc -l)
3) COUNT=0
4) while [ $NUM -ne $COUNT ]; do
5) COUNT=$(expr $COUNT + 1)
6) adduser $(cat $1 | awk "NR == $COUNT")
7) done

l'unica cosa che non ho capito è il $1, mi spiego meglio:
se per esempio chiamo il mio script NuovoUtente e il file FileUtenti.txt, come faccio a lanciarlo per far si che il cat $1 prenda come parametro il mio file???

forse cosi:
./NuovoUtente FileUtenti.txt

oppure manca qualcosa?
Grazie.


Mi riferisco al funzionamento di questo particolare script; le ho provate tutte (anche a sostituire $1 col nome del file) ma in ogni caso ritorna "no such file or directory" Ma scusate, NESSUNO è riuscito a farlo andare???


Posted by Joey72 on 27-09-2007 12:48:

X Alien

è un'aula di via Comelico...[B]


Posted by alien on 27-09-2007 13:28:

che aula è?????


Posted by =kimi= on 27-09-2007 16:29:

dunque l'ingresso sono quelle scale davanti le scale per entrare in silab, insomma quelle per salire nelle stanze dei prof....
proprio ma proprio appena entri ce una porta che può sembrare quella di uno sgabuzzino.... appena apri c sono delle scale che t portano giu... sei arrivato :-):D


Posted by alien on 27-09-2007 16:42:

Grazie


Posted by jeremy.1983 on 27-09-2007 19:41:

Re: Re: Dimensione totale dei file per utente

Originally posted by Bennyk

Inoltre consiglio vivamente di usare il while, invece del for, per evitare errori di "Out of space" nella command substitution, specialmente in casi tipo: $(find / ...).


Scusa, cosa dovrebbe cambiare tra usare un for e un while?? In teoria fanno la stessa cosa.

Poi ho notato grosse differenze tra le varie immagini minix di qemu che si trovano sul sito del corso: per esempio minix3.qcow di 27MB ha un comportamento diverso rispetto a perEsame.qcow. Qual è quello giusto e soprattutto quale si usa all'esame. (che fra l'altro è domani e colgo l'occasione per un bocca al lupo e culo alla balena generale :-D)


Posted by Bennyk on 27-09-2007 20:11:

Re: Re: Re: Dimensione totale dei file per utente

Originally posted by jeremy.1983
Scusa, cosa dovrebbe cambiare tra usare un for e un while?? In teoria fanno la stessa cosa.

Poi ho notato grosse differenze tra le varie immagini minix di qemu che si trovano sul sito del corso: per esempio minix3.qcow di 27MB ha un comportamento diverso rispetto a perEsame.qcow. Qual è quello giusto e soprattutto quale si usa all'esame. (che fra l'altro è domani e colgo l'occasione per un bocca al lupo e culo alla balena generale :-D)


Si, fanno la stessa cosa appunto, il for di per sè non è un male, ma usato con la command substitution, es: for $(find / ... | command... ) può dare errori di "Out of space", in particolare su lunghi elenchi di files.

L'immagine Minix, usata all'esame, è più completa di quella che si usava in laboratorio ed ha molti più files, comandi, processi etc... di conseguenza anche esercizi che con il for che funzionavano su minix3.qcow danno errori all'esame. Il while non soffre di questo problema.
Provare perEsame.qcow per credere!


Posted by jeremy.1983 on 27-09-2007 20:38:

ma perEsame.qcow è quello che si usa fisicamente all'esame, giusto?

Per me è meglio, io ho praticamente sempre usato solo quello. Però è vero ho notato parecchi errori col for. Adesso provo a riscrivere i miei script col while

Dengh'iu


Posted by Deky on 28-09-2007 10:26:

Sapreste fare questo script:

per ogni utente calcolare il numero dei processi attivi, e dire quello ke ne ha di +, tra tutti gli utenti... e' stato chiesto all'esame mezzoretta fa...


Posted by jeremy.1983 on 28-09-2007 13:52:

E' più o meno quello che han chiesto a me:

Classificare gli utenti in base alla somma delle dimensioni dei loro processi.

Ovviamente mi ha stampato, dire che è un puttanaio è un complimento.
Se poi penso allo script di merda che gli ha chiesto al tipo fianco a me mi sale un nervoso...:evil::evil::evil::evil::evil::evil::evil::evil:

Però è una vergogna, elle e vim impazzano c'è la bash al posto della shell... VERGOGNOSO

Già per i non frequentati ci sono solo praticamente questi tre o quattro thread, che sono già dispersivi, in più ci fanno confondere così...

Non vi dico le bestemmie che son partite dal mio terminale... ma anche del tipo a fianco.

Adesso provo un po' a farlo quell'esercizio. Sto giro si sono imputati parecchio con xargs e grep, se mi viene vi posto la soluzione.

A gennaio... e l'incubo continua


Posted by darkman13 on 28-09-2007 14:19:

Io non so, ma questo esame deve andare veramente di fortuna... Trenttini ti chiede delle cosse allucinanti. mentre Monga meno male ti chiede cosa molto fattibile al max in 2 righe di comandi...
Basta trenttini, sono già 2 volte che mi stampa lui..... grrrrrrrrrrrr


Posted by =kimi= on 28-09-2007 14:53:

dark la prox volta chiedi l'esercizio a monga :D
dai scherzo,però davvero io lo passato a luglio ma solo xkè monga mi ha dato l'esercizio....


Posted by jeremy.1983 on 28-09-2007 15:16:

Originally posted by darkman13
Io non so, ma questo esame deve andare veramente di fortuna... Trenttini ti chiede delle cosse allucinanti. mentre Monga meno male ti chiede cosa molto fattibile al max in 2 righe di comandi...
Basta trenttini, sono già 2 volte che mi stampa lui..... grrrrrrrrrrrr


Non ne sono tanto certo: a me l'esercizio l'ha dato monga.

Cmq monga è certamente più disponibile di trentini. A un certo punto non riuscivo più ad uscire da elle, l'ho chiesto a trentini che mi guarda di sbieco e dice: Non lo conosco elle!! :evil::evil:

Io ho chiesto a monga come si risolveva il mio ex e a grandi linee me l'ha spiegato, facendomi anche vedere lo script sul minix.

Mi sa che per l'errore Out of space andrò da lui a ricevimento per chiederglielo.


Posted by nuvoli on 28-09-2007 18:26:

Presente! Stampato anche io...

Avevo studiato pochissimo (1 giorno lol) perche mi sto preparando piu per lo scritto (superato) e per l'orale, cmq ho voluto provare anche il lab per vedere come e'.

Allora partizionamento veramente semplice, fatto con facilita'.

Monga mi da l'esercizio shell: somma delle dimensione di tutti i file di solo testo (non eseguibili) che contengono al loro interno la parola copyright

Qualcuno sa risolverlo?
Per cercare i file bisogna usare il find per tipo oppure filtrare i file in base ai permessi?

Cmq da notare che elle non funzione bene, si e' impallato e non risponde ai comandi normalmente, ad esempio se si usano le frecce scrive lettere ecc, non cancella con del e cosi via. Ho perso 10 minuti solo a far venire il prof, intanto il tempo pero scorre...


Posted by banjoo on 30-09-2007 13:59:

Re: Re: X jeremy.1983

Originally posted by bog86
Mi riferisco al funzionamento di questo particolare script; le ho provate tutte (anche a sostituire $1 col nome del file) ma in ogni caso ritorna "no such file or directory" Ma scusate, NESSUNO è riuscito a farlo andare???


A me funziona perfettamente...


Posted by plafo on 01-10-2007 09:12:

Originally posted by nuvoli
Presente! Stampato anche io...

Avevo studiato pochissimo (1 giorno lol) perche mi sto preparando piu per lo scritto (superato) e per l'orale, cmq ho voluto provare anche il lab per vedere come e'.

Allora partizionamento veramente semplice, fatto con facilita'.

Monga mi da l'esercizio shell: somma delle dimensione di tutti i file di solo testo (non eseguibili) che contengono al loro interno la parola copyright

Qualcuno sa risolverlo?
Per cercare i file bisogna usare il find per tipo oppure filtrare i file in base ai permessi?

Cmq da notare che elle non funzione bene, si e' impallato e non risponde ai comandi normalmente, ad esempio se si usano le frecce scrive lettere ecc, non cancella con del e cosi via. Ho perso 10 minuti solo a far venire il prof, intanto il tempo pero scorre...




avevo più o meno il tuo stesso esercizio....
sono partito facendo:
find / -type f | xargs grep -l "copyright"

non ho capito perchè sul pc di casa funziona mentre in laboratorio mi dava un errore sulla grep, il messaggio preciso non me lo ricordo ma sembrava quasi che gli passassi una stringa troppo lunga e che la grep non riuscisse a processarla....
qualcuno sa dirmi un motivo per cui a casa funzionava e in lab no????


Posted by Fenix on 02-10-2007 14:30:

A me il Trentini ha kiesto: "per ogni utente trovare la dimensione totale di tutti i processi attivi"
Qualcuno lo sa fare?
ma sopratutto per "attivi" cosa intende? è inutile chiedere al lui perke tanto non ti risponde.. anzi quando gli ho kiesto cosa avevo sbagliato dell'esercizio mi ha detto di guardarlo a casa.. -.-


Posted by imperator on 04-10-2007 10:19:

Originally posted by Fenix
A me il Trentini ha kiesto: "per ogni utente trovare la dimensione totale di tutti i processi attivi"


credo intenda semplicemente i processi in memoria...


#!/bin/sh

sum=0

for user in $(cat /etc/passwd | cut -d : -f 3 | uniq); do
for proc in $(ps -axl | tr -s " " : | cur -d : -f 4,8 | grep -v "SZ"); do
uid=$(echo "$proc" | cut -d : -f 1)
size=$(echo "proc" | cut -d -f 2)

if [ $user -eq $uid ]; then
sum=$(expr $sum + $size)
fi
done

echo "l'utente $user occupa $sum KB"
sum=0
done


Posted by bill76 on 02-01-2008 11:48:

Scusate avrei 2 domande?

1) Bisogna avere un account valido per accedere alle macchiene di laboratorio?
2) Durante l'esame è possbile utilizzare il manuanali (comando man)?

Grz mille.

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by plafo on 07-01-2008 11:59:

Originally posted by bill76
Scusate avrei 2 domande?

1) Bisogna avere un account valido per accedere alle macchiene di laboratorio?
2) Durante l'esame è possbile utilizzare il manuanali (comando man)?

Grz mille.




1) no ti fanno loggare loro
2) si puoi usarlo


Posted by alien on 24-01-2008 10:54:

problema!
Non riesco a fare eseguibile un file!
è giusto chmod +x <nome_script>
Syntax Error: Newline unexpected

Ho controilato e ricontrolato il codice dello script ma niente da fare!
Mi succede su tutti i script che scrivo!
Aiutooooo....


Posted by alien on 24-01-2008 12:24:

Risolto grazie!!!!


Posted by Babbuzzo on 24-01-2008 13:09:

Originally posted by nuvoli
Monga mi da l'esercizio shell: somma delle dimensione di tutti i file di solo testo (non eseguibili) che contengono al loro interno la parola copyright

Qualcuno sa risolverlo?
Per cercare i file bisogna usare il find per tipo oppure filtrare i file in base ai permessi?


Per trovare ogni singolo file di testo che contiene la parola "copyright" basta fare:

find / -type f | xargs grep -l "copyright" | grep "\.txt$"

Per trovare la somma delle occupazioni di questi file, invece, su due piedi credo bisogna fare un piccolo script.
Stasera vedo meglio.:razz:

__________________
Tommy: signor o'neill...
Micky: cazzo parli? kama micky
Tommy:come va?
Micky: beh dazza ci pai ma cavalli, sai...[...] porcocul! cicco zisiloi! sei grosso! hey babbuzzi:pazo grosso!


Posted by mjfan80 on 24-01-2008 20:54:

Originally posted by n3o

[*]Trovare tutti i files eseguibili > 5k e evidenziando i 5 più grandi
Questo mi ha fatto davvero dannare l'anima...per me un file è eseguibile se lo è per tutti gli utenti (altrimenti le combinazioni possibili sono troppe!)
find / -type f | xargs ls -l | grep "^...x..x..x" | tr -s ' ' ' ' | cut -d ' ' -f 5,9 | sort -nr | head -5


io l'ho risolto così, penso sia corretto

find / -type f -size +10 | xargs ls -l | grep "^...x..x..x" | sort +4 -n | tail -5

che ne dite?

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bullet on 25-01-2008 13:02:

ma se devo cercare i file + grandi di 5k +piccoli di 100k non devo fare
find / -type f -size +10 -a -size -200
invece di :
find / -type f -size +5 -a -size -100
??

sul wiki alla domanda c'è scritto :
quanti file sono piu' grandi di 100k in /home ?
find /home -type f -size +200 | wc


Posted by mjfan80 on 25-01-2008 13:28:

Originally posted by bullet
ma se devo cercare i file + grandi di 5k +piccoli di 100k non devo fare
find / -type f -size +10 -a -size -200
invece di :
find / -type f -size +5 -a -size -100
??


sì, è così, hai ragione
find da il risultato in blocchi, qunidi 512 byte (mezzo k)

quello è un errore che non è stato corretto in alcune soluzioni proposte, ma riconosciuto dagli stessi autori

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bullet on 25-01-2008 14:30:

Originally posted by mjfan80
io l'ho risolto così, penso sia corretto

find / -type f -size +10 | xargs ls -l | grep "^...x..x..x" | sort +4 -n | tail -5

che ne dite?


io ho capito questo : i file eseguibili hanno i permessi tutti a 1
quindi io ho fatto:

find / -perm 111 -a -size +10 |xargs du| sort |tail -n -5

cosa ne pensate??


Posted by mjfan80 on 25-01-2008 14:49:

la parte dei permessi l'avevo scritta prima di leggere gli altri interventi
anche se, se non ho capito male, bisogna scrivere -perm -111
con il meno

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bullet on 25-01-2008 17:30:

-Copiare i file da una directory all'altra senza cambiare i permessi:

cp /directory/albero1/* /directory/albero2

bisogna aggiungere anche -p altrimenti i permessi cambiano...

mi potete spiegare bene cosa sono directory e albero cioè directory lo so es: /root oppure /bin ma per albero cosa intendete??

mi fate un esempio pratico...
grazie
ciao ciao


Posted by Babbuzzo on 26-01-2008 18:35:

Somma delle dimensione di tutti i file di solo testo (non eseguibili) che contengono al loro interno la parola copyright

Ecco lo script:

code:
#!/bin/sh SOMMA=0 for VAR in $(find / -type f | xargs grep -l "copyright" | grep "\.txt$" | xargs du | cut -f 1); do SOMMA=$(expr $VAR + $SOMMA) done echo $SOMMA


E' senza rifiniture, ridotto all'osso :p


io l'ho risolto così, penso sia corretto

find / -type f -size +10 | xargs ls -l | grep "^...x..x..x" | sort +4 -n | tail -5

che ne dite?

E' corretto, e c'è anche una soluzione alternativa, per chi preferisce:

code:
find / -type f -size +10 | xargs ls -lF | grep "\*$" | tr -s ' ' ' ' | cut -d ' ' -f 5,9 | sort -n | tail -5

Laddove
xargs -lF per ogni riga del find mette alla fine un * se il file è eseguibile
grep "\*$" prende solo i file che hanno * alla fine

__________________
Tommy: signor o'neill...
Micky: cazzo parli? kama micky
Tommy:come va?
Micky: beh dazza ci pai ma cavalli, sai...[...] porcocul! cicco zisiloi! sei grosso! hey babbuzzi:pazo grosso!


Posted by mjfan80 on 26-01-2008 20:09:

stavo provando a migliorare uno degli spript proposti, per esercizio

ma non riesco a fare una cosuccia

come faccio ad estrarre da un risultato ls -l (in un ciclo for, quindi con un sola "riga" per volta" la 5 e la 9 colonna? (dimensione e nome file)?

con un cut -f 5,9 non funziona
il delimitatore non dovrebbe essere di default la tabulazione? se non è, come faccio a settarlo

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by mjfan80 on 26-01-2008 22:07:

Originally posted by Assochespasso
Okkio che così trovi anche tutte le cartelle e file nascosti ( del tipo .cartella o .file).
Ho fatto uno script simile al tuo, escludendo cartelle e file nascosti:

find / -type f -name *.* | tr -s '/' ' ' | rev | cut -d ' ' -f 1 | rev | grep -v "^\." | rev | cut -d '.' -f 1 -s | rev | sort | uniq -c

find / -type f -name *.* cerco tutti i file che contengono un punto nel nome del file (i file trovati sono completi di path ad es. /root/prova/file)
tr -s '/' ' ' spazi al posto di /
rev stampo il nome del file al contrario
cut -d ' ' -f 1 estraggo il primo campo (è il nome del file al contrario). In questo modo ho il nome del file senza path
rev ristampo il nome del file "dritto"
grep -v "^\." escludo tutti i file che INIZIANO con un punto (sono quelli nascosti)
rev non lo ripeto più
cut -d '.' -f 1 -s estraggo il primo campo. Così ho l'estensione del file
rev
sort ordino le estensioni in ordine alfabetico, così posso eliminare le ripetizioni con uniq
uniq -c per ogni estensione ho il numero di ripetizioni



forse è già stato detto... ma rev in minix non mi pare che ci sia
sbaglio?

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by Babbuzzo on 27-01-2008 00:27:

Originally posted by mjfan80
stavo provando a migliorare uno degli spript proposti, per esercizio

ma non riesco a fare una cosuccia

come faccio ad estrarre da un risultato ls -l (in un ciclo for, quindi con un sola "riga" per volta" la 5 e la 9 colonna? (dimensione e nome file)?

con un cut -f 5,9 non funziona
il delimitatore non dovrebbe essere di default la tabulazione? se non è, come faccio a settarlo


Con
tr -s ' ' ' ' dimensioni bene i delimitatori, questo comando ti unisce più spazi in uno solo, formattando bene la riga;
poi con cut -d ' ' -f 5,9 prendi i campi che ti servono

Il comando rev esiste in Minix :p

__________________
Tommy: signor o'neill...
Micky: cazzo parli? kama micky
Tommy:come va?
Micky: beh dazza ci pai ma cavalli, sai...[...] porcocul! cicco zisiloi! sei grosso! hey babbuzzi:pazo grosso!


Posted by mjfan80 on 27-01-2008 08:30:

Originally posted by Babbuzzo

Il comando rev esiste in Minix :p [/B]


con man rev non succede nulla
e nemmeno cercando sul sito di minix tra le man

http://www.minix3.org/manpages/

rev non esiste

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by mjfan80 on 27-01-2008 09:21:

oddio
sono in panico
stamane provo a fare alcuni esercizi già fatti in passato....
ho minix con l'immagini "perEsame.cqow"

faccio questo esercizio

Archiviare tutti i file che contengono la parola "login"

find / -type f | xargs grep -l "login" | xargs tar -cvf archivio.tar

ma mi da errore (che prima non mi dava)
grep: line too long - truncated

Che significa?

provo ad eliminare la parte di archiviazione, qundi
find / -type f | xargs grep -l "login"
trova e stampa a schermo 5 righe e poi riparte con l'errore

perchè prima non mi dava questo errore?
cosa dovrei fare?

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bill76 on 27-01-2008 10:59:

Originally posted by mjfan80
oddio
sono in panico
stamane provo a fare alcuni esercizi già fatti in passato....
ho minix con l'immagini "perEsame.cqow"

faccio questo esercizio

Archiviare tutti i file che contengono la parola "login"

find / -type f | xargs grep -l "login" | xargs tar -cvf archivio.tar

ma mi da errore (che prima non mi dava)
grep: line too long - truncated

Che significa?

provo ad eliminare la parte di archiviazione, qundi
find / -type f | xargs grep -l "login"
trova e stampa a schermo 5 righe e poi riparte con l'errore

perchè prima non mi dava questo errore?
cosa dovrei fare?


Io l'ho fatto senza problemi.
1) Prova bene a ricontrollare bene il comando e gli spazi
2) Prova a ricreare il disco virtuale etc etc
3) Don' t Panic

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by mjfan80 on 27-01-2008 13:21:

Copiare tutti i file da una cartella ad una nuova mantenendo inalterati gli attributi prevede anche di prendere file che iniziano per una lettera specifica e di copiare anche tutto il path dei file nella nuova cartella

Originally posted by n3o
Sappi che (ovviamente) in Linux la cosa è mooooooolto semplice [B]cp -p --parents * dir
In Minix non ho trovato qualcosa del genere...mi sono inventato uno script:
code:
0) #!/bin/sh 1) NEWPATH="/dir2" 2) for SUBDIR in $(pwd | tr '/' ' '); do 3) mkdir ${NEWPATH}/${SUBDIR} 4) NEWPATH=${NEWPATH}/${SUBDIR} 5) done 6) for FILE in $(ls); do 7) cp -p ${FILE} ${NEWPATH}/${FILE} 8) done


la soluzione proposta in realtà, mi pare, non tenga conto dio "i file che iniziano con una certa lettera"

inoltre non credo servano le {} nell'uso delle variabili, sbaglio?

ho rifatto lo script, testato, pare funzionare

code:
#!/bin/sh #uso <nomesctipt> directory_destinazione lettera DESTINAZIONE=$1 LETTERA=$2 for SUBDIR in $(pwd | tr '/' ' '); do mkdir $DESTINAZIONE/$SUBDIR echo "mkdir $DESTINAZIONE/$SUBDIR" DESTINAZIONE=$DESTINAZIONE/$SUBDIR echo "DESTINAZIONE=$DESTINAZIONE" done for FILE in $(ls | grep "^$LETTERA"); do cp $FILE $DESTINAZIONE echo "cp $FILE $DESTINAZIONE" done


ovviamente gli echo servono solo per far vedere a schermo che succede

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by mjfan80 on 27-01-2008 13:47:

Originally posted by bill76
Io l'ho fatto senza problemi.
1) Prova bene a ricontrollare bene il comando e gli spazi
2) Prova a ricreare il disco virtuale etc etc
3) Don' t Panic



allora
fino a due giorni fa mi andava il comando... perchè sino a ieri usavo l'immagini minix3.qcow

da ieri ho iniziato ad usare perEsame.qcow, perchè mi pareva di aver letto qui che all'esame ci si trova esattamente quella

rifatto ora
con minix3.qcow non ho problemi
con perEsame.qcow invece crea quel problema


perchè? ci sono magari nome file troppo lunghi in perEsame.qcow?
e indipendetnemente dal perchè, se è davvero cio che ci troviamo all'esame, come facciamo ad usare il grep?
non crea sempre problemi, con alcuni funziona (tipo il mio script di prima, che cerca solo in determinate directory e poi fa il grep)
ma se dobbiamo fare un grep su tutti i file che si fa???

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by jeremy.1983 on 27-01-2008 16:46:

In realtà neanche perEsame.qcow è la versione che ci sarà all'esame.

Non so quale usino, non l'hanno messa sul sito, non corrisponde a nessuna.

Vi consiglio di imparare ad usare bene elvis, perchè vim ed elle hanno comportamenti diversi, praticamente sono inutilizzabili e i prof di certo non ti aiutano.


Posted by mjfan80 on 27-01-2008 17:42:

io di solito uso mined, non dovrebbe essere il "predefinito" di minex3?
cmq imparerò anche elvis, che palle

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by plafo on 27-01-2008 18:32:

Originally posted by mjfan80
allora
fino a due giorni fa mi andava il comando... perchè sino a ieri usavo l'immagini minix3.qcow

da ieri ho iniziato ad usare perEsame.qcow, perchè mi pareva di aver letto qui che all'esame ci si trova esattamente quella

rifatto ora
con minix3.qcow non ho problemi
con perEsame.qcow invece crea quel problema


perchè? ci sono magari nome file troppo lunghi in perEsame.qcow?
e indipendetnemente dal perchè, se è davvero cio che ci troviamo all'esame, come facciamo ad usare il grep?
non crea sempre problemi, con alcuni funziona (tipo il mio script di prima, che cerca solo in determinate directory e poi fa il grep)
ma se dobbiamo fare un grep su tutti i file che si fa???




non so quale sia quella che si usa all'esame ma il tuo stesso problema l'ho avuto durante l'esame!!!!
avevo un esercizio simile al tuo dove dovevo cercare la parola copyright all'interno dei file e mi ha dato lo stesso errore che hai segnalato mentre a casa funzionava. Ora provo anch'io a scaricare perEsame.qcow e vediamo che viene fuori.

Domanda:

-calcolare la somma della dimensione dei file eseguibili che hanno all'interno la parola copyright non sensitive.

Come faccio ad effettuare una ricerca in modo non sensitive oppure al contrario sensitive?



Grazie


Posted by mjfan80 on 27-01-2008 18:50:

dopo provo a fare quell'esercizio e ti dico

cmq con il grep senza l'opzione -i dovrebbe essere CASE SENSITIVE
quindi se tu fai grep -i "copyright" dovresti fare la ricerca in maniera non case sensitive come richiesto

ma all'esame potremo usare mined?
io fino ad ora ho usato quello

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by plafo on 27-01-2008 18:59:

Originally posted by mjfan80
dopo provo a fare quell'esercizio e ti dico

cmq con il grep senza l'opzione -i dovrebbe essere CASE SENSITIVE
quindi se tu fai grep -i "copyright" dovresti fare la ricerca in maniera non case sensitive come richiesto

ma all'esame potremo usare mined?
io fino ad ora ho usato quello




ok grazie
io ho provato lab solo a settembre e si usava elvis....
ho provato con perEsame.qcow e mi da lo stesso errore!
esistono soluzioni alternative????


Posted by bill76 on 27-01-2008 19:00:

Originally posted by plafo
non so quale sia quella che si usa all'esame ma il tuo stesso problema l'ho avuto durante l'esame!!!!
avevo un esercizio simile al tuo dove dovevo cercare la parola copyright all'interno dei file e mi ha dato lo stesso errore che hai segnalato mentre a casa funzionava. Ora provo anch'io a scaricare perEsame.qcow e vediamo che viene fuori.

Domanda:

-calcolare la somma della dimensione dei file eseguibili che hanno all'interno la parola copyright non sensitive.

Come faccio ad effettuare una ricerca in modo non sensitive oppure al contrario sensitive?



Grazie


Scusate come faccio a sapere se un file è eseguibile?
Lo cerco in /bin ?
Grazie mille

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by mjfan80 on 27-01-2008 19:38:

per ecercare un eseguibile (però è stato detto più volte) fai così

code:
find / -type f | xargs ls -lF | tr -s ' ' ' ' | cut -d ' ' -f 5,9 | grep "\*$"


dove ls -F mette in fondo al nome del file alcuni simboli... mette un * se è eseguibile
qunidi con tr ' ' ' ' comprimo tutti gli spazi
con cut, con delimitatore lo spazio (-d ' ') selezioni i csmapi 5 e 9 (PID e SIZE) e poi estraggo le linee che hanno * alla fine (devo mette \ davanti a * per farlo interpretare bene... e il $ significa "cerca in fondo alla riga"

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by Babbuzzo on 27-01-2008 20:18:

Originally posted by mjfan80
con man rev non succede nulla
e nemmeno cercando sul sito di minix tra le man

http://www.minix3.org/manpages/

rev non esiste


Esiste

Non c'è un manuale del rev, per questo è nella documentazione del sito di laboratorio.

1 - LINK
2 - ESEMPIO

__________________
Tommy: signor o'neill...
Micky: cazzo parli? kama micky
Tommy:come va?
Micky: beh dazza ci pai ma cavalli, sai...[...] porcocul! cicco zisiloi! sei grosso! hey babbuzzi:pazo grosso!


Posted by mjfan80 on 27-01-2008 20:26:

Originally posted by plafo

Domanda:

-calcolare la somma della dimensione dei file eseguibili che hanno all'interno la parola copyright non sensitive.

Grazie


ho provato questa soluzione
sembra funzionare, correggetela se vedete errori

code:
1 #!/bin/sh 2 for ESEG in $(find / -type f | xargs ls -lF | tr -s ' ' : | cut -d : -f 5,9 | grep "\*$"); do 3 PROG=$(echo $ESEG | cut -d : -f 2) 4 SIZE=$(echo $ESEG | cut -d : -f 1) 5 if grep -is copyright $PROC: then 6 SUM=$(exec $SUM + SIZE) 7 fi 8 done 9 echo "somma degli eseguibili con l'occorrenza di parola copyright = $SUM KB"


2: qui è bella lunga... come detto prima ls -F mette in fondo al nome del file una * se è eseguibile
2: tr -s ' ' : sostituisce gli spazio con i :
2: cut... l'opzione -d sceglie il delimitatore (i due punti) e -f scegli i campi 5 e 9 (size e nome file)
2: con il grep cerchi le occorrenze degli * nelle righe, con $ gli dici "inj fondo alla riga", * deve essere messo dopo una \ per essere correttamente interpretato
3: metto in PROG la seconda parte della riga appena trovata, quindi il nome file
4: stessa cosa ma con il size
5: cerco in ogni processo l'occorrenza della parola copyright... questo è particolare, perchè if, se non ho capito male, fa l'operazione dopo il then se lo stato dell'istruzione dopo l'if restituisce 0 (che in linux significa successo)... grep resituisce 0 se trova l'occorrenza... quindi questo comando "grep copyright file" da zero se in file c'è un'occorrenza della stringa copyright.... l'opzione -i dice "NON CASE SENSITIVE", l'opzione -s sopprime l'outpus... ci interessa solo lo stato della funzione non l'output
6: se trovga occorrenza fa la somma

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by plafo on 28-01-2008 08:52:

for vs while

leggendo nelle pagine precedenti di problemi con l'utilizzo di for (in caso di ciclo su tanti file può andare in out of space) ho provato a "convertire" i vari script fatti introducendo while ma non mi è molto chiaro il funzionamento:
ad esempio....

for FILE in $(find / -type f -size +10 | xargs du -s); do
echo $FILE
done



come potrebbe essere tradotto utilizzando il while????



grazie


Posted by mjfan80 on 28-01-2008 19:20:

Originally posted by Assochespasso
Okkio che così trovi anche tutte le cartelle e file nascosti ( del tipo .cartella o .file).
Ho fatto uno script simile al tuo, escludendo cartelle e file nascosti:

find / -type f -name *.* | tr -s '/' ' ' | rev | cut -d ' ' -f 1 | rev | grep -v "^\." | rev | cut -d '.' -f 1 -s | rev | sort | uniq -c

find / -type f -name *.* cerco tutti i file che contengono un punto nel nome del file (i file trovati sono completi di path ad es. /root/prova/file)
tr -s '/' ' ' spazi al posto di /
rev stampo il nome del file al contrario
cut -d ' ' -f 1 estraggo il primo campo (è il nome del file al contrario). In questo modo ho il nome del file senza path
rev ristampo il nome del file "dritto"
grep -v "^\." escludo tutti i file che INIZIANO con un punto (sono quelli nascosti)
rev non lo ripeto più
cut -d '.' -f 1 -s estraggo il primo campo. Così ho l'estensione del file
rev
sort ordino le estensioni in ordine alfabetico, così posso eliminare le ripetizioni con uniq
uniq -c per ogni estensione ho il numero di ripetizioni



io ho provato a rifarlo un pochino
non capisco l'utilità di mettere il -name -name *.*, secondo me è meglio farlo dopo... bho forse si capisce meglio
cmq l'ho riscritto così, con uno script, in modo che stampi alla fine anche il numero di estensioni (quella linea di codice dice il numero di file per ogni estensione, non il numero di estensioni

code:
#!/bin/sh find / -type f | rev | cut -d / -f 1 | rev | grep -v "^\." | grep "\." | rev | cut -d '.' -f 1 | sort | uniq –c >> temp.txt echo "queste sono le estensioni del sistema e il numero di file ad esse associate:" cat temp.txt echo "nel sistema ci sono $(wc -l temp.txt | tr - s ' ' : | grep -d : -f 2) estensioni" rm temp.txt

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by Liumberg on 29-01-2008 05:56:

scusate la mia ignoranza..

perchè mai un ciclo for semplicissimo tipo:

for ((I=0; I<10; I++));do
echo "ciao"
done

da il seguente errore:
Syntax error: Bad for loop variable

forse perchè uso sh e non bash?
minix all'esame cosa ha?sh o bash?

grazie


Posted by mjfan80 on 29-01-2008 07:32:

perchè il for non si fa così, che io sappia

ma for i in lista
do

done

ho detto una cazzata, scusate
con (( )) si può usare anche una sintassi così proposta

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bullet on 29-01-2008 09:12:

Ciao A Tutti...

C'è qualche bravissima simpaticissima intelligentissima persona che mi puo spigare bene come si fa ad aggiungere 10 utenti da file.

il file che viene passato contiene solo nomi oppure è della forma di etc/passwd ??

i dati passati oltre a modificare etc/passwd , dove mettono la password ? in etc/shadow?

perchè se apro etc/shadow con elle oppure elvis non c'è dentro nulla?

vi sarei immensamente grato se mi rispondete....

GRazie mille a tutti cmq per questo thread..
ciao ciao


Posted by mjfan80 on 29-01-2008 09:17:

lo script è ben proposto qualche post indietro
il file contiene questo

nomeutente gruppo directory home

esattamente quello che va passato a "adduser", che fa tutto lui, cioè aggiorna lui sia /etc/passwd sia /etc/shadow
(posto ovviamente che l gruppo esista)

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bullet on 29-01-2008 09:21:

Grazieee mille mi metto al lavoro per provare hiihh


Posted by bill76 on 29-01-2008 20:08:

Qualcuno può postare le domende di laboratorio fatte a Settembre?

Grazie mille

__________________
Poca osservazione e molto ragionamento portano all’errore,
molta osservazione e poco ragionamento conducono alla verità


Posted by mjfan80 on 29-01-2008 21:21:

ho provato a fgare l'esercizio di
"per ogni utente trova l'occupazione in memoria" usando il while al posto del for, per il find

ma non mi va, o meglio, va, ma l'output no

code:
#!/bin/sh for UID in $(cut /etc/passwd -d : -f 3); do echo "sto calcolando lo spazio per l'utente $UID" SUM=0 find / -type f -user $UID | while read FILE; do echo "file = $FILE" SIZE=$(ls -l $FILE | tr -s ' ' ' ' | cut -d ' ' -f 5) echo "SIZE=$SIZE" SUM=$(expr $SUM + $SIZE) echo "sum = $SUM" done echo "l'utente $UID occupa in totale $SUM Kb" echo "size = $SIZE sum= $SUM" done



escludendo che il SIZE era più facile trovarlo con du
ma come mai l'esecuzione logica va (infatti mi elenca ogni utente, ogni file dell'utente e mano a mano vedo il sum aumentare) ma poi alla fine mi stampa
SUM = 0 SIZE = (non stampa nulla)
come se il while fosse una funzione, che ha variabili interne

perchè???

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by Liumberg on 30-01-2008 07:49:

scusate..
sto cercando di risolvere il problema "out of space" dei cicli FOR
usando while,il problema è che il sistema sembra dimenticare il contenuto delle variabili che vengono usate appena si esce da ciclo

nel seguente script (calcola lo spazio occupato dall'utente root) il valore della variabile TEMP alla fine è sempre 0.


TEMP=0
find ./ -type f -user root|xargs du|cut -f 1|while read FILE
do
TEMP='expr $TEMP \+ $FILE'
done
echo "occupazione utente root : $TEMP"

qualcuno sa aiutarmi?
ho paura che domani mi prendo una denuncia per aggressione..


Posted by Liumberg on 30-01-2008 07:50:

mi sono appena accorto che non sono il solo ad avere questo problema


Posted by mjfan80 on 30-01-2008 08:42:

infatti, stesso problema, ho provato a sostiruire i cicli for con i while
loro funzionano... quelli che non devono "restituire" parametri vanno (come quello per aggiungere utenti)
e all'interno del ciclo i calcli funzionano (se vedi io prima con degli echo di controllo li faccio stampare a schermo, se li provi, vedi che alla fine dei cicli while, i valori sarebbero corretti
ma fuori dal ciclo... bhum, scompaiono

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by plafo on 30-01-2008 09:18:

anch'io ho lo stesso problema e sto cercando una soluzione! :?


Posted by bullet on 30-01-2008 12:40:

mi aggrego al vostro problema...

Non è che bisogna usare in qualche modo particolare expr ??

ovvero : io expr l'ho visto usare :

SUM=$(expr $i+$c)
oppure
SUM='expr $i+$c'
oppure
SUM=[expr ${i}+${c}]
.
.
.

sono modi diversi per fare la stessa cosa oppure hanno un significato preciso??

grazie e ciaooo


Posted by mjfan80 on 30-01-2008 12:50:

no bullet
expr va, se fai girare il mio script te ne accorgi, la somma funziona, e stampa ogni volta una somma incrementale, quindi funziona... soloc eh fuori dal while torna a valere zero

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by bullet on 30-01-2008 13:02:

Come a me...Stessa cosa ... è come se le inizializza a zero quando finisce il ciclo...ke nervossoooooo....


Posted by bullet on 30-01-2008 13:20:

ho scoperto una cosa :

sto facendo lo script per trovare per ogni utente l'ocupazione in kb

#!/bin/sh
SUM=0
(cat /etc/passwd | cut -d : -f 3 |sort -n |uniq) |wile read id ;do
(find / -type f -user $id | xargs du | cut -f 1) | while read Sz ; do

SUM=$(expr $SUM + $ Sz)

done

echo " user $id spazio :$Sz"
done


ho scoperto questo: se cambio il valore a cui inizializzo SUM cambia pure il valore di uscita dal while ovvere mette il valore ke uso per inizializzare.

ho scritto a monga peravere dei chiarimenti sul while...

se scoprite qualcosa scriveteeeeee...


Posted by bullet on 30-01-2008 13:21:

nell'echo non $Sz ma $SUM


Posted by zonker on 30-01-2008 13:25:

Originally posted by Liumberg
scusate..
sto cercando di risolvere il problema "out of space" dei cicli FOR
usando while,il problema è che il sistema sembra dimenticare il contenuto delle variabili che vengono usate appena si esce da ciclo

nel seguente script (calcola lo spazio occupato dall'utente root) il valore della variabile TEMP alla fine è sempre 0.


TEMP=0
find ./ -type f -user root|xargs du|cut -f 1|while read FILE
do
TEMP='expr $TEMP \+ $FILE'
done
echo "occupazione utente root : $TEMP"

qualcuno sa aiutarmi?
ho paura che domani mi prendo una denuncia per aggressione..


Io ho fatto così:

#!/bin/sh
dimensione=0
somma=0
for dimensione in $(find / -type f -user 0 -exec ls -s {} \; | cut -f 1 -d " ");
do
somma=$(expr $somma + $dimensione)
done;
echo La somma dei file di root è: $somma


Posted by bullet on 30-01-2008 13:28:

Anche a me funziona tutto se uso il for
ma alle volte il for ti può dare problemi di out of space che il while nn da.... misteri di minix


Posted by zonker on 30-01-2008 14:19:

il problema è la localizzazione delle variabili.
la variabile TEMP esterna al ciclo di while non è la stessa TEMP all'interno del ciclo.
Infatti se metti una echo nel ciclo il TEMP viene valorizzato correttamente.
Si può, non molto elegantemente, risolver usando il filesystem così:


#!/bin/sh
somma=0
find / -type f -user 0 -exec ls -s {} \; | cut -f 1 -d " "|while read FILE
do
somma=$(expr $somma + $FILE)
echo $somma > ./tmp
done;
somma=$(cat ./tmp)
rm ./tmp
echo La somma dei file di root è: $somma


Posted by bullet on 30-01-2008 14:50:

quindi quando uso il while e modifico una variabile dichiarata all'esterno di esso il valore modificato vale solo all'interno del while
giusto??

Grazie
ciaoo ciao


Posted by zonker on 30-01-2008 14:51:

esatto.


Posted by mjfan80 on 30-01-2008 14:54:

ma come mai il while si comporta quasi come se fosse una funzione (quindi con le proprie variabili interne?
se non arrivavi tu a dircelo, di questo comportamento (avremmo potutto capirlo e quindi usar comunque il file, ma insomma) dovre avremmo dovuto impararlo?
è così con linux normalmente o solo minix?
mi sa che prima proverò con i for e se creano problemi faro questi while + file
(un po' la soluzione che avevo usato in uno script un po' indietro)

domanda forse stupida, perchè il file è ./temp e non semplicemente temp?

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by jeremy.1983 on 30-01-2008 14:55:

Originally posted by zonker
[...]
#!/bin/sh
somma=0
find / -type f -user 0 -exec ls -s {} \; | cut -f 1 -d " "|while read FILE
do
somma=$(expr $somma + $FILE)
echo $somma > ./tmp
done;
somma=$(cat ./tmp)
rm ./tmp
echo La somma dei file di root è: $somma


Il tuo script funziona se gli utenti hanno dei file.

Ci sono utenti (come 9998 o 9999) che non hanno file nel sistema, l'output per loro dovrebbe essere 0 ma non entrando mai nel while non si genera la variabile temporale incappando nel No such file or directory.

Comunque mi pare sia l'unica soluzione, per cui penso che farò così domani, se mi capiterà una roba del genere


Posted by zonker on 30-01-2008 15:05:

Non so dirti se sia un comportamento solo di Minix o anche di Linux ne se sia mai stato trattato l'argomento a lezione (ho smesso di seguire Trentini dopo la seconda lezione), ci sono arrivato per deduzione. Credo che più che per un discorso di localizzazione del ciclo di while il problema sia più strettamente legato al fatto che il while viene eseguito tramite un pipe e quindi il processo è parallelo a quello in cui viene eseguito lo script.
uso ./tmp anzichè solo tmp perchè lo trovo più corretto ma funziona ugualmente.
Quanto invece al "No such file or directory" per gli utenti che non hanno files lo si risolve molto facilmente inserendo una riga:
echo 0 > ./tmp
tra la riga somma=0 e la riga find ....


Posted by alien on 31-01-2008 12:47:

Grazie a tutti per gli uttilissimi consigli e esercizi di questo thread!


Posted by mjfan80 on 31-01-2008 14:00:

passato, 24
media con il 28 delal parte teoria
un bel 26 e ho finito gli esami

__________________
Heal The World
Just Because You Read It In A Magazine Or You See It On A Tv Scren Don't Make It Factual


Posted by zonker on 31-01-2008 14:04:

Ottimo, passato anche io...30 media con il 28 della teoria direi 29 a meno che Bruschi non volgia regalarmi un punticino. Non ero iscritto al SIFA e non ho potuto verbalizzare.
Come è andato agli altri? Putroppo non vi conosco per nome e non so associare il vostro nick al viso delle persone conosciute questa mattina. Io sono il ragazzo con la giacca da moto in pelle e il casco nero.


Posted by plafo on 31-01-2008 14:25:

io l'ho fatto tra i primi quando era appena arrivato trentini, è andata bene ho preso 24 ma non ho fatto l'ultima parte. verbalizzato e via! :D
grazie a tutti quelli che hanno contribuito a questo fondamentale thread


Posted by Liumberg on 31-01-2008 17:04:

5 ore di attesa..esercizio dato e corretto da Trentini..24.

grazie a tutti voi..senza questo forum non l'avrei mai passato.

p.s. tutte le cose brutte che si dicono su Trentini..sono vere.
p.p.s. complimenti ai docenti per le capacità organizzative non comuni,
a volte mi chiedo se siano stati studenti anche loro.


Posted by Gaugamelek on 31-01-2008 18:42:

nuove domande raccolte oggi:

trovare i 10 file più vecchi del sistema e indicare di chi sono

trovare i 3 utenti con meno file

trovare i 3 utenti con i file più pesanti

trovare la media della grandezza dei file dei 3 utenti coi file più pesanti

Trentini oggi si è sbizzarrito: praticamente ogni esercizio era poi da "far ripetere ogni venerdì alle 17"...è solo da modificare il file /etc/crontab, per vedere la sintassi inutile fare man crontab, voci di corridoio dicono man 5 crontab (che non visualizza il man vero e proprio ma la descrizione del file)

passato con 23 ;)

Monga (e sottolineo MONGA...leggasi NON TRENTINI) non è troppo fiscale sugli script, l'importante è che si dimostri di aver capito le cose e di sapersela cavare coi vari comandi...anche se poi il programma è sbagliato non si viene mandati a casa...

Trentini è tutta un'altra storia ovviamente...


Posted by alien on 31-01-2008 21:47:

Confermo che Monga è stato molto disponibile(avevo dei problemi con il partiozionamento e mi ha fatto rialogare 3 volte)!


Posted by vegeziel on 01-02-2008 00:08:

atrent

Concordo perfettamente!
A me Trentini ha chiesto di fare la media della dimensione dei file per ogni f**tuto utente, mentre, al mio amico che ha sabotato l'elenco degli iscritti, ha chiesto di trovare per ogni f*t*uto utente il processo (NON IL FILE!!!!) più grande a lui appartenente sempre da eseguire tutti i venerdì alle 17.

P.S.: Ragazzi, parliamone...

andate su questo sito e leggete gli hobbies di Trentini....:shock::shock:

www.atrent.it/wiki/doku.php

P.p.s.: pessima organizzazione....


Posted by darkman13 on 01-02-2008 06:40:

Non ne posssoooo piùùùùùùùùùùùùùùùùùùùùùùù.... Basta! Rischio di rifare tutto a giungo un'altra volta


Posted by zonker on 01-02-2008 09:42:

Beh la media dei file può essere più difficile come esercizio, ma il processo più grosso in esecuzione per ogni utente non è così complicato:
fai un ciclo di for su passwd per estrarre la lista degli utenti all'interno del ciclo fai un ps in pipe con grep per trovare i processi dell'utente il tutto in pipe con cut per estrarre la dimensione del processo il tutto in pipe con sort -n per metterli in ordine di dimensione il tutto in pipe con tail -n 1 per estrarre solo il più grande.


Posted by Fenix on 01-02-2008 13:50:

Ragazzi passato anke io finalmente!!! con 21 ma va bene lo stesso! il mio esercizio era: Trovare i 3 utenti con la dimensione dei file piu grande e farlo eseguire ogni domenica alle 18.. ovviamente dato da Trentini.. tralasciando l'ultima parte me la sono cavicchiata nella prima anke se alla fine lo script non era completamente giusto MONGA mi ha detto ke andava bene! e mi ha dato il 21! tremo ancora se penso ke stava venendo trentini a corregermelo!!! Viva Monga :P


Posted by jeremy.1983 on 01-02-2008 15:02:

Stavolta mi è andata di gran lusso, dovevo solo trovare il processo per ogni utente che occupava più spazio in memoria.... Ovviamente Monga:D.

Quelli che dava Trentini erano clamorosi... (visto il blog, ma chi è questo? e soprattutto lo pagano per scrivere queste bestialità?)

Anche se cmq Trentini con me è stato bravo mi ha fatto rilogare 2 volte perchè lo script non funzionava bene anche se concettualmente era giusto.

Da segnalare che è andato in panico quando Monga è andato a farsi un giro e la chicca: "ma come si partiziona in windows?". :?:?

"Ma come NON LO SAI??":D:D:D:D:D

Un grazie anche da parte mia con chi ha collaborato e contribuito ad accrescere questo 3d, praticamente l'unica fonte di studio per i non frequentanti


Posted by darkman13 on 01-02-2008 15:20:

A qualcuno che deve dare ancora il lab interessa, formare un mini gruppo per incontrarci 2/3 volte prima dell'esame per fare un pò di esercizi?


Posted by marcolino78 on 13-02-2008 16:01:

utenti

ciao gente, potete fare lo scriptino per trovare per ogni utente il processo in esecuzione che occupa maggior spazio in memoria???
Ho visto che c'è per la dimensione dei file ma non sono riuscito per i processi.

help.

Grazie.

Soprattutto, qualcuno ha qualche sito o manuale da consigliarmi per esercizi minix?
Grazie ancora.


All times are GMT. The time now is 00:53. Pages (4): « 1 [2] 3 4 »
Show all 571 posts from this thread on one page

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