.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 plafo on 15-02-2008 12:55:

Re: utenti

Originally posted by marcolino78
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.




dai un'occhiata alle prime pagine di questo thread....dovresti trovare tutte le risposte che cerchi :)


Posted by Bloom on 18-02-2008 11:16:

Originally posted by n3o
pensate che in linux quel diavolo di programma per trovare i file eseguibili maggiori di 5k si risolve solo così:

find / -type f -size +5 -perm /111 o
find / -type f -size +5 -perm +111 (per versioni vecchie di find)

FINE!!! Ma il find del minix è uno scandalo :evil:

@NoWhereMan: buona la regexp, ma effettivamente non è da parte dei prof molto corretto farcele usare perchè non sono state spiegate!!!
Io sono convinto che l'esercizio incriminato loro sono convinti si possa fare con il find (ma in Minix non è vero! :evil: )


si puo fare:
find / -type f -perm -111 -size +10


Posted by Bloom on 18-02-2008 11:41:

Originally posted by n3o
@imperator
Quando passwd richiede la password tu scrivila! è NORMALE che non si veda a video :D:D:D

Ottimo, ho modifica anche il mio post per sicurezza.
L'interpretazione dell'esercizio rimane libera, consiglio vivamente di chiedere spiegazioni più particolari al prof all'esame.
Per quanto riguarda tutti i casi di permesso, auguroni!

Ho trovato l'opzione -F di ls che stampa un asterisco dopo il nome di un file se esso è eseguibile !!!!!

Trovare tutti i files eseguibili > 5k e evidenziando i 5 più grandi SOLUZIONI DEFINITIVA TESTATA!

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

Spiegazione:
1) find / -type f -size +10 => trova tutti i file di dimensione > 5KB (-size si riferisce a blocchi da 512 byte)
2) xargs ls -lF => per ogni file (riga del find) stampa le sue info estese mettendo un asterisco in fondo alla riga se esso è eseguibile
3) grep "\*$" => cerca quelle righe che hanno un asterisco (\*) prima della fine della riga ($)
4) tr -s ' ' ' ' => comprimi tutti gli spazi contigui in uno solo
5) cut -d ' ' -f 5,9 => estrai la 5^ e 9^ colonna separate da spazio (dimensione e nome file)
6) sort -n => ordina le righe numericamente (secondo la 1^ colonna per default, in questo caso la dimensione del file)
Ii passaggi 4 e 5 sono fondamentali, se no il sort non funziona bene!
7) tail -5 => estrai solo le ultime 5 righe (i file maggiori nel nostro caso)

Provate ogni singolo paso in successione per capire bene i passaggi e controllate con il man dei vari comandi il significato delle opzioni che ho usato.
Tranquilli, se capite questo capirete ogni altro esercizio!!!


Questo è piu semplice e funzia:
find / -type f -perm -111 -size +10|xargs du |sort -nr| -head -5


Posted by Bloom on 19-02-2008 11:15:

Originally posted by n3o
Ehm, sono riuscito a farlo ma è decisamente complicato...
code:
#!/bin/sh SUM=0 for UID in $(cat /etc/passwd | cut -d : -f 3); do for PROCSIZE in $(ps alx | tr -s ' ' ' ' | cut -d ' ' -f 4,8 | grep "^$UID" | cut -d ' ' -f 2); do SUM=$(expr $SUM + $PROCSIZE) done echo "Utente $UID : $SUM KB di processi in memoria" SUM=0 done

Credo di dovervi delle spiegazioni riguardo alla riga più lunga:
  • ps alx => stampa tutti i processi in formato lungo
  • tr -s ' ' ' ' => comprimo tutti gli spazi contigui in un solo spazio (fondamentale, altrimenti non funziona il cut)
  • cut -d ' ' -f 4,8 => estrai la 4^ e l'8^ colonna (che dopo tr sono separate da un solo spazio) che sono l'UID del proprietario e la dimensione (le ho trovate osservando il comportamento dei comandi precedenti, non c'è un manuale su come farlo!)
  • grep "^$UID" => cerca l'UID interessato a partire dall'inizio della riga (potrebbe confondersi con la dimensione di un processo)
    Ricordo che le colonne ora avranno il formato "0 689" ovvero UID + spazio + SIZE
  • cut -d ' ' -f 2=> Una volta ristretto il campo dell'utente estraggo la sola colonna dei SIZE per poi sommarli tutti
Create un nuovo utente e fate girare lo script con esso, altrimenti tutti i processi compaiono di proprietà di root.
Purtroppo avere riscontri precisi è difficile perchè non si riesce a beccare gli esatti processi in esecuzione durante lo script, quindi fare un controllo con ps alx dopo l'esecuzione non ha molto senso!

Come sempre se qualcuno ha una soluzione più semplice ben venga! (testatela prima!!!)



Guarda, io ho fatto cosi e funziona:
#!/bin/sh

sum=0

for utente in $(cat /etc/passwd| cut -d " " -f 3);do
for proc in $(ps -axl | awk '{print $3,$7}'| grep -l "^$utente"|cut -d " " -f 2); do
sum=$( expr $sum + $proc)
done
echo "utente $utente occupa $sum"
done


Posted by Gehur on 06-05-2008 19:38:

ragazzi ma per passare sto benedetto esame oltra a saper partizionare, bisogna sapere usare bene i comandio find, grep, xargs,exec, tail, cut...o mi sbaglio???


Posted by mjfan80 on 07-05-2008 07:42:

Originally posted by Gehur
ragazzi ma per passare sto benedetto esame oltra a saper partizionare, bisogna sapere usare bene i comandio find, grep, xargs,exec, tail, cut...o mi sbaglio???

non solo quelli, anche se sono sicuramente quelli essenziali
devi saper fare tutti (o quasi) gli esercizi che trovi nel forum

__________________
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 Gehur on 07-05-2008 17:46:

mi metterò sotto allora, visto che parto da zero..


Posted by Gehur on 18-05-2008 12:05:

mi son letto tutto il thred...e posso dire che gli script mi fanno davvero paura...

il comando shell alla fine dovrebbe essere un insieme di 3, 4 funzioni max messe in pipe, ma lo script, cavoli mi sembra un gran casino,ad esempio come faccio a farlo ripete ogni vernerdi??

poi non ho capito bene la storia della bash, il find funziona in maniera diversa rispetto a casa??

un ultima cosa, come faccio a vedere le directory,se uso il comando ls non mi visualizza bin,usr ecc....


Posted by Bloom on 18-05-2008 21:34:

per prima domanda:vai sul file crontab e lo modifichi.
Fai man 5 crontab e ti dice come deve essere editato.
Comunque se vai sulla preparazione degli esami di Trentini c'è un esempio.
Il find funziona in maniera diversa non perche viene usata la bash ma perche tronca le stringhte(troppo lunghe perchè l'immagine usata per l'esame è piu grossa).
La soluzione è di ridirigere tutto su un file.
Ad esempio:
find / -name pippo -type f>prova.txt
cerca tutti i file che si chiamano pippo e salva su prova .txt
se poi ad esempio devi archiviarli fai:
xargs tar xvf $(cat prova.txt) prova.tar.
Così sei sicuro che i path non vengono troncati.

Se intendi sapere directory corrente il comando è pwd


Posted by Gehur on 19-05-2008 11:17:

be grazie per le risposte... + tardi vedo di provare

comunque non trovo che sia il massimo fare l'esame mischiati, alla fine il monga di script non ne parla nemmeno, ci ha fatto fare un paio di esercizi su schell e via..

il trentini invece basa il corso sugli script in pratica(almeno così mi sembra)


Posted by Bloom on 20-05-2008 08:44:

a me Monga ha chiesto sia gli script che esercizi da linea di comando..


Posted by Gehur on 20-05-2008 13:01:

a ok, resta il fatto che in laboratorio di script io non ne ho visti

me li vedrò a casa ovviamente


Posted by Bloom on 22-05-2008 07:32:

Ne fanno pochi nelle prime lezione di laboratorio,comunque sono riuscita a passare laboratorio esercitandomi con gli esercizi proposti qui.
Stai tranquillo che non è così difficile come dicono.
Ciao


Posted by Gehur on 04-06-2008 13:01:

ragazzi come si fa la somma dei file contenuti da 2 utenti oppure di 2 cartelle

e se ho un file con dentro una lista di numeri, come li posso sommare???


Posted by Bloom on 05-06-2008 15:54:


Non ho capito la domanda


Posted by Gehur on 05-06-2008 20:42:

allora volevo sapere come fare operazioni matematiche con i risultati ottenuti da comandi di shell

esempio:

dire quanto occupano i file dell'utente A e dell utente B, cioè trovo tutti i file dell'utente A e quelli dell'utente B, li conto ma come faccio a sommare i 2 risultati??

per la seconda,ad esempio, faccio la ricerca di tutti i file di A con le rispettive dimensioni e redirigo l'output dentro a file
adesso ho un file di testo con la lista delle dimensioni dei file
come posso sommare i numeri presenti all'interno del file??

grazie :D


Posted by Bloom on 06-06-2008 08:05:

metti la somma dell'utente1 in un file,la stessa cosa per l'utente2.
Dopodiche fai una cosa del tipo
SUM=$(expr $(cat utente1) + $(cat utente2))
echo "$SUM"


Per la seconda:
find / -type f -user pippo|xargs ls -l|awk {'print $5'}>prova
con questo comando selezioni solo le dimensioni di tutti i file di pippo e direzioni la lista su prova.
dopo di che con questo script dovresti trovarti la somma dei file
#!/bin/sh
SUM=0
for COUNT in $( cat prova|cut -f 1);do
SUM=$(expr $SUM + $COUNT)
done
echo "la somma e' $SUM"

Prova a vedere


Posted by darkshadow on 06-06-2008 09:23:

Se ho capito bene dici di avere due file del tipo:

file1
2
4
6
8

file2
1
3
5
7

Ma secondo me ti conviene tenere tutto in un unico file; basta che fai l'append mettendo >> invece che >.
Quindi abiamo una cosa del tipo:

file
2
4
6
8
1
3
5
7

A questo punto fai:

code:
sum=0 #valore iniziale #Leggo una riga alla volta finchè non arrivo alla fine; e metto il contenuto della riga in tmp. cat file | while read tmp do sum=$(expr $sum + $tmp) #aggiungo a sum il contenuto di tmp. done echo $sum


Solo che provandolo mi restituisce sum=0 alla fine e non capisco il perchè. Ho fatto la stampa delle somme parziali e le effettua ma quando stampo la somma finale sembra che mi prenda il valore di inizializzazione (0).

__________________
by Ð@rk§h@ÐØw


Posted by Bloom on 06-06-2008 09:28:

Originally posted by darkshadow
Se ho capito bene dici di avere due file del tipo:

file1
2
4
6
8

file2
1
3
5
7

Ma secondo me ti conviene tenere tutto in un unico file; basta che fai l'append mettendo >> invece che >.
Quindi abiamo una cosa del tipo:

file
2
4
6
8
1
3
5
7

A questo punto fai:
code:
sum=0 #valore iniziale #Leggo una riga alla volta finchè non arrivo alla fine; e metto il contenuto della riga in tmp. cat file | while read tmp do sum=$(expr $sum + $tmp) #aggiungo a sum il contenuto di tmp. done echo $sum


Solo che provandolo mi restituisce sum=0 alla fine e non capisco il perchè. Ho fatto la stampa delle somme parziali e le effettua ma quando stampo la somma finale sembra che mi prenda il valore di inizializzazione (0).


Ti restituisce zero perche il while quando esci dal ciclo ti azzera la variabile.
Prova ad rindirizzare il risultato sum su file


Posted by Gehur on 06-06-2008 12:46:

grazie ragazzi proverò al + presto


Posted by Larios on 06-06-2008 14:51:

ma durante la prova cos'è che devi dare a monga le istruzioni che fai o i risultati che ottieni con le operazioni che ti richiede?


Posted by Bloom on 06-06-2008 15:54:

Entrambi


Posted by Larios on 24-06-2008 08:12:

comunque qui ci sono alcuni esercizi che non sono proprio giusti:

- archiviare i files più grandi di 5k e più piccoli di 100k:
find / -type f -size +10 -a -size -200 | xargs tar cvf archivio.tar

la size si setta in blocchi da 512 byte non diretamente in kb...

cercare tutte i file che contengono la parola login:

find / -type f | xargs grep -l "login" | xargs tar -cvf archivio.tar
questo da "grep: line too long - truncated" anche se il comando è corretto :|


Posted by Gehur on 24-06-2008 09:35:

Originally posted by Larios
comunque qui ci sono alcuni esercizi che non sono proprio giusti:

- archiviare i files più grandi di 5k e più piccoli di 100k:
find / -type f -size +10 -a -size -200 | xargs tar cvf archivio.tar

la size si setta in blocchi da 512 byte non diretamente in kb...



nell'esempio del man indica le dimensioni in kb, poi se hai provato personalmente non saprei..


Posted by Amorphis on 25-06-2008 21:22:

Originally posted by darkshadow

A questo punto fai:
code:
sum=0 #valore iniziale #Leggo una riga alla volta finchè non arrivo alla fine; e metto il contenuto della riga in tmp. cat file | while read tmp do sum=$(expr $sum + $tmp) #aggiungo a sum il contenuto di tmp. done echo $sum


Solo che provandolo mi restituisce sum=0 alla fine e non capisco il perchè. Ho fatto la stampa delle somme parziali e le effettua ma quando stampo la somma finale sembra che mi prenda il valore di inizializzazione (0). [/B]


| awk '{i=i+$1} END {print i}'

dovrebbe sommare tutto
es.
find / -type f -user 2 -exec du {} \; | cut -f 1 | awk '{i=i+$1} END {print i}'

la somma di tutti i file dell'utente con UID 2


Posted by pamarcan on 26-06-2008 21:25:

sort su campi diveri

In una lezione di laboratorio di Monga era sorto il problema di ordinare con sort su più campi diversi (numerici, alfanumerici). Penso potrebbe servire per l'esame; l'ho fatto per la shell di Linux quindi è da adattare perchè funzioni in Minix


ps aux |head -n 1 >> finale;
ps aux |sort -dr -k 1|tail -n +2|sort -r > psef;
a=$(cat psef |head -n 1|tr ' ' ' '|cut -d ' ' -f 1);
cat psef > tmp
cat tmp|while read i;
do
cat psef|head -n 1 > riga
t=$(cat riga|tr ' ' ' '|cut -d ' ' -f 1);
if test $t = $a
then
cat riga >> appoggio;
else
cat appoggio|sort -n -k 5 >> finale;
cat riga > appoggio;
fi;
cat psef|tail -n +2 > psef
a=$t;
done
rm appoggio;
cat finale;
rm finale;
rm riga;
rm tmp;
exit 0;


Posted by carla86 on 08-07-2008 14:19:

qualcuno d voi sa come si archiviano i file cn ar? nell'ultima prova d'esame ha chiesto ke invece che archiviare cn tar, archiviare cn ar....


Posted by Fredx on 10-07-2008 13:49:

visto che questo thread mi è stato utile, scrivo anche io le domande che mi sono state fatte:

- shell: trovare i file eseguibili binari (non script shell) presenti sul sistema
- kernel: stampare il pid ogni volta che un processo muore

per quanto riguarda la prima domanda, non sono riuscito all'esame a trovare il modo di capire quali file sono binari e quali no, quindi ho fatto solo il resto e mi ha tolto 2 punti (alla fine ho preso 28 :razz:)

da quanto ho capito molti altri hanno avuto lo stesso problema, e la risposta di trentini è stata "cercate sui manuali, sono fatti apposta!"... ma se uno non sa cosa cercare difficilmente trova qualcosa.
Cmq a casa, avendo internet, in 5 minuti ho trovato il comando giusto che è file.

Il comando file restituisce una cosa del tipo:
nome_file: tipo_file

dove "tipo_file" è una stringa che rappresenta il tipo del file, ad esempio per gli eseguibili restituisce "MINIX 32 bit executable, sep I&D stripped" e per gli script di shell "shell script".
Quindi il comando completo è:

code:
find / -type f -perm -1 | xargs file | grep ' executable' | cut -f 1 -d :


spiegazione
find / -type f -perm -1: trova tutti i file eseguibili a partire dalla root (all'esame io ho usato la soluzione proposta nelle prime pagine: find / -type f | xargs ls -F | grep '\*$', ma trentini mi ha detto che non era molto utile visto che c'è il comando -perm... quindi penso gli vada bene anche -perm -1

xargs file: passo ogni file trovato al comando file

grep ' executable': prendo solo le linee che contengono la stringa " executable" (ho messo anche lo spazio perché altrimenti se un file si chiama executable o è in una cartella di nome executable, viene preso lo stesso=


cut -f 1 -d :: prendo solo i nomi dei file, tagliando la scritta generata dal comando file

Per la domanda sul kernel invece quello che ho fatto è stato aggiungere nella funzione clear_proc() del file /usr/src/kernel/system/do_exit.c la seguente stringa:

code:
kprintf("%d", rc->p_nr);


che stampa il campo p_nr del PCB del processo che viene terminato... in realtà non sembrava che questo numero fosse il PID, e forse andava aggiunto qualcosa anche in do_kill... però a trentini è andato bene così

Per gli esercizi di partizionamento e shell ci han fatto loggare con gli utenti la cui sessione scadeva dopo rispettivamente 10 e 30 minuti dal login, e quindi minix veniva chiuso... mentre per la parte del kernel ci han fatto loggare come root/root e si sono scritti il tempo entro il quale dovevamo finire (dopo mezz'ora)... a me personalmente non sono venuti a controllare finché non li ho chiamati io, quindi sono stato un bel po' di più (non so quanto)

Vi allego anche un file .txt dove mi sono scritto i vari esercizi di shell e kernel trovati nel thread, con molte soluzioni spesso elaborate da me (e quindi magari un po' diverse da quelle trovate qui), poi ho anche fatto alcuni esercizi di cui non è stata postata la soluzione (ad esempio trovare i 10 file più vecchi del sistema e indicare di chi sono, o trovare per ogni utente il processo più grande a lui appartenente ed eseguirlo tutti i venerdì alle 17). Non sono assolutamente sicuro se siano giusti o meno :D anche se molti li ho testati, in ogni caso se avete dubbi chiedete qui e qualcuno risponderà :razz:

la parte del kernel è fatta in maniera molto riassuntiva, e anche lì ho molti dubbi sulla correttezza

Spero possa esservi utile...


Posted by Gehur on 11-07-2008 14:59:

ma per la parte kernel hai dovuto ricompilare??

poi non ho ben capito, la parte di shell sei riuscito a farla???


Posted by Fredx on 11-07-2008 18:48:

nella parte di shell la richiesta era "trovare i file eseguibili binari (non script shell) più grandi di 8k, presenti sul sistema" (la parte "più grandi di 8k" me l'ero scordata ieri, cmq ovviamente basta aggiungere un -size +16 al find). Quello che sono riuscito a fare io è trovare i file eseguibili più grandi di 8k presenti sul sistema, senza distinzione tra binari e script di shell... perché non conoscevo il comando file.
Trentini mi ha detto "va beh dai, se vuoi ti dò ancora un po' di tempo per cercare" e io gli ho risposto "è 20 minuti che cerco, non ho trovato niente, non penso di trovare qualcosa in 10 minuti" :D
Quindi mi fa "va beh dai, ti dò un OK-- in questa parte, che sarebbe 22", poi mi ha fatto fare la parte del kernel.

La parte kernel è andata bene e ovviamente ho dovuto ricompilare, quindi alla fine mi ha tolto 2 punti per la parte shell e mi ha messo 28


Posted by Gehur on 12-07-2008 11:01:

a ok ok, senti ne approfitto per chiederti una cosa, quando si fa la parte kernel bisogna sempre ricompilare immagino, ma si ricompila sempre allo stesso modo oppure varia in base alla richiesta??

se mi puoi anche scrivere i comandi mi faresti un piacere(in questo momento non ho voglia di cercare nel thread :) )


Posted by alexn1 on 19-07-2008 17:02:

Ho trovato sul wiki del corso di laboratorio questo esercizio:

- quante dir hanno meno di 5 sottodir?

Voi come lo fareste?


Posted by Gehur on 20-07-2008 08:49:

allora ho visto che per scoprire se un file è una directory basta usare ls -p, in questo modo le directory vengono indicate con lo "/"

sicuramente bisogna fare un script, solo che adesso non saprei come controllare tutte le directory presenti


Posted by Gehur on 20-07-2008 09:00:

allora un metodo ci può essere

con un find si trovano tutte le directory, poi per ogni stringa che ti stampa a video si contano i numero di "/" presenti..se è minore di 5 incrementa contatore..
solo che adesso bisogna trovare un modo per contare gli "/"


Posted by Gehur on 20-07-2008 09:52:

allora ho scritto questo comando:

find / -type d | xargs tr '[a-z][A-Z]01234567890.-_' ''

in pratica cercami tutti i file directory e per ogni file trovato trasforma i vari caratteri scritti sopra in ''(cioè li cancello), in questo modo mi stampa a video una lista di /, adesso bisogna solo contare, se sai il modo e me lo dici :)


Posted by alexn1 on 20-07-2008 11:45:

Io in parallelo stavo provando un'altra strada: visto che con il comando "ls -l" il secondo campo che viene restituito è il numero delle sottodirectory di una directory (compreso . e .. ) stavo cercando di stampare il numero ed il nome della directory.
Al momento sono riuscito ad impostarlo ma c'è ancora qualcosa da affinare...

Il find che eseguo è il seguente:

find / -type d -exec ls -ld {} \; | cut -f 2,12 -d " " | sort -n

Il risultato è ancora un po' confuso... :razz: ma spero di metterlo a posto


Posted by Gehur on 20-07-2008 13:16:

a cavoli non ci avevo fatto caso, la tua soluzione è meglio, non bisogna contare ma solo confrontare :D

ma perchè il cut fatto cosi cut -f 12 non funziona..

poi si potrebbe usare in qualche modo un grep[1234] per scegliere solo le righe che contengono meno di 5 directory, in ultimo basterebbe contare le righe e via, solo che non riesco a dusare sto grep :arg:


Posted by alexn1 on 20-07-2008 16:06:

Ci siamo quasi... Mi manca "solo" da restringere la scelta alle dir con meno di 5 subdir

find / -type d | xargs ls -ld | tr -s ' ' ' ' | cut -f 2,9 -d ' '


[Edit 17.38]

Bingo! Ecco la "formula magica":

find / -type d | xargs ls -ld | tr -s ' ' ' ' | cut -f 2,9 -d ' ' | grep "^[2-6] " | wc -l

Nota: scelgo solo quelle che risultano avere da 2 a 6 sottodir perchè il valore che viene mostrato da "ls -l" comprende sempre . e .. quindi tutte le dir hanno almeno 2 sottodir e siccome la richiesta è di trovare quelle che hanno meno di 5 sottodir considero quelle che ne hanno da 2 a 6


Posted by Gehur on 20-07-2008 16:58:

cavoli perfetto

senti e riguardo al cut non mi sai dire nulla, come se scrivo semplicemente cut -f 12 funziona male, mi stampa le prime colonne con i permessi e basta..

ma il cut che hai scritto adesso cosa fa?? io ho eseguito questo comando find / -type d | xargs ls -ld | tr -s ' ' ' ' | cut -f 2,9 -d ' '
ma non noto differenze..cosa taglia??

ultima cosa, quanto ci mette ad eseguire il comando..a me è svenuto..:)


Posted by alexn1 on 20-07-2008 17:08:

Il cut mi ha fatto dannare un bel po'...
Allora la cosa più importante è il delimitatore che gli specifichi (-d) perchè in base a quello lui seleziona i campi che gli chiedi (-f). Il tr che viene eseguito prima è fondamentale perchè ti sostituisce tutti gli spazi consecutivi (-s) con un solo spazio e siccome uso lo spazio come delimitatore del cut bisogna che ce ne sia soltanto uno tra un campo e l'altro altrimenti l'output non risulta corretto.

Prova per esempio a lanciare un ls -l e dopo prova ls -l | tr -s ' ' ' ' (solo per chiarire il comando è tr -s '(spazio)' (spazio) '(spazio)')

A questo punto prova a selezionare i campi usando prima il tr vedrai che il cut lavora correttamente...

Spero di essermi spiegato chiaramente


Posted by Gehur on 20-07-2008 17:25:

si dovrei aver capito, proverò grazie tante


Posted by Gehur on 21-07-2008 14:09:

una cosa ragazzi, io sulla parte kernel non so nulla, vorrei sapere una volta che sono riuscito a modificare il/i file, quali sono i procedimenti per ricomplilare in maniera corretta..


Posted by ste182 on 21-07-2008 15:28:

raga non ho capito una piccola cosa:

il processo che occupa più memoria:
ps -ef | sort -n + 7 | tail -1

non capisco il +7 che cazzzzz*** centra ahahaha

ps -ef lista tutti i processi, sort -n li ordina in modo crescente e tail -1 mi da l'ultimo elemento... ma il 7 da dove esce??

__________________
Live Fast, Die Fun


Posted by Gehur on 21-07-2008 15:39:

il 7 se non mi sbaglio è la colonna size..vengono ordinati in base alla size


per la mia domanda mi rispondo da solo; ho visto che a pagina 3 è spiegato tutto..:D

anzi mi servirebbe una precisazione, quando capisco di aver modificato una libreria e quindi fare make libraries??


Posted by jaguaro on 22-07-2008 11:25:

Una mia soluzione per trovare tutte le dir che abbiano meno di 5 sottodirs:
file dirs.sh

code:
#!/bin/sh echo "Script per stampare le dir che hanno meno di 5 sottodir"; for dir in $(find / -type d); do ls -F -1 $dir | grep '/' | wc -w > a.tmp if [ $(cat a.tmp) -lt 6 ]; then echo $dir; cat a.tmp; else echo ''; fi; rm a.tmp; done;

__________________
Carlo Boni
Rappresentante Studenti
Sinistra Universitaria


Posted by picchio on 22-07-2008 14:57:

Tastiera italiana nella prova lab

Scusate la domanda forse scontata.
Vorrei sapere se durante la prova di laboratorio i PC hanno
già impostata la tastiera italiana o dobbiamo impostarcela noi.
Grazie


Posted by Joliet Jake on 22-07-2008 15:56:

Scusate la domanda forse scontata.
Vorrei sapere se durante la prova di laboratorio i PC hanno
già impostata la tastiera italiana o dobbiamo impostarcela noi.
Grazie

quando l'ho fatto io era in italiano

--------------------------------
scusate io sto facendo gli esercizi sulle schede.. ora prendiamo per esempio quello di trovare la somma delle occupazioni dei file di un utente.

#!/bin/sh
if [ $# -ne 1 ]; then
echo "syntax: user_size <user_name>"
exit 1
fi
ID="$(grep "^$1" /etc/passwd | cut -f 3 -d :)"
if [ "$ID" = "" ]; then
echo "User \"${1}\" not found"
exit 1
fi
echo "calculating..."
SUM=0
for ITEM in $(find / -user "$ID" -type f | xargs du | cut -f 1); do
SUM=$(expr ${SUM} + ${ITEM})
done
echo "User \"${1}\" takes ${SUM} KB into the system"
exit 0


questo lo sappiamo grazie a n3o, ora vorrei tanto sapere

  1. ma noi dovremmo sfornare robe del genere li senza sapere nulla di nulla?
  2. quanto cacchio di tempo abbiamo per creare questi mostri?
  3. ma voi la sapete fare una cosa del genere o sono solo io il ritardato cher non ci riuscirebbe mai?
  4. voi che avete fatto per prepararvi avetre letto le schede e basta? avete guardato altri manuali, quelli indicati sulla wiki di laboratorio?


io devo passare questo cacchio di esame, possibile che sia così complicato? mi basta passare la parte di partizione e quella di shell.. la parte di shell è così complicata porca miseria? mi viene da piangere.

rimetto assieme tutte le domande dell'ultima lezione di laboratorio sulla shell cioè la quinta:

  1. trovare il file più grosso in un certo ramo
  2. copiare files da un ramo ad un altro mantenendo intatta la struttura delle directory
  3. Calcolare lo spazio occupato dai file di proprieta di un
    certo utente
  4. Scrivere un comando che conta quanti fi le ci sono in un
    determinato ramo del fi lesystem
  5. Aggiungere 10 utenti prendendo la lista da un file di testo
  6. Creare un archivio tar.gz contenente tutti i fi le la cui
    dimensione è minore di 50KB
  7. Rinominare un certo numero di file: per esempio tutti i fi le
    .png in .jpg
  8. Creare un file da 10MB costituito da caratteri casuali
    (usando /dev/random) e veri ficare se contiene la parola
    MINIX
  9. Trovare l'utente che ha il maggior numero di file nel
    sistema
  10. Trovare i 3 utenti che, sommando la dimensione dei loro
    file, occupano piu` spazio nel sistema.

__________________
In Blues We Trust


Posted by Joliet Jake on 22-07-2008 16:30:

soluzioni

allora in attesa che qualcuno mi dica se sono condannato o no cerco le soluzioni ai quesiti che ho postato sopra:

1)

trovare il file più grosso in un certo ramo


find directory -type f | xargs du | sort -n | tail -n 1

(grazie n30)

2)
copiare files da un ramo ad un altro mantenendo intatta la struttura delle directory


cp -rp /directory/albero1/* /directory/albero2

(grazie n30)

3)
Calcolare lo spazio occupato dai file di proprieta di un certo utente


SUM=0
for ITEM in $(find / -user "utente" -type f | xargs du | cut -f 1); do
SUM=$(expr ${SUM} + ${ITEM})
done
echo "${SUM} KB"

(grazie n30)

4)
Scrivere un comando che conta quanti fi le ci sono in un
determinato ramo del fi lesystem


find dir -type f | xargs du | wc -l

5)
Aggiungere 10 utenti prendendo la lista da un file di testo


Creato un file di nome utenti di questo tipo:

u0 other /usr/u0
.....ecc fino a u9

cat utenti | while read i; do adduser $i; done

6)
Creare un archivio tar.gz contenente tutti i fi le la cui
dimensione è minore di 50KB

find / -type f -size -50 -exec tar cvf archivio.tar {} \;
---------------
EDITERO' QUESTO POST MAN MANO CHE TROVO LE SOLUZIONI/CI ARRIVO

__________________
In Blues We Trust


Posted by ste182 on 22-07-2008 16:36:

ma io non capisco a cosa serve mettere
!/bin/sh per gli script

se lo scrivo io mi da errore "no such file or directory"




----

no niente scusate... ho scritto una cazzata..ho capito da solo ahahah

__________________
Live Fast, Die Fun


Posted by carla86 on 22-07-2008 17:27:

ti da errore perchè manca un cancelletto
la riga giusta è #!/bin/sh
serve per fare uno script nell'editor e poi farlo girare direttamente....


Posted by Gehur on 23-07-2008 10:48:

o ma ragazzi perchè se scrivo

find / -type f -size -20| xargs tar cvf archivio.tar

mi dice cannot open archivio.tar..

e poi come cavolo funziona il comando ar non riesco propio a farlo andare..

PS
ho risolto in questa maniera

find / -type f -size -20 -exec tar cvf archivio.tar {} \;

se metto ar però non mi va..

find / -type f -size -20 -exec ar c archivio.a {} \;


Posted by darkshadow on 23-07-2008 10:57:

 
credo perchè devi passare a tar ulteriori parametri perchè non penso ti crei di default un archivio tar magari se solo li passi il nome dell'archivio cerca di aprirlo. guarda il man di tar cmq ti consiglio di vedere anche ar perchè negli ultimi esami di lab chiedeva di archiviarli con ar

__________________
by Ð@rk§h@ÐØw


Posted by Joliet Jake on 23-07-2008 12:40:

Aggiungere 10 utenti prendendo la lista da un file di testo


questa si fa così

cut -f 1 file | xargs adduser {} gruppo /usr/{}

?

__________________
In Blues We Trust


Posted by Deky on 23-07-2008 12:41:

raga...mi avete abbuffato a rispondere su sto ca**o di post....ne potete aprire uno nuovo??? che mi continuano ad arrivare le mail :D :D

ciau


Posted by GiaXVI on 23-07-2008 12:50:

spunta la check babbo!!!!!!!!!!!!!!!! fai informatica o agraria??


Posted by Gehur on 23-07-2008 13:46:

haha risposta corretta, modo forse un po violento :D


Posted by ste182 on 23-07-2008 18:14:

Originally posted by jeremy.1983
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


io non riesco a farla andare l'immagine perEsame.qcow ... la lancio da qemu facendo:
qemu -hda perEsame.qcow parte minix e si blocca alla schermata del dump dei registri e i processi... poi non va più avanti

__________________
Live Fast, Die Fun


Posted by ste182 on 23-07-2008 18:34:

- calcolare lo spazio occupato da un utente (dai suoi files)

ho modificato lo script per calcolare lo spazio occupato da OGNI utente sul sistema.. sembra funzionare per un pò, dopo comincia a dire "out of space".. sapete dirmi perchè?
il codice è questo:

#!/bin/sh
sum=0
for id in $(cut /etc/passwd -d : -f 3); do
for item in $(find / -type f -user $id | xargs du | cut -f 1); do
sum=$(expr $sum + $item)
done
echo "dim. tot. dei files di utente $id: $sum Kb"
dome

__________________
Live Fast, Die Fun


Posted by Gehur on 23-07-2008 19:34:

anche a me a volte escono sti errori e per quanto mi riguarda non mi interesso per il semplice fatto che lo script è scritto in maniera corretta quindi do la colpa al fatto si usare la macchina virtuale con ste immagini prese dal wiki..


spero di non pentirmene domani :D


Posted by jaguaro on 23-07-2008 21:56:

scusa ma....


Scrivere un comando che conta quanti fi le ci sono in un
determinato ramo del fi lesystem


find dir -type f | xargs du | wc -l


questa soluzione funziona ma è uno spreco di risorse..
il du non serve, devi solo calcolare quanti file sono..
per cui io farei
code:
find dir -type f | wc -w

__________________
Carlo Boni
Rappresentante Studenti
Sinistra Universitaria


Posted by Joliet Jake on 23-07-2008 22:14:

Originally posted by jaguaro
questa soluzione funziona ma è uno spreco di risorse..
il du non serve, devi solo calcolare quanti file sono..
per cui io farei
code:
find dir -type f | wc -w


hai perfettamente ragione

------------------
Originally posted by ste182
- calcolare lo spazio occupato da un utente (dai suoi files)

ho modificato lo script per calcolare lo spazio occupato da OGNI utente sul sistema.. sembra funzionare per un pò, dopo comincia a dire "out of space".. sapete dirmi perchè?
il codice è questo:

#!/bin/sh
sum=0
for id in $(cut /etc/passwd -d : -f 3); do
for item in $(find / -type f -user $id | xargs du | cut -f 1); do
sum=$(expr $sum + $item)
done
echo "dim. tot. dei files di utente $id: $sum Kb"
dome


è giusto credo sia dovuto al fatto che usi FOR dovrest magari usare while al posto di for

EDIT
ma se io mettessi in fondo a questo script con echo solo
$sum:$id
potrei poi fare così:

code:
sort -n -f : +1|tail -n 3


per risolvere questo quesito:
Trovare i 3 utenti che, sommando la dimensione dei loro
file, occupano piu` spazio nel sistema.


opuure sono io scemo?

__________________
In Blues We Trust


Posted by Joliet Jake on 24-07-2008 13:23:

passato ragazzi, 22 che bello.
se vi serve ecco la mia domanda.

metti in un file ar i file di testo che sono stati modificati più di 2 giorni fa e che hanno meno di 500 righe


soluzione mia corretta dall'errore che ho fatto e che Monga mi ha fatto capire di aver fatto:

code:
for FILE in $(find -type f -a -name "*.txt" -a -mtime +2) do if [$(wc -l $file) -lt 500]; then ar rc archivio.ar $file; fi; done;

notate che come mi ha detto anche Monga io ho semplificato dicendo che tutti i file di testo sono quelli con estensione "txt".
In realtà non so come sarebbe la risposta giusta, ma lui me l'ha data buona egualmente.
L'altro errore era che avevo messo "<" al posto di "-lt" e mi ridirezionava il 500 sul risultato di wc -_-'

comunque per avere un'idea della valutazione, con questi 2 errori ho preso 22.. menomale che è andata :)
in bocca al lupo ai prossimi

__________________
In Blues We Trust


Posted by ste182 on 24-07-2008 15:15:

Originally posted by Joliet Jake
passato ragazzi, 22 che bello.
se vi serve ecco la mia domanda.



soluzione mia corretta dall'errore che ho fatto e che Monga mi ha fatto capire di aver fatto:

code:
for FILE in $(find -type f -a -name "*.txt" -a -mtime +2) do if [$(wc -l $file) -lt 500]; then ar rc archivio.ar $file; fi; done;

notate che come mi ha detto anche Monga io ho semplificato dicendo che tutti i file di testo sono quelli con estensione "txt".
In realtà non so come sarebbe la risposta giusta, ma lui me l'ha data buona egualmente.
L'altro errore era che avevo messo "<" al posto di "-lt" e mi ridirezionava il 500 sul risultato di wc -_-'

comunque per avere un'idea della valutazione, con questi 2 errori ho preso 22.. menomale che è andata :)
in bocca al lupo ai prossimi


O.O ??
e così funzionava??

a me scritto così non funziona.. a parte che manca il test nell'IF.
cmq io ho dovuto scriverlo così per farlo andare:
#!/bin/sh
for $FILE in (find / -type f -name "*.txt" -mtime +2); do
if test $(wc -l $FILE | tr -s ' ' ' ' | cut -d ' ' -f 2) -lt 500
then ar rc archivio.ar $FILE
fi
done
exit 0

__________________
Live Fast, Die Fun


Posted by lackno on 24-07-2008 15:37:

altre domande:

trovare i 10 file piu' vecchi (per alcuni eran i 10 modificati piu' recentemente)

la soluzione giusta non la so ma ho preso 23 :D

parte kernel: modificare il metodo di allocamento memoria in modo che utilizzi worst fit


Posted by Gehur on 24-07-2008 15:50:

shell
per ogni utente trovare i 3 file più vecchi del sistema..

#!\bin\sh
for U in $(cut -d : -f 3 /ect/passwd); do
find(type / -type f -user $U| xargs ls -T| tail -3)
done

ls -T ordina i file in base alla data di creazione, cavoli inzialmente mi stavo scervellando per capire come ordinarli in base alla data,(cosa da pazzi) poi mi sono ricordato del -T..

parte kernel: modificare il metodo di allocamento memoria in modo che utilizzi worst fit (ma come cavolo si fa??, ci sarò stato più di un ora a cercare ma nulla :D)

totale 23 perchè il trentini che mi ha guardato la partizione successivamente mi ha iniziato a fare domande sulla partizione, tipo se era montata e se la dimensione era quella data..

ed io non ero preparato ma me la sono cavata, però mi ha messo 2 meno :(

in pratica dovevo usare df.. in bocca al lupo ragazzi


Posted by davene on 24-07-2008 17:39:

andata...26 ma SOLO GRAZIE A VOI! non sapevo quasi nulla dei comandi di minix ne tantomeno delle partizione!
domanda shell: trovare e archiviare con ar i file che occupano meno di 10K e che contengano al loro interno la parola "memory".
l'esercizio sul kernel non l'ho fatto perchè non avevo tempo..

GRAZIE ANCORA

__________________
Saluti - Davide


Posted by ste182 on 24-07-2008 21:40:

Originally posted by davene
andata...26 ma SOLO GRAZIE A VOI! non sapevo quasi nulla dei comandi di minix ne tantomeno delle partizione!
domanda shell: trovare e archiviare con ar i file che occupano meno di 10K e che contengano al loro interno la parola "memory".
l'esercizio sul kernel non l'ho fatto perchè non avevo tempo..

GRAZIE ANCORA

senza fare il kernel hai preso 26???
ma sul sito del prof c'è scritto che la parte di kernel serve per votazioni > 24...
bha, non ci sto capendo più nulla ahahaha


cmq il tuo esercizio lo farei così(ditemi se va bene):
find / -type f -size -10 | xargs grep -l "memory" | xargs ar rc archivio.ar

__________________
Live Fast, Die Fun


Posted by Gehur on 25-07-2008 09:51:

be avrà preso 28 nello scritto

l'esercizio è corretto :)


Posted by KIMMY on 25-07-2008 10:40:

Originally posted by Gehur
shell
per ogni utente trovare i 3 file più vecchi del sistema..

#!\bin\sh
for U in $(cut -d : -f 3 /ect/passwd); do
find(type / -type f -user $U| xargs ls -T| tail -3)
done

ls -T ordina i file in base alla data di creazione, cavoli inzialmente mi stavo scervellando per capire come ordinarli in base alla data,(cosa da pazzi) poi mi sono ricordato del -T..



se sei in una cartella ben definita basta fare ls -lt ed hai i file in ordine di data, ma farlo su tutto il sistema mi sa che e' un po' piu' complesso perchè ls -T te li ordina in base alla data ma per ogni cartella, non in generale su tutto il sistema... e così monga mi ha detto che una possibile soluzione potrebbe essere quella di usare il comando "stat" per avere la data dei file e poi ordinarli ... proverò e vedrò cosa ne viene fuori però se altri hanno qualche suggerimento non mi offendo mica :D


Posted by Gehur on 25-07-2008 12:23:

Originally posted by KIMMY
se sei in una cartella ben definita basta fare ls -lt ed hai i file in ordine di data, ma farlo su tutto il sistema mi sa che e' un po' piu' complesso perchè ls -T te li ordina in base alla data ma per ogni cartella, non in generale su tutto il sistema... e così monga mi ha detto che una possibile soluzione potrebbe essere quella di usare il comando "stat" per avere la data dei file e poi ordinarli ... proverò e vedrò cosa ne viene fuori però se altri hanno qualche suggerimento non mi offendo mica :D


be questo io no lo sapevo,se mi mi dici che è cosi ci credo, la schell me l'ha corretta il prof monga e non mi ha detto nulla a riguardo..


Posted by picchio on 25-07-2008 12:34:

Smile Domande fatte all' esame

Ciao ragazzi,
se vi può servire, vi scrivo le domande che mi sono state fatte ieri all' esame:

Script:
creare uno script che cambi l'estensione di un gruppo di file da .mp3 a .ogg

Kernel:
mandare una stampa a video ogni volta che viene rimosso un file;
inoltre stampare il suo I-node number

Ciao e buone vacanze a tutti!


Posted by marbliss on 25-07-2008 15:20:

Anche questo esame è andato, ecco le mie domande:

Script:
trovare il file più grande di tipo testo che abbia un numero di righe pari

Soluzione:

code:
#!/bin/sh sizef=0 for file in $(find / -type f -name '*.txt'); do nrrighe=$(wc -l $file | tr -d ' ' | cut -f 1 -d /) size=$(du $file | cut -f 1) if $(expr $(expr $nrrighe % 2) -eq 0 ); then if $(expr $size -gt $sizef); then sizef=$size filef=$file fi fi done echo "Il file di testo più grande con numero di righe pari è: echo $filef


Kernel:
cambiare la politica di allocazione della memoria in best fit

Indovinato: si deve cambiare il file /usr/src/servers/pm/alloc.c più esattamente la funzione alloc_mem dove viene usato la politica firts fit. Non l'ho fatto perché ero ultima e loro avevano fretta di andare via ma Monga mi ha datto 2 punti in più :-D


Posted by KIMMY on 25-07-2008 18:40:

Originally posted by Gehur
be questo io no lo sapevo,se mi mi dici che è cosi ci credo, la schell me l'ha corretta il prof monga e non mi ha detto nulla a riguardo..


Tralaltro -T stampa solo l'ora dei file, non li ordina per data... intendevi -t vero? :shock:


cmq meglio così, almeno abbiamo la certezza che non sempre è pignolo :D


Posted by Gehur on 26-07-2008 10:50:

no no..ho usato -T ma forse nemmeno se ne accorto..ho usato T perchè con t non capivo che faceva..cioè in toeria dovrebbe ordinare per data, ma in pratica non so.. invece con -T la stampa mi sembrava ordinata per data..

era alloc.c allora, e vabbe pazienza..


Posted by davene on 27-07-2008 11:05:

@ste182
si si..senza kernel..avevo 27 tra scritto e orale e 24 di laboratorio...fatto la media arrotondata all'intero successivo e quindi 26!
Si si..l'esercizio è corretto l'ho fatto anch'io cosi
GRAZIE DI NUOVO A TUTTI

__________________
Saluti - Davide


Posted by atrent on 30-07-2008 18:10:

c'e' qualche volenteroso che raccoglie tutte le soluzioni e le mette sul wiki?

grazie, buone vacanze


Posted by Joliet Jake on 02-08-2008 18:03:

Originally posted by ste182
O.O ??
e così funzionava??

a me scritto così non funziona.. a parte che manca il test nell'IF.
cmq io ho dovuto scriverlo così per farlo andare:
#!/bin/sh
for $FILE in (find / -type f -name "*.txt" -mtime +2); do
if test $(wc -l $FILE | tr -s ' ' ' ' | cut -d ' ' -f 2) -lt 500
then ar rc archivio.ar $FILE
fi
done
exit 0


ma veramente "[]" sono proprio un'abbreviazione per il comando test, quindi il problema non è che manca test..

__________________
In Blues We Trust


Posted by Agarash on 25-09-2008 12:08:

passato, 25 nella parte del laboratorio!
grazie a questo 3d ovviamente (e a DarkShadow! :D )

domande:
partizione come al solito

shell:
calcolare per ogni utente il numero di file modificati nell'ultimo mese

for user in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do
item=$(find / -type f -user $user -mtime -31 | wc -l | tr -d ' ' | cut -f 1)
echo "L'utente $user ha modificato $item file nell'ultimo mese"
done

kernel:
ogni volta che viene cancellato un file che inizi per 'x' stampare un messaggio

la soluzione non la so, il file da modificare dovrebbe essere do_unlink.c contenuto nella parte del FileSystem.
Monga mi ha dato 1 punto in più su questa parte perche' bene o male gli ho spiegato qual era il procedimento da adottare e avevo trovato il file da modificare

saluti :cool:


Posted by Java on 25-09-2008 22:02:

mi ha segato comunque

Copiare, conservando gerarchia e permessi, tutti i file sotto /usr/src che iniziano con la lettera m in /tmp

particolare attenzione alla find che trova i file anche nelle sottocartelle...

spero in un vostro aiuto...

appena letto ho pensato "è na cagata" invece è + strano di quanto sembra...ho detto strano non difficile

__________________
io Sofort e te che sei? un pupazzo?


Posted by pamarcan on 30-10-2008 23:23:

Se può servire a qualcuno: per ogni utente del sistema stampare i gruppi a cui appartiene, senza utilizzare i comandi id e groups.


for x in $(cat /etc/passwd |cut -d ':' -f 1); do echo "$x: ""$(for y in $(cat /etc/group|grep -s $(cat /etc/passwd|grep -s "$x"|cut -d ':' -f 3)|cut -d ':' -f 1);do echo -n "$y ";done)";done


Posted by miguel on 17-02-2009 13:24:

ciao.. scusa ma nella parentesi più interna, grep -s non da output.. ed è giusto perché nel man vienne specificato che non da output

e quindi nn vapiu niente... :S ?


Posted by miguel on 17-02-2009 13:33:

PER I CILINDRI.. qualcuno si ricorda se sulla partition table ..

-devono iniziare da 0 o da 1
-devono essere strettamente del tipo
0-5
6-10
11-16

o anche
0-5
5-9
9-14

??

grazie a tutti


Posted by adlucio on 09-06-2009 14:04:

Ciao dove posso trovare minix da usare su ubunut?
grazie a tutti


Posted by Dazan on 16-06-2009 08:13:

ragazzi io ho un quesito sulla partizione nella fattispecie

se l'esercizio è :
partizionare secondo disco seguendo lo schema

part tipo dim
1 minix 10
2 fat32 10
3 swap 20
4 minix 10
5 minix 30

il comando per iniziare è giusto part /dev/c0d2 ???

per quanto riguarda la 5° partizione
va all'interno della 4° giusto
anche il caso ci fossero state tipo una 6°- 7° ????


Posted by xSharKMaNx on 16-06-2009 08:22:

Con MINIX hai un max di 5 partizioni "standard", dopodichè dovrai creare le sottopartizioni,

E' corretto /dev/c0d2

Qualora nell'esercizio ci sia chiesto partizionare anche la 6 e la 7 nella 5 partizione dovrai inserire la dimensione totale rimanente inserendo il n.ro di clindro, settore, tracce che trovi nella seconda riga in alto (se non erro).

Una volta inserito tali dati sempre sulla 5 partizione premi il pulsante di > per crearti le ultime due sottopartizioni.

Successivamente dovrai generare il File System con il comando mkfs

Ciao

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Dazan on 16-06-2009 09:03:

grazie per la delucidazione solo che io come partizioni standard ne ho 4 allego il prntscr


Posted by xSharKMaNx on 16-06-2009 15:48:

Originally posted by Dazan
grazie per la delucidazione solo che io come partizioni standard ne ho 4 allego il prntscr


Il discorso non cambia alla 4 partizione premi > e fai le altre due partizioni

Guarda questo link

http://www.dsy.it/forum/showthread.php?threadid=30276

Dovrebbe fare al caso tuo

Ciao

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Dazan on 16-06-2009 16:09:

ottimo!


Posted by francybiga on 16-06-2009 16:20:

qualcuno ha una minima idea di come si possa risolvere questi esercizi??
(sono tra quelli che il monga ha messo sulla wiki...)

-Trovare tutti i link simbolici nel filesystem
-Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato ESCLUDENDO gli hardlink
-Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese


Posted by AAndrea on 17-06-2009 16:13:

Originally posted by francybiga
qualcuno ha una minima idea di come si possa risolvere questi esercizi??
(sono tra quelli che il monga ha messo sulla wiki...)

-Trovare tutti i link simbolici nel filesystem


-Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese



-

l'ultima penso che intenda "di proprietà di un certo utente" , non penso venga memorizzato chi ha modificato il file per ultimo.
penso sia una roba del genere

find / -type f -user PINCOPALLO | xargs file | grep text$ | cut -d : -f 1 | xargs wc -l | grep total | tr -d ' ' | cut -d t -f 1


Posted by number15 on 18-06-2009 14:13:

Avevo letto un qualche post che spiegava i range di valori corretti per i Cyl, però non c'ho capito niente.
Il problema è quando vado a modificare le partizioni, cosa che potrebbe avvenire tranquillamente all'esame immagino.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by fain182 on 18-06-2009 14:38:

Originally posted by xSharKMaNx
Con MINIX hai un max di 5 partizioni "standard", dopodichè dovrai creare le sottopartizioni,

No, il numero di partizione massimo primarie (quindi senza contare le estese) è 4, e non è un limite di minix, ma è legato alla tabella delle partizioni, e quindi riguarda tutti i sistemi operativi..


Posted by Ertyl on 19-06-2009 15:30:

Esercizio all'esame di oggi:

# Trovare tutti i script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !

__________________


Web Developer / SEO


Posted by number15 on 19-06-2009 17:10:

Il mio era tipo:
calcolare la somma delle dimensioni dei file *.s.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by AAndrea on 19-06-2009 20:18:

il mio:
-script: archiviare in un ar tutti i file minori di 2 kb e che inizano con m
kernel: fare un alias ad una syscall e creare un file che la fa partire


Posted by Dazan on 22-06-2009 09:00:

Originally posted by Ertyl
Esercizio all'esame di oggi:

# Trovare tutti i script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !



come hai risolto?


Posted by fain182 on 22-06-2009 09:27:

a me ha chiesto:
script: trovare tutti i file che hanno il numero di blocchi pari
kernel: scrivere un messaggio sullo schermo quando viene avviato un programma setuid root


Posted by number15 on 22-06-2009 09:39:

Originally posted by number15
Il mio era tipo:
calcolare la somma delle dimensioni dei file *.s.

Mi quoto per aggiungere la "soluzione" se serve a qualcuno... vado a memoria (mi ha un po' aiutato l'assistente).

code:
for file in $(find / -type f -name *.s); do sum=$(stat -size $file) tot=$(expr $sum + $tot) echo $tot done


Posted by Ertyl on 22-06-2009 09:41:

Originally posted by Dazan
come hai risolto?


Tutti gli script cominciano con "#!/bin/sh" quindi trovi tutti i file che contengono "#!/bin/sh" ed è fatta :)

__________________


Web Developer / SEO


Posted by delleroby on 24-06-2009 07:28:

Ciao a tutti,
grazie a tutti quelli che hanno partecipato a questo forum perchè mi è stato veramente utile per passare l'esame...
Vi dò una dritta se qualcuno ancora non lo sapesse(a me la dritta l'ha data l'assistente di lab).
Per copiare i file da una cartella a un altra mantenendo la gerarchia delle cartelle basta metterli in un archivio e poi scompattarli nella cartella in oggetto.Molto semplice ma se uno non lo sà cerca di fare di quei casini...............
Non sono sicuro però dovrebbe mantenere anche i permessi perchè non è solo una copia di un file ma dovrebbe essere un archivio del file stesso.

Ancora grazie a tutti


Posted by spriggan on 03-07-2009 13:23:

Ciao a tutti,
sono di ritorno dall'esame di sistemi operrativi (laboratorio).

Mi ha chiesto (Martignoni):
partizione
shell -> mostrare, per ogni utente, il numero di file presenti sul sistema.
kernerl -> stampare, quando viene lanciato un processo che necessita privilegi superiori, un messaggio a video con pi, uid, nome processo.

La parte di kernel non l'ho fatta bene e alla fine mi ha dato 26.

Ciao e grazie a questo topic!!!!!

__________________
Universitario io? ma siam sicuri?


Posted by LG2100 on 03-07-2009 20:36:

Shell: memorizzare in un archivio .ar tutti i file creati negli ultimi 2 giorni di dimensione minore di 5k.
È una riga (find / -type f -size -10 -ctime -2 | xargs ar rc archivio.ar), l'unica cosa bisogna sapere che -ctime non è tecnicamente la data di creazione ma la data di ultima modifica degli attributi del file, che molto spesso coincide con la data di creazione. L'opzione ctime di find non è documentata, ma funziona.
Kernel: era una banale syscall con argomento numerico.


Posted by v0t on 15-07-2009 18:27:

Appello 03/07/2009:

Script: Elencare tutte le directory create in un numero di secondi dispari

find / -type dir | while read x; do i=$(stat -ctime $x); RESTO=$(expr $i % 2); if [ $RESTO -ne 0 ]; then echo $x $i; fi; done

In un file di script con i dovuti spazi, si capisce meglio.
Ce n'era un altro simile in cui i soggetti erano dei file minori (o maggiori non ricordo) di 5k, e anzichè stamparli a video dovevano essere archiviati con tar:
semplicemente va' modificato nel find "-type f" e va' aggiunto "-size -10" (o +10 in base alla richiesta), e dopo echo nel corpo dell' if va' aggiunto un " | xargs tar cvf archivio.tar". (leviamo pure $i come argomento di echo).

Spero di non aver fatto errori (comunque a me funzionano, quindi i concetti son quelli).


Posted by v0t on 17-07-2009 18:38:

Appello 17/07/2009:

Script: Trovare l'occupazione totale di tutti i file che iniziano con "c" e la cui data di modifica risale a più di 30 giorni fa.

SUM=0;
for DIM in $(find / -type f -name c* -mtime +30 | xargs du | cut -f 1); do
SUM=$(expr $SUM + $DIM);
done;
echo $SUM

Da quello che ho visto e sentito, gli script sono molto simili tra loro.

[edit - aggiunta]
Esercizio Kernel: Impedire la cancellazione dei file che iniziano con '+'.

Dovete aprire il file /usr/src/servers/fs/link.c

All'interno viene descritta una procedura chiamata do_unlink().

Ci sono vari test....qui aggiungete il vostro. Il nome del file è contenuto in 'user_path', quindi
if (*user_path == '+')
printf("Il nome del file inizia con '+' e il Monga ha detto che non può essere cancellato!\n");

Si, i docenti mi han detto che basta una printf per fargli capire che hai capito dove andare a metter le mani. (comunque credo che serva semplicemente mettere uno di quegli errori che vengono restituiti dopo i check all'interno della stessa procedura).

Comunque credo che si possa anche farlo nella procedura unlink_file() come mi è stato suggerito da alcuni. Provate se volete :P


Posted by hyperion on 18-07-2009 12:11:

Shell : Trovare il numero di file che hanno blocchi dispari
Kernel : Impedire la cancellazione di tutti i file che iniziano con + (vedi sopra)

Consiglio: va in ordine di iscrizione quindi iscrivetevi non appena vedete l'avviso sul sito perchè potreste rischiare di rimanere tutta la mattinata ad aspettare visto che ne fa entrare 5 alla volta..


Posted by misterx on 22-07-2009 06:56:

chiedo una cortesia a tutti coloro che hanno già sostenuto e passato con successo l'esame di laboratorio: il materiale(domande, esercizi proposti) che avete trovato in questa discussione è stato sufficiente per superare l'esame di laboratorio con tranquillità ?


Posted by mark on 23-07-2009 11:44:

ciao misterx,
non vorrei sbagliare ma credo che il materiale trovato su questa discussione più eventuale materiale dato dai link proposti sia più che sufficiente


ciao

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 05-09-2009 15:57:

Ho rifatto un esercizio proposto in passato su questo 3D:

- Trovate la dimensione di tutti i file dell'utente root:

code:
#!/bin/sh somma=0; dim=0; for dim in $(find -type f -user root -exec ls -s {} \; | cut -d " " -f 1); do somma=$(expr $somma + $dim); done; echo "Dimensione Files root: $somma";


Un ringraziamento anche da parte mia per questo 3D.

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 05-09-2009 16:16:

Una domanda ai più esperti:

code:
for dim in $(find -type f -user root -exec ls -s {} \; | cut -d " " -f 1);


code:
for dim in $(find -type f -user root | xargs du | cut -f 1);


Queste due istruzioni non dovrebbero riportarmi lo stesso risultato?

Ciao e Grazie!

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 07-09-2009 09:54:

Originally posted by xSharKMaNx
Ho rifatto un esercizio proposto in passato su questo 3D:

- Trovate la dimensione di tutti i file dell'utente root:

code:
#!/bin/sh somma=0; dim=0; for dim in $(find -type f -user root -exec ls -s {} \; | cut -d " " -f 1); do somma=$(expr $somma + $dim); done; echo "Dimensione Files root: $somma";


Un ringraziamento anche da parte mia per questo 3D.


io in questi casi uso i file temporanei per non incorrere in problemi di Out of space

ciao

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 07-09-2009 18:17:

Esercizio:
Trovare l'utente con il minor numero di file nel sistema

Ho generato questo script

code:
#!/bin/sh USERS=$(cut -d : -f 1 < /etc/passwd | sort -f | uniq); for u in $USERS; do N=$(find / -user $u -type f | wc -l); echo $u:$N; done


In questo caso lo script mi genera una lista con:
utente: n.ro file

Se volessi estrarre soltanto l'unico o gli unici utenti con il minor n.ro di file come posso fare?

PS: All'esame bisogna rendere eseguile lo script oppure può essere lanciato con "sh <nome_script.sh>" ?

Ciao e Grazie

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Shaper on 08-09-2009 10:19:

Scusate, risottopongo una domanda che è stata già fatta in questo 3d, ma che mi sembra non abbia avuto risposta:

con lo script per archiviare tutti i file contenenti la parola "login"

code:
find / -type f | xargs grep login


come anche ad altri ho il problema dell'errore grep: line too long - truncated
la cosa strana è che se uso l'immagine minix perEsame.qcow mi stampa moltissime linee con l'errore (quasi tutte) e ogni tanto qualche linea "giusta", cioè con un file effettivamente trovato.
Invece con l'immagine minix3-full.qcow la situazione è l'inversa: mi stampa moltissimi file effettivamente trovati e ogni tanto grep: line too long - truncated.
Sapete a cosa è dovuto e magari anche uno script che non produca questo errore?

__________________
Eidolon64|Blog


Posted by mark on 08-09-2009 10:29:

Originally posted by Shaper
Scusate, risottopongo una domanda che è stata già fatta in questo 3d, ma che mi sembra non abbia avuto risposta:

con lo script per archiviare tutti i file contenenti la parola "login"

code:
find / -type f | xargs grep login


come anche ad altri ho il problema dell'errore grep: line too long - truncated
la cosa strana è che se uso l'immagine minix perEsame.qcow mi stampa moltissime linee con l'errore (quasi tutte) e ogni tanto qualche linea "giusta", cioè con un file effettivamente trovato.
Invece con l'immagine minix3-full.qcow la situazione è l'inversa: mi stampa moltissimi file effettivamente trovati e ogni tanto grep: line too long - truncated.
Sapete a cosa è dovuto e magari anche uno script che non produca questo errore?



io faccio semplicemente così:

code:
find / -type f | xargs grep -l login 2>/dev/null


redirezione su standard error

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 08-09-2009 12:00:

Originally posted by Shaper
Scusate, risottopongo una domanda che è stata già fatta in questo 3d, ma che mi sembra non abbia avuto risposta:

con lo script per archiviare tutti i file contenenti la parola "login"

code:
find / -type f | xargs grep login



Nella tua istruzione ti sei dimenticato -l

code:
find / -type f | xargs grep -l login


Poi se vuoi reindirizzare il tutto su di un file puoi sfruttare:

code:
find / -type f | xargs grep -l login 2>/dev/null >> list.txt

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Shaper on 08-09-2009 12:49:

Originally posted by xSharKMaNx
Nella tua istruzione ti sei dimenticato -l

code:
find / -type f | xargs grep -l login


Poi se vuoi reindirizzare il tutto su di un file puoi sfruttare:

code:
find / -type f | xargs grep -l login 2>/dev/null >> list.txt


ah sì il -l me lo sono dimenticato quando ho scritto il post.
Ma quindi il "line too long" non influenza la correttezza del risultato? Ho provato e in effetti va tutto liscio. Sapete a cosa è dovuto? Così, per evitare l'eventuale panico durante l'esame! :-D

Grazie comunque!!

__________________
Eidolon64|Blog


Posted by xSharKMaNx on 08-09-2009 14:12:

Originally posted by Shaper
ah sì il -l me lo sono dimenticato quando ho scritto il post.
Ma quindi il "line too long" non influenza la correttezza del risultato? Ho provato e in effetti va tutto liscio. Sapete a cosa è dovuto? Così, per evitare l'eventuale panico durante l'esame! :-D

Grazie comunque!!


No, non dovrebbe influenzare la correttezza del risultato, anche perchè qualora si verificasse un errore credo che il comando o lo script si pianterebbero all'istante.

Credo che il "line too long" debba essere visto come un warning.

Inserendo "2>/dev/null" eviti i messaggi d'errore [stderr] nel tuo output.

Ciao

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 08-09-2009 16:02:

Qualcuno mi aiuta a risolvere questi ex:

•Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
•Trovare tutti i link simbolici nel filesystem
•Trovare tutti i file di testo che non siano script
•Contare quanti file di manuale ci sono nel filesystem

Grazie

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 08-09-2009 17:02:

Originally posted by xSharKMaNx
Qualcuno mi aiuta a risolvere questi ex:

•Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
•Trovare tutti i link simbolici nel filesystem
•Trovare tutti i file di testo che non siano script
•Contare quanti file di manuale ci sono nel filesystem

Grazie


a spanne

•Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
find / -type f > tmp
while read l
do
g=$(echo $l | stat -Atime)
t=$(echo $g | cut -d ' ' -f 1-4)
echo -e "$l \t5" | grep $1
done < tmp

•Trovare tutti i link simbolici nel filesystem
find / -type l -exec ls -l {} \;

•Trovare tutti i file di testo che non siano script
find / -type f -exec file {} \; | grep -v script | grep text
(non molto elegante ma funziona)

•Contare quanti file di manuale ci sono nel filesystem
find / -name "*.1" | wc -l

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 08-09-2009 17:14:

Ti ringrazio mark!

Una domanda: ho un file tar.Z, come faccio ad identificare al suo interno file ".xyz" ?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 08-09-2009 17:24:

Originally posted by mark

•Trovare tutti i file di testo che non siano script
find / -type f -exec file {} \; | grep -v script | grep text
(non molto elegante ma funziona)


Questo non credo sia del tutto corretto, credo sia del tipo:

find / -type f -name "*.txt" | grep -v "#!/bin/sh"

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 08-09-2009 17:28:

Originally posted by xSharKMaNx
Questo non credo sia del tutto corretto, credo sia del tipo:

find / -type f -name "*.txt" | grep -v "#!/bin/sh"


dipende!
Ci sono script che non possiedono l'header come da te proposto ma sono script.
A mio avviso dipende da cosa vuole il docente, ci sono script di tipo diverso, il comando file li stana tutti.

Di solito poi gli script ash hanno l'estensione sh e non txt, prova a fare una ricerca in minix ne trovi a volontà.

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 08-09-2009 18:15:

Originally posted by mark
dipende!
Ci sono script che non possiedono l'header come da te proposto ma sono script.
A mio avviso dipende da cosa vuole il docente, ci sono script di tipo diverso, il comando file li stana tutti.

Di solito poi gli script ash hanno l'estensione sh e non txt, prova a fare una ricerca in minix ne trovi a volontà.


Ho inserito -name *.txt perchè lo richiedeva l'esercizio "Trovate tutti i file di testo" ... quindi ho dedotto che per file di testo intendesse ".txt"

Comunque grazie per le dritte!

Visto che ci sono ti domando quest'altro esercizio:

•Trovare l'utente col file piu' recente nel sistema

code:
#!/bin/sh USERS=$(cut -d : -f 1 < /etc/passwd | sort -f | uniq); for us in $USERS; do echo "L'utente $us ha modificato" find / -type f -mtime -1 | sort -nr | head -1 done


Ho fatto questo script, il problema è che lo script stampa tutti gli utenti, non mi stampa SOLO l'utente con il file più recente nel sistema, come posso ottenere solo l'utente con il file più recente nel sistema ?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 08-09-2009 19:14:

•Trovare l'utente col file piu' recente nel sistema

code:
find / -type f -user root -mtime -1 | xargs ls -T | tr -s ' ' ' '


Domanda: E' possibile utilizzare il sort con delle date ?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 08-09-2009 20:51:

Originally posted by xSharKMaNx
[B]Ho inserito -name *.txt perchè lo richiedeva l'esercizio "Trovate tutti i file di testo" ... quindi ho dedotto che per file di testo intendesse ".txt"


teniamoci buone le due soluzioni che adatteremo in base alle domande del docente

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by kirka85 on 08-09-2009 23:09:

nell'immagine che si usa all'esame ci sono Vim o mined?
grazie
ciao

__________________
:bubble:


Posted by mark on 09-09-2009 07:27:

Originally posted by xSharKMaNx


•Trovare l'utente col file piu' recente nel sistema

code:
#!/bin/sh USERS=$(cut -d : -f 1 < /etc/passwd | sort -f | uniq); for us in $USERS; do echo "L'utente $us ha modificato" find / -type f -mtime -1 | sort -nr | head -1 done


io ho usato il comando stat per ricavare il timestamp (mtime) e lo user(uid).
A mio modesto parere il timestamp è più preciso del generico 24 ore passato alla find con -mtime -1 però, magari va bene lo stesso come fai tu.

Per la tua domanda: se metti un exito 0 prime del done esci dopo il primo output


p.s.
non ti manca un $us ne find del ciclo for ?

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 09-09-2009 08:30:

Originally posted by mark
p.s.
non ti manca un $us ne find del ciclo for ?


Mi posteresti gentilmente lo svolgimento dell'esercizio ?

Si nel find ho dimenticato il test su -user.

Grazie

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 09-09-2009 08:38:

code:
#!/bin/sh USERS=$(cut -d : -f 1 < /etc/passwd | sort -f | uniq); for us in $USERS; do echo "L'utente $us ha modificato" find / -type f -mtime -1 -user $us | sort -nr | head -1 done


però così com'è se un utente non ha modificato nulla nelle 24 ore non viene trovato alcun file

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by mark on 09-09-2009 08:54:

un altro sistema potrebbe essere questo basato sul timestamp

code:
for l in $(find / -type f -mtime -1) do t=$(stat -mtime $l) u=$(stat -uid $l) echo $t $u $l done | sort +0 -n

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 09-09-2009 09:22:

Originally posted by mark
code:
#!/bin/sh USERS=$(cut -d : -f 1 < /etc/passwd | sort -f | uniq); for us in $USERS; do echo "L'utente $us ha modificato" find / -type f -mtime -1 -user $us | sort -nr | head -1 done


però così com'è se un utente non ha modificato nulla nelle 24 ore non viene trovato alcun file


Quello non è un problema, basta inserire una condizione dopo il for del tipo:

code:
FILE=$(find / -type f -user $us -mtime -1 | sort -nr | head -1) if [ "$FILE" != "" ]; then File Trovato else File non trovato

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 09-09-2009 10:20:

Trovare il numero di file che hanno blocchi dispari

ipotizzando che i blocchi siano da 512 byte

code:
DIM_BLOCCO=512 find / -type f > tmp while read l do nbl=$(expr $(expr $(stat -size $l) / $DIM_BLOCCO) % 2) if [ $nbl -eq 0 ] then echo nome file: $l fi done < tmp rm tmp

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 09-09-2009 11:59:

•Trovare l'utente col file piu' recente nel sistema

code:
#!/bin/sh USERS=$(cut -d -f 1 < /etc/passwd); for us in $USERS; do FILE=$(find / -type f -user $us -mtime -1 | xargs ls -T | tr -s ' ' ' ' | cut -d ' ' -f 8, 10 | sort -n | tail - ); if [ "$FILE" != '' ]; then echo $FILE:$us fi done | sort - n | tail -1


__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 09-09-2009 14:55:

Trovare tutti gli script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !


non trovo nulla di semplice per copiare file da una directory ad
un'altra mantenendo inalterato il path, solo script incasinati

cp -pR o simile funziona sse la directory di destinazione esiste già

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 09-09-2009 15:07:

Originally posted by mark
Trovare tutti gli script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !


non trovo nulla di semplice per copiare file da una directory ad
un'altra mantenendo inalterato il path, solo script incasinati

cp -pR o simile funziona sse la directory di destinazione esiste già


Dai post precedenti ho trovato queste due possibilità:

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


oppure

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


Prova un pò

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by xSharKMaNx on 09-09-2009 15:09:

•Elencare i tre utenti che hanno il maggior numero di file nel sistema

code:
USERS=$(cut -d : -f 1 < /etc/passwd | uniq); for us in $USERS; do NFILE=$(find / -type f -user $us | wc -l); echo $NFILE:$us done | sort -nr | head -3

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Spr1gg4N on 09-09-2009 15:47:

Originally posted by xSharKMaNx
•Elencare i tre utenti che hanno il maggior numero di file nel sistema

code:
USERS=$(cut -d : -f 1 < /etc/passwd | uniq); for us in $USERS; do NFILE=$(find / -type f -user $us | wc -l); echo $NFILE:$us done | sort -nr | head -3


scusa ma mandando in pipe l'output di find sull'utente root non ti da errore di Out of Space?


Posted by xSharKMaNx on 09-09-2009 15:52:

Originally posted by Spr1gg4N
scusa ma mandando in pipe l'output di find sull'utente root non ti da errore di Out of Space?


No, non mi ha dato nessun tipo di errore!
Ho utilizzato l'ambiente dato da Martignoni, perchè a te va in Out of Space?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by Spr1gg4N on 09-09-2009 15:58:

Originally posted by xSharKMaNx
No, non mi ha dato nessun tipo di errore!
Ho utilizzato l'ambiente dato da Martignoni, perchè a te va in Out of Space?


eh si infatti se vedi nel post dove ho raccolto alcuni script ho sempre utilizzato un file temporaneo proprio per questo fatto: perchè puntualmente mi va in out of space (in effetti tutti i file dell'utente root partendo da / sono molti...strano che non ti dia errore...bha)

EDIT:
-------------
Ora provando a riscriverlo non mi da errore....bho non so che cavolo avevo fatto allora ^_^


Posted by mark on 09-09-2009 18:34:

Originally posted by xSharKMaNx
Dai post precedenti ho trovato queste due possibilità:

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


oppure

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


Prova un pò



il problema è che directory di destinazione deve esistere altrimenti si ha un errore esempio:

cp -r /usr/adm /tmp ------ tutto ok

cp -r /usr/adm /tmp/usr ---- errore

sia in ambiente DOS di windows che in linux eventuali sotto_directory vengonn create automaticamente

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by mark on 09-09-2009 18:39:

Originally posted by Spr1gg4N
eh si infatti se vedi nel post dove ho raccolto alcuni script ho sempre utilizzato un file temporaneo proprio per questo fatto: perchè puntualmente mi va in out of space (in effetti tutti i file dell'utente root partendo da / sono molti...strano che non ti dia errore...bha)

EDIT:
-------------
Ora provando a riscriverlo non mi da errore....bho non so che cavolo avevo fatto allora ^_^


l'ho provato pure io e funziona però anch'io ho preso l'abitudine del file temporaneo per evitare eventuali errori

con file temporaneo, la modifica è semplice

code:
cut -d : -f 1 < /etc/passwd | uniq > tmp while read us; do NFILE=$(find / -type f -user $us | wc -l); echo $NFILE:$us done < tmp | sort -nr | head -3

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 09-09-2009 18:57:

Trovare tutti gli script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !

Sto scimmiando con questo esercizio

Ho pensato una cosa

code:
#!/bin/sh mkdir -p /tmp/script; /find -type f -size +2 | xargs grep -l "#!/bin/sh" | xargs tar cvf /tmp/script/archivio.tar


In questo modo:
- Creo la cartella
- Copio il tar con tutti i file all'interno nella cartella richiesta

Domanda: Come faccio adesso ad estrarli? :)

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 09-09-2009 19:09:

Originally posted by xSharKMaNx
Trovare tutti gli script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !

Sto scimmiando con questo esercizio

Ho pensato una cosa

code:
#!/bin/sh mkdir -p /tmp/script; /find -type f -size +2 | xargs grep -l "#!/bin/sh" | xargs tar cvf /tmp/script/archivio.tar


In questo modo:
- Creo la cartella
- Copio il tar con tutti i file all'interno nella cartella richiesta

Domanda: Come faccio adesso ad estrarli? :)



perchè +2 ?
non è -2 ?

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 09-09-2009 19:18:

Originally posted by mark
perchè +2 ?
non è -2 ?


Si! Pensavo maggiori di 1K pardom
Controlla i PM

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 09-09-2009 19:35:

qui spiega come fare ma a me non funziona

http://unix.ittoolbox.com/groups/te...another-1677099

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by mark on 15-09-2009 18:40:

Originally posted by Simaldeff
confermo una cosa :
prima di tutto ho fatto il test in una cartella in cui ho creato 3 file di cui uno in chmod 755

chmod 755 try.sh
gli altri in 644 (default se si creano con elvis)

con un
find /mnt/[lamiacartella] -type f -perm -1

mi ha trovato il file eseguibile. Poi con la seguente situazione :
chmod 777 try.sh
chmod 676 try2.sh

e usando lo stesso find mi ha trovato sollo quello in 777
conclusione -perm -1 guarda solo il primo numero.

confermo che i +1 +111 /1 /111 sono inutile ... non danno erore ma non danno nessun risultato di ricerca

la domanda e' dunque : Basta che sia eseguibile dall' user o deve essere eseguibile da tutti?

se basta il user allora basta la linea di comando ... seno bisogna fare un script shell che faccia tutti i casi di permesso ... *sigh*



ne approfitto per dire la mia anche se in ritardo di due anni :D

find / -type f -perm +111
trova tutti e solo i file che hanno il bit di esecuzione settato

find / -type f -perm -111
trova tutti i file che hanno il bit di esecuzione settato indifferentemente dagli altri bit rw

in definitiva col segno + vengono ricercati --x--x--x mentre col -qualsiasi configurazione va bene, basta che siano settati i parametri x

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by xSharKMaNx on 15-09-2009 20:39:

•Trovare la dimensione di tutti i file "*.c"

code:
find / -type f -name "*.c" | xargs ls -s | awk '{SUM += $1} END {print SUM}'


code:
find / -type f -name "*.c" [ ricerco tutti i file con estensione ".c"] xargs ls -s [visualizzo nella prima colonna la dimensione in kb ] awk '{SUM += $1} END {print SUM}' [ somma la prima colonna e stampa il risultato ]


Questo esercizio può essere svolto in moltissimi modi, io ho provato questa soluzione!

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 15-09-2009 21:55:

Originally posted by xSharKMaNx
•Trovare la dimensione di tutti i file "*.c"

code:
find / -type f -name "*.c" | xargs ls -s | awk '{SUM += $1} END {print SUM}'


code:
find / -type f -name "*.c" [ ricerco tutti i file con estensione ".c"] xargs ls -s [visualizzo nella prima colonna la dimensione in kb ] awk '{SUM += $1} END {print SUM}' [ somma la prima colonna e stampa il risultato ]


Questo esercizio può essere svolto in moltissimi modi, io ho provato questa soluzione!



molto potente awk, però se devi stampare ad esempio i 5 file .c di dimensioni maggiori diventa problematico

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


Posted by fain182 on 15-09-2009 23:11:

Originally posted by Spr1gg4N
eh si infatti se vedi nel post dove ho raccolto alcuni script ho sempre utilizzato un file temporaneo proprio per questo fatto: perchè puntualmente mi va in out of space (in effetti tutti i file dell'utente root partendo da / sono molti...strano che non ti dia errore...bha)

EDIT:
-------------
Ora provando a riscriverlo non mi da errore....bho non so che cavolo avevo fatto allora ^_^


il problema dell'out of space generalmente lo da quando metti tanti dati come argomento ad un for, perchè in questo caso (suppongo) deve immagazzinare tutti i dati e poi prenderli uno ad uno..
nelle pipe invece l'errore dell'out of space non viene mai dato, perchè i dati vengono passati alla seconda applicazione poco a poco, quindi la shell non ha bisogno di tenerli tutti insieme in memoria.

sono solo supposizioni, ma dai tentativi che avevo fatto mi pare una ipotesi realistica..


Posted by xSharKMaNx on 16-09-2009 09:34:

Originally posted by mark
molto potente awk, però se devi stampare ad esempio i 5 file .c di dimensioni maggiori diventa problematico


E' un pò diverso, se devi selezionare i 5 file ".c" di dimensioni maggiori fai semplicemente:

code:
find / -type -name "*.c" | xargs du | sort -nr | head -5


L'awk utilizzato nell'esercizio precedente ti evita di effettuare un loop per effettuare la sommatoria.

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by mark on 16-09-2009 10:14:

Originally posted by xSharKMaNx
E' un pò diverso, se devi selezionare i 5 file ".c" di dimensioni maggiori fai semplicemente:

code:
find / -type -name "*.c" | xargs du | sort -nr | head -5


L'awk utilizzato nell'esercizio precedente ti evita di effettuare un loop per effettuare la sommatoria.


uhm...sai che stavo pensando che invece sia possibile anche con awk ?

Trovare il processo con pid dispari che occupa più spazio in memoria

prima versione
code:
ps -axl | tr -s " " : | for i in $(cut -d : -f 5-9); do pid$=(echo $i | cut -d -f 1); sz$=(echo $i | cut -d -f 4); if [ $pid % 2 -eq 1 -a $sz > 0 ]; then echo $pid $sz; fi; done; | sort +1 -n | tail -1


seconda versione con awk
code:
ps -axl | awk '{if($4 % 2 && $7 > 0) print $4, $7}' | sort +1 -n

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


All times are GMT. The time now is 00:51. 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.