.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 Bennyk on 19-06-2007 16:05:

Esame di laboratorio (Giugno 2007) - Domande

Ciao a tutti,
elenco alcune domande raccolte oggi durante la prova.

Shell:

- trovare il file più "grosso" sul sistema
- archiviare i files più grandi di 5k e più piccoli di 100k
- copiare files da una cartella all'altra mantenendo inalterati permessi
- trovare tutti i files eseguibili > 5k e evidenziando i 5 più grandi
- archiviare i files modificati nell'ultima settimana
- spostare tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra
- trovare i tre files più grossi per ogni utente
- trovare il processo che occcupa più memoria ram
- archiviare tutti i files che contengono la parola "login"
- calcolare lo spazio occupato da un utente (dai suoi files)
- trovare il file più "grosso" per ogni utente


Kernel:

- modificare il kernel in modo che alla pressione di F8 appaia una scritta sulla shell
- stampare un messaggio ogni volta che si esce da un processo, in qualsiasi modo (eg: kill, term, ...)


Sul kernel sono un pò pochine perchè pochi ci sono arrivati, chiunque abbia altre informazioni o dritte aggiunga...

Non sarebbe male anche avere qualche soluzione fatta con MINIX 3.


Posted by n3o on 19-06-2007 19:55:

1) Specificare l'occupazione totale di un utente in un sistema (somma delle dimensioni dei suoi file...)

code:
#!/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

Molte righe di codice sono controlli che potete saltare all'esame...

2) Per ogni utente del sistema specificare qual è il suo file di dimensioni maggiori
code:
#!/bin/sh # Per ogni utente trovare il suo file di dimensione maggiore for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do FILE=$(find / -type f -user $UID | xargs du | sort -nr | head -1) if [ "$FILE" != "" ]; then DIM=$(echo "$FILE" | cut -f 1) NOME=$(echo "$FILE" | cut -f 2) echo "UID: $UID => File: $NOME ($DIM KB)" else echo "UID: $UID => Nessun file trovato" fi done

Anche qui i controlli e le chicche per stampare meglio l'output sono opzionali

3) Stampare "MUOIO!" ogni volta che un processo termina
Personalmente ho solo aggiunto questa riga:

kprintf ("MUOIO!\n");

Nei file:

/usr/src/kernel/system/do_exit.c
/usr/src/kernel/system/do_kill.c

nelle funzioni con il rispettivo nome [do_exit() e do_kill()]

C'era una postilla ovvero di far stampare ance il PID del processo.
Era un problema perchè all'interno del kernel il proc_nr non è il PID della tabella dei processi di PM ma il numero del processo della tabella del Kernel che non sono lo stesso numero quindi pescare quello giusto era comlicato e l'ora si faceva tarda...
quindi il prof mi ha detto che se non lo facevo non era importante e non mi ha penalizzato. (ma questo rimanga tra me e voi...)

__________________
The answer is blowing in the wind...


Posted by darkman13 on 19-06-2007 20:16:

Grandi ragazzi, grazie 10000000000 ;-)


Posted by maxj8 on 20-06-2007 14:13:

La domanda di Shell di 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 (banale) e di copiare anche tutto il path dei file nella nuova cartella (meno banale).

Per il Kernel io avevo da far comparire 'chiuso' ogni volta che un file viene chiuso. Ho preso da stdio il riferimento alla funzione fclose.c e l'ho modificata.
A dire la verità non ha funzionato alla fine ma perchè la macchina anche dopo la ricompilazione continuava a partire col vecchio kernel. Cmq alla fine al docente andava bene lo stesso perchè la cosa importante è far vedere di sapere dove mettere mano e ragionarci sopra, anche se poi il risultato non è esatto non fa nulla.

E ora...speriamo che all'orale non succedano follie...


Posted by drakess81 on 20-06-2007 15:08:

Usciti i risultati di laboratorio... che strage!!! Ora restano solo l'appello di luglio e settembre... poi chi non passa ripete tutto??? Mi sembr assurdo... Ho fatto i due compitini prendendo B e 2 punti, magari faccio un buon orale e se sbaglio l'appello LAB di settembre perdo tutto? Mi sembra assurdo... Sono ignorante sui comandi scell di Minix, non ho potuto seguire il LAB e sulle slide c'è poco... videolezioni niente... non è giusto...datemi un buon libro che me lo studio!!!


Posted by darkman13 on 20-06-2007 15:09:

a chi lo dici


Posted by n3o on 20-06-2007 15:23:

Originally posted by drakess81
Sono ignorante sui comandi scell di Minix, non ho potuto seguire il LAB e sulle slide c'è poco... videolezioni niente... non è giusto...datemi un buon libro che me lo studio!!!

Per l'esercizio del partizionamento trovi un thread apposta.
Esercizi sulla shell ne trovi sulla wiki di sis lab con anche delle spiegazioni sui comandi base.
Per la parte kernel c'è una spiegazione di un esercizio sempre nelle pagine della wiki di sis lab.
C'è poi questo thread che spero sia ampliato...

Non è molto ma per chi non ha seguito il corso credo non ci sia altro.

PS: puoi leggerti "advanced bash scripting" che lo trovi su google controllando però quello che fai su Minix perchè la guida è fatta per bash+linux non sh+minix

PS2: per conoscere meglio i comandi in Minix batti:
man <comando> e ti dice tutte le varie opzioni che non sei tenuto a sapere
La lista dei comandi dispinibili la trovi facendo
ls /usr/bin

__________________
The answer is blowing in the wind...


Posted by bog86 on 20-06-2007 16:59:

Esempio la prima: - trovare il file più "grosso" sul sistema
Potrebbe andare bene così?
find / -name "*.*" | xargs du -s | sort -n | tail -n 1


Posted by n3o on 20-06-2007 18:59:

Io userei:
find / -type f | xargs du | sort -n | tail -1

__________________
The answer is blowing in the wind...


Posted by amari on 20-06-2007 21:41:

Modifica al kernel richiesta:

impedire che vengano creati file il cui nome cominci con la lettera m.

Intervento individuato: nei sorgenti del pm, nel file open.c c'è una funzione do_creat() (sì senza la e :)).

Uno dei parametri sembra essere il nome. Basterebbe quindi inserire un if alla inizio della funzione che controlla il nome e se quest'ultimo comincia con m, terminare con errore. In realtà il Prof. Monga ha detto che quello non è proprio il nome del file ma una stringa che lo rappresenta (una specie di codifica interna di Minix). Ma la risposta andava bene ugualmente.

Ciao a tutti
A.


Posted by n3o on 21-06-2007 00:45:

Ricordo che la tua domanda è stata fatta a lezione...
Il nome di un file lo si trovava passando per:
/usr/src/servers/fs/open.c -> do_creat() -> common_open() -> new_node()
In questa funzione nella variabile string c'è il nome del file e basta aggiungere dopo la riga:
*ldirp = parse_path(path, string, opaque ? LAST_DIR : LAST_DIR_EATSYM);
Il seguente pezzo di codice:

code:
if (*string == 'M' || *string == 'm') { printf ("Niente nomi che iniziano con emme!!!\n"); return (NIL_INODE); }

Il side-effect è che il sistema non è ovviamente più in grado di aprire file che inizino con emme!!!

Ottimo che il thread si allarga!!!
è possibile chiedere di evidenziare il post mettendolo in sticky?

__________________
The answer is blowing in the wind...


Posted by amari on 21-06-2007 09:18:

Ciao,

in effetti avevo scritto male... ovviamente il server in questione era il fs e non il pm.

Tieni conto però della nota di Monga... io non ho provato ma mi fido :)

Ciao
A.


Posted by bog86 on 21-06-2007 14:31:

Altra domanda: - archiviare i files più grandi di 5k e più piccoli di 100k?
con "find / -type f -size -100 | xargs tar cvf archivio.tar" archivio solo i file piu piccoli di 100k, ma come faccio a fare entrambi contemporaneamente?


Posted by n3o on 21-06-2007 15:15:

Prova con
find / -type f -size +5 -a -size -100 | xargs tar cvf archivio.tar

__________________
The answer is blowing in the wind...


Posted by bog86 on 21-06-2007 16:14:

Grazie n30...
poi ho provato a far girare il tuo script x trovare il file maggiore di ogni utente ma mi stampa sempre nessun file trovato fino a UID 9999.
Altra cosa x risp alla domanda -spostare(ho copiato...) tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra. ho usato "cp -r $(find / -name "m*.*") cartella"


Posted by n3o on 21-06-2007 18:34:

mmm...
A me funziona...prova a vedere su shell cosa fanno i singoli comandi dello script e poi vedi dove sta la differenza anche se mi sembra strano...
Allego una bella immagine...

__________________
The answer is blowing in the wind...


Posted by n3o on 22-06-2007 01:06:

__________________
The answer is blowing in the wind...


Posted by Paul03 on 22-06-2007 09:19:

Raga mi spiegato cosa servono e come funzionano argx, argv? Ciao e grazie


Posted by n3o on 22-06-2007 11:34:

Se intendi i parametri del main() del C:
int main (int argc, char **argv)
Nel primo c'è il numero degli argomenti passati in linea di comando + il nome del file stesso, argc = (#{argomenti} + 1) , argv è un array di stringhe che contiene gli argomenti veri e propri.
argv[0] è il nome del file
argv[1] è il 1° argomento, e cos' via...

argx non so cosa sia...

__________________
The answer is blowing in the wind...


Posted by bog86 on 26-06-2007 14:38:

# 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...
n30 riusciresti a darmi una mano x far funzionare il tuo script (il primo) xchè sto diventando matto...
è la riga "ID="$(grep "^$1" /etc/passwd | cut -f 3 -d :)"" che sembra nn andare; è come se nn potessi accedere alla cartella passwd.
e cosa è "^$1"?
thx.....


Posted by Viry on 26-06-2007 15:04:

Originally posted by bog86
#
e cosa è "^$1"?

$1 e' il parametro che passi allo script quando lo esegui, cioe' il nome dell'utente di cui stai cercando lo spazio utilizzato.
^$1 significa che grep cerca la stringa che inizia (^) con il nome specificate nel parametro $1

__________________
When once you have tasted flight, you will walk the earth, forever more, with your eyes turned skyward. For there you have been, and there you long to return.

“Dovere, tempo, destino, tutto tende a separarci e, di fatto, ci separa. Ma il sentimento non conosce frontiere e mi unisce a te come se avessi sempre la mia mano sulla tua"


Posted by n3o on 26-06-2007 17:30:

Originally posted by bog86
ID="$(grep "^$1" /etc/passwd | cut -f 3 -d :)" che sembra nn andare; è come se nn potessi accedere alla cartella passwd.


mmm... passwd non è una cartella ma un file, ora non ricordo i permessi legati a quel file ma per sicurezza come nell'esame esegui lo scipt come root.

Il significato di quella riga è:

Metti nella variabile ID il risultato del comando grep che cerca per ogni riga del file /etc/passwd una stringa passata come parametro (il nome dell'utente desiderato) a partire dall'inizio della riga; se viene trovata una corrispondenza (unica ovviamente) estrae dalla riga il terzo campo separato da ':' che è l' UID dell'utente.

Questo UID sarà da usare con find per restringerne il campo ad uno specifico utente...

__________________
The answer is blowing in the wind...


Posted by antares85 on 29-06-2007 17:42:

Scusate, ma sono in alto mare, non con gli esercizi, ma con l'installazione di Qemu/Minix!!!
Ho scaricato l'immagine dal wiki del prof, apro il file zip e mi trovo qemu.debian...con cosa lo apro? o lo devo mettere da qualche parte? non c'è il file qemu.bat e gli altri come scritto qui e come c'era in laboratorio...aiuto sigh sigh :'(

(un'anima pia mi può spiegare passo passo come a un bambino analfabeta come fare per installare il tutto..?)

GRAZIE!!! ps lavoro in Win


Posted by n3o on 29-06-2007 21:18:

Allora, vediamo di fare le cose passo per passo

  1. Scarica QEMU >QUI<
  2. Estrai la cartella è qemu-0.9.0-windows e il suo contenuto
  3. Scarica l'immagine pronta di Minix 3 >QUI<
  4. Sposta l'immagine di minix all'interno della cartella qemu-0.9.0-windows
  5. Sempre nella cartella qemu-0.9.0-windows è presente un file qemu-win.bat
  6. Tasto destro -> Modifica (o aprilo con Blocco Note)
  7. Localizza la riga:
    qemu.exe -L . -m 128 -hda linux.img -soundhw all -localtime -M isapc
    e modificala con
    qemu.exe -L . -m 128 -hda minix3.qcow -soundhw all -localtime -M isapc
  8. Salva e cliccaci sopra per avviare Minix 3 (ignora eventuali warning)
  9. Autenticati come root senza password
  10. Per arrestare il sistema scrivi shutdown e poi al boot loader digita off
That's all folks !

__________________
The answer is blowing in the wind...


Posted by antares85 on 30-06-2007 12:22:

n3o, grazie di tutto cuore, probabilmente sbagliavo a scaricare le varie cose :p
GRAAAZIEEE


Posted by darkman13 on 04-07-2007 11:28:

Ciao, avevo letto in qualche thread di un manuale consigliato per le eserictazioni su shell Unix. Qualcuno mi sa dire qualcosa approposito???


Posted by n3o on 04-07-2007 12:16:

Advanced Bash Scripting (su google lo trovi subito), molto completo (trovi tutto ciò che ti serve) ma estremamente ridondante riguardo alle poche cose che devi sapere per passare l'esame. (in più è per bash e non per ash, quindi controlla sempre l'effettivo funzionamento degli script, anche se quelli base dovrebbero girare tranquillamente).

Io ti consiglio di leggerti i 3 o 4 thread sull'esame in questo forum che sono bei pieni di esempi fatti sia su partizionamento, sia su shell che su kernel.
Poi guardati il sito del prof in cui ci sono vari script di esempio e descrizioni di comandi nonchè lo scarno materiale delle lezioni...

Se ti rimangono dei dubbi posta a volontà...

__________________
The answer is blowing in the wind...


Posted by darkman13 on 04-07-2007 23:04:

Grazie mille n3o


Posted by n3o on 06-07-2007 20:19:

Altri due esercizi d'esame che mi ha passato un amico

  1. Trovare i tre files più grossi per ogni utente
    code:
    #!/bin/sh for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do echo "Utente $UID:" find / -type f -user $UID | xargs du | sort -nr | head -3 done
    Ricordate il chmod +x <script_name> per renderlo eseguibile!

  2. Archiviare tutti i files che contengono la parola "login"
    find / -type f | xargs grep -l "login" | xargs tar -cvf archivio.tar

__________________
The answer is blowing in the wind...


Posted by poi_1969 on 09-07-2007 13:59:

ho problemi nel modificare il kernel

ho semplicemente aggiunto kprintf("muoio"); in do_exit e do_Kill.
Ricompilato , ma non funziona.

Sapete indicarmi qual'è l'esatta procedura di ricompilazione del kernel, peche trentini ne ha indicato una che è diversa da quella di monga.

Grazie


Posted by amari on 09-07-2007 14:12:

Hai un errore nella ricompilazione del kernel o semplicemente no hai nessun output quando un processo termina?


Posted by poi_1969 on 09-07-2007 14:25:

la ricompilazione va a buon fine perche mi crea il nuovo file in /boot/image/

ma non vedo nulla quando termina un programma

per ricompilare usa la procedura monga
cd /usr/src/tools
make clean
make image
make hdboot
reboot

Dove sbagli?

grazie


Posted by n3o on 09-07-2007 14:36:

In /usr/src/tools/
make clean (per sicurezza ripartiamo da zero)
make image
make hdboot (credo sostituisca anche make image, provate...)

Ci sono poi due casi particolari

  1. Modifica delle librerie: prima di make hdboot inserite anche
    make libraries (mooolto lento)
  2. Esercizio Tasto F8 (vedi thread apposito): sempre prima di make hdboot scrivete
    make services

Il tuo problema sai che forse è nel reboot?!
Prova a fare un bel shutdown e al riavvio quando sei al boot loader non fare nessuna scelta, lascia che il sistema parta dopo pochi secondi [A questo proposito me ne sono successe di tutte come a te...]

__________________
The answer is blowing in the wind...


Posted by poi_1969 on 09-07-2007 14:51:

risolto con shutdown
grazie mille delle spiegazioni

Ma tu hai gia fatto la prova di laboratorio?
Com'è andata

ciao


Posted by n3o on 09-07-2007 15:01:

Meglio non poteva andare... :cool:

Comunque non preoccupatevi troppo del limite di tempo perchè sono abbastanza umani e disponibili e a me personalmente nell'esercizio di scripting mi hanno fatto riloggare... :)

Se seguite i vari thread di preparazione:

In bocca al lupo a tutti :muhehe: (ma andrà bene...)

__________________
The answer is blowing in the wind...


Posted by antares85 on 09-07-2007 15:08:

scusate ma per l'esercizio di shell bisogna creare un file con vi dove si inserisce il comando o basta inserirlo direttamente nella linea di comando di qemu/minix?
e riguardo la documentazione consultabile on line, si intende proprio internet quindi anche dsy o altro o solo le slide del prof o gli es del wiki?


Posted by poi_1969 on 09-07-2007 15:19:

n3o i tempi come sono 10-30+30 per le tre prove?

Cosa intendi per partizione giusta?
Per lo script ho visto che in alcune soluzioni bisognava fare una shell script, quindi tanto semplice non è

ciao


Posted by n3o on 09-07-2007 15:42:

Originally posted by antares85
scusate ma per l'esercizio di shell bisogna creare un file con vi dove si inserisce il comando o basta inserirlo direttamente nella linea di comando di qemu/minix?
e riguardo la documentazione consultabile on line, si intende proprio internet quindi anche dsy o altro o solo le slide del prof o gli es del wiki?
Originally posted by poi_1969
Per lo script ho visto che in alcune soluzioni bisognava fare una shell script, quindi tanto semplice non è
Lo script più complicato che può capitarti sono 3-4 linee di codice (di solito un ciclo con un comando find come istruzione).

Gli esempi di script più grossi includono solo più formattazione e controlli, non richiesti in sede di esame.

Come buon esempio di complessità prendete questo script:
Trovare i tre files più grossi per ogni utente (soluzione già proposta poco più in alto)
Avete due scelte
  1. Creare un file script, renderlo eseguibile con chmod +x <script_name> e avviarlo con ./<script_name>
  2. Più semplicemente scrivete su linea di comando:
    code:
    # for UID in $(cut /etc/passwd -d : -f 3 | sort -n | uniq); do <invio> > echo "Utente $UID:" <invio> > find / -type f -user $UID | xargs du | sort -nr | head -3; done <invio>
Originally posted by antares85
Cosa intendi per partizione giusta?
Intendevo solo che, a meno che tu sappia a memoria il numero che identifica un tipo di partizione (Minix, Linux, Fat...), devi scorrere l'elenco per trovarlo, tutto qui! :D

Riguardo ai tempi sono 10+30+30 ma sono moooolto flessibili... :D

__________________
The answer is blowing in the wind...


Posted by poi_1969 on 09-07-2007 15:54:

MITICO!
SEI MITICO!

ciao


Posted by antares85 on 09-07-2007 16:08:

per quello che riguarda il materiale consultabile online che mi dite?


Posted by n3o on 09-07-2007 17:18:

Il materiale a disposizione é:

__________________
The answer is blowing in the wind...


Posted by antares85 on 09-07-2007 17:20:

BELLA!


Posted by antares85 on 10-07-2007 21:20:

Scusate, per chi ha fatto la prima prova di laboratorio, per l'esercizio di shell il prof ti dice che comando usare come faceva a lezione? tipo: trovare il file più grosso utilizzando tail (o bisogna saperlo che si deve usare quel comando particolare?)

Grazie a tutti


Posted by NoWhereMan on 11-07-2007 09:32:

ciao,

due cose:

n3o, per trovare il processo che occupa più memoria hai usato

code:
ps -axl | sort +7 -nr | head -1 | tr -s ' ' ' ' | cut -d ' ' -f 8,12


ma forse basta

code:
ps -axl | sort +7 -n | tail -1


no?

inoltre penso non serva passare in uniq il contenuto di /etc/passwd e (non documentato) pare che i parametro -user di find accetti anche il nome utente oltre all'UID (contrariamente a quanto dice la manpage)

ciao, e grazie a te e a tutti per gli esempi :)

@antares85: credo proprio di no :D


Posted by n3o on 11-07-2007 10:34:

@NoWhereMan: Si si basta anche la semplificazione che hai fatto.
Io ho solo estratto gli unici due campi di interesse, ma è una formattazione in più che in sede di esame serve forse ad avere il massimo dei punti.

Ho poi controllato ciò che hai detto e in effetti contrariamente a ciò che dice il manuale sembra funzionare anche il nome dell'utente come parametro dell'opzione user del find :D

Ovvio che se ti chiede di scorrere tutti gli utenti devi comunque lavorare sul file /etc/passwd

Il comando uniq è fondamentale visto che in sede di esame c'erano più utenti con l'UID 0 (e si potrebbe creare anche più utenti con lo stesso nome mettendo mano a quel file, quindi è utile in ogni caso...)

@antares85: Non ti viene dato alcun suggerimento riguardo ai comandi da utilizzare, studiati la lista di quelli base (la trovi seguendo i link poco più sopra...)

__________________
The answer is blowing in the wind...


Posted by GiKappa on 12-07-2007 10:20:

ho una domanda:

ho letto il manuale di xargs, ma non riesco a capire quando va usato e quando no! ho visto che viene usato dopo una pipeline per comandi come tar o ls, ma perchè non si usa con comandi come sort o tail?

qualcuno mi può spiegare (anche in due righe) a cosa serve esattamente?

grazie!


Posted by n3o on 12-07-2007 10:49:

xargs è un comando utile per evitare l'errore Out of space che a volte compare se si utilizza il find.
La shell ha un limitato spazio per gestire un comando (credo 256 caratteri...) quindi se un input di un comando (rediretto anche con un pipe) supera tale limite sorge l'errore di cui sopra.
Per evitarlo si utilizza xargs che non fa altro che spezzare l'output del comando precedente in righe, e passare ogni riga al comando successivo, una alla volta.
Più importante, xargs cambia profondamente il comportamento dei comandi:

find / -type f | grep login

Questo comando cerca tra la lista dei file del sistema, un file il cui nome contenga la parola login

find / -type f | xargs grep login

In questo esempio xargs spezza la listona dei file del sistema e passa una riga per volta (quindi un nome di file per volta) a grep
(grep viene eseguito più volte, una volta per ogni riga).
Notate che il comportamento cambia moltissimo!!!
In questo caso il comando stampa tutti i file di sistema che contengono al loro interno la parola login

Nella maggior parte degli esempi sort e tail vengono usati sulle liste di file che genera find o in passi successivi, per questo non viene utilizzato xargs.

__________________
The answer is blowing in the wind...


Posted by GiKappa on 12-07-2007 11:05:

ok, grazie!

ho ancora un paio di dubbi:

ho provato a modificare un esercizio (quello di trovare tutti i file con all'interno la parola "login"), facendo in modo che invece che mettermeli in un archivio, me li scriva su un file .txt
allora ho provato a sostituire il comando del tar con > login.txt ma non mi ha inserito niente se non la riga "<stdio.h>"

dove ho sbagliato?

un'altra cosa: se ho un file .txt, che comando posso usare per farmelo vedere a video senza usare elvis?

grazie ancora


Posted by n3o on 12-07-2007 12:08:

Prova con:

find / -type f | xargs grep -l "login" >> list.txt

Il simbolo >> concatena ogni riga al termine del file, mentre > sovrascrive il file prima di aggiungere del contenuto

Per vedere un file senza elvis puoi:

__________________
The answer is blowing in the wind...


Posted by NoWhereMan on 12-07-2007 13:34:

Originally posted by n3o
[B]@NoWhereMan: Si si basta anche la semplificazione che hai fatto.
Io ho solo estratto gli unici due campi di interesse, ma è una formattazione in più che in sede di esame serve forse ad avere il massimo dei punti.


be', tecnicamente la domanda è "trovare il processo che occupa più memoria ram", non "trovare il PID e il nome del processo ecc ecc" :P

Ho poi controllato ciò che hai detto e in effetti contrariamente a ciò che dice il manuale sembra funzionare anche il nome dell'utente come parametro dell'opzione user del find :D

Ovvio che se ti chiede di scorrere tutti gli utenti devi comunque lavorare sul file /etc/passwd

Il comando uniq è fondamentale visto che in sede di esame c'erano più utenti con l'UID 0 (e si potrebbe creare anche più utenti con lo stesso nome mettendo mano a quel file, quindi è utile in ogni caso...)


anche qui, se vuoi è pignoleria da parte mia (e probabilmente hai comunque più ragione tu di me :P); molte volte ho fatto notare queste cretinate in altri frangenti, e ovviamente con professori che a domande precise non richiedono risposte puntuali (al contrario, le domande di questi vanno interpretate, come forse in questo caso)

Il punto è che se mi si chiede di trovare $informazione per ogni utente, allora anche se due utenti hanno lo stesso UID, sono comunque distinti (potrebbero comunque avere home e probabilmente username diversi)

d'altro canto usare anche 'uniq' dovrebbe mostrare di conoscere ulteriormente l'ambiente;

in definitiva la risposta corretta forse potrebbe essere fornire entrambe le alternative, motivandole.

:P

grazie per i consigli!


Posted by GiKappa on 12-07-2007 13:55:

Originally posted by n3o
Prova con:

find / -type f | xargs grep -l "login" >> list.txt

Il simbolo >> concatena ogni riga al termine del file, mentre > sovrascrive il file prima di aggiungere del contenuto

Per vedere un file senza elvis puoi:
  • cat file.txt
  • more file.txt (output paginato)


grazie! appena sono a casa provo a controllare!

ho come l'impressione che da perfetto coglione invece di cat facevo cut!:asd:

ma ho i permessi per controllare il file /ect/passwd?


Posted by n3o on 12-07-2007 14:22:

Originally posted by GiKappa
ma ho i permessi per controllare il file /ect/passwd?
Se ti autentichi come root non hai problemi di permessi :D (probabimente saranno rw-r--r--)
Originally posted by NoWhereMan
Il punto è che se mi si chiede di trovare $informazione per ogni utente, allora anche se due utenti hanno lo stesso UID, sono comunque distinti (potrebbero comunque avere home e probabilmente username diversi)
In un sistema non possono coesistere due utenti con UID uguale, credo sia stato un mageggio sul file /etc/passwd dei prof per gestire il sistema dei tempi dell'esame...
In una situazione normale non credo ci sia il problema.
In definitiva in sede di esame la situazione che mi sono trovato era di avere tre utenti diversi con UID 0 e lo script stampava lo stesso risultato per tre volte (ovviamente, il possessore di un file è localizzato tramite UID non username) e non era carino, quindi ho sistemato la situazione nel modo secondo me più efficiente... (ed è andata bene! :D ).

Sta ad ognuno risolvere i problemi estemporanei che si troverà all'esame come meglio crede (per non parlare di tutta la gente a cui si è bloccato il terminale :twisted: Salvate spesso e sperate che il demone scarichi sul disco il vostro lavoro!!!)

__________________
The answer is blowing in the wind...


Posted by NoWhereMan on 12-07-2007 14:52:

Originally posted by n3o
In un sistema non possono coesistere due utenti con UID uguale, credo sia stato un mageggio sul file /etc/passwd dei prof per gestire il sistema dei tempi dell'esame...


siccome credevo anch'io, per sicurezza ho letto man 5 passwd; UID, GID non devono necessariamente essere univoci.

in effetti ad esempio sui *BSD è presente un secondo account con privilegi di superuser (UID 0), oltre a root, cioè toor: uno dei due viene associato a una shell minimale e si usa in caso di disastri seri nel sistema. L'altro si usa per le normali attività amministrative.

comunque ignorando il trick di -uid $USERNAME stampare "utente $USERNAME" al posto dell'UID sarebbe stato complicato, e la ripetizione dello stesso "Utente N" più volte avrebbe potuto non fare un bell'effetto come dici tu :P

per non parlare di tutta la gente a cui si è bloccato il terminale :twisted:


:wall:


ciao!


Posted by antares85 on 13-07-2007 17:04:

@n3o(o chi mi sa risp): riguardo ai comandi messi in prima pagina di questo thread, non riesco a capire bene:
-esercizio trovare i file eseguibili >5k ecc... sono indispensabili i comandi xargs ls -l ; tr -s ' ' ' ' ?(questo nn ho capito bn cosa vuol dire...) ; e in cut si potrebbe eliminare -d ' '? (anche qst nn mi è chiaro)

-esercizio trovare processo che occupa + mem, non capisco perchè +7 in sort, se sia indispensabile il ps -axl (e se si perchè) all'inizio e ancora l'intero comando tr e cut che credo siano un lontano dialetto arabo/cinese per me :)

GRAZIE ANCORA!


Posted by antares85 on 13-07-2007 17:25:

visto che ci siamo, nel primo dei 2 listati lunghi, mi si può spiegare il significato di
if [ $# -ne 1 ]; then
echo "syntax: user_size <user_name>"
exit 1
fi

?


Posted by n3o on 13-07-2007 20:09:

Originally posted by antares85
visto che ci siamo, nel primo dei 2 listati lunghi, mi si può spiegare il significato di
if [ $# -ne 1 ]; then
echo "syntax: user_size <user_name>"
exit 1
fi

?
Se non passi un parametro in linea di comando genera un errore ed esce...

$# = numero argomenti in linea di comando
-ne 1 = not equal 1

La sintassi è: ./<nome_scipt> <nome_utente>

Ma in ogni caso l'ho messo se vuoi il massimo, altrimenti credo tu possa saltarlo tranquillamente. :D
Originally posted by antares85
esercizio trovare i file eseguibili >5k ecc... sono indispensabili i comandi xargs ls -l ; tr -s ' ' ' ' ?(questo nn ho capito bn cosa vuol dire...) ; e in cut si potrebbe eliminare -d ' '? (anche qst nn mi è chiaro)
Ho già analizzato il problema in un post precedente:
1) Per me un file è eseguibile se lo è per tutti (altrimenti farsi tutti i casi possibili è una macello...)
2) find / -type f -size +5 => tutti i file maggiorni di 5KB
3) xargs ls -l => per ogni file stampa le sue informazioni estese
4) grep "^-..x..x..x" => mantieni solo i file che all'inizio della riga di ls hanno il matching richiesto (. vuol dire qualsiasi carattere e ^ vuol dire inizio riga)
4) tr -s ' ' ' ' => comprimi tutti gli spazi tra le colonne in uno solo (' ' è uno spazio!)
5) cut -d ' ' -f 5,9 => estrai le colonne 5 e 9 (separate da spazio)

In toto:

find / -type f -size +5 | xargs ls -l | grep "^-..x..x..x" | tr -s ' ' ' ' | cut -d ' ' -f 5,9

Anche qui credo tu ti possa fermare al grep, magari aggiungi un more

find / -type f -size +5 | xargs ls -l | grep "^-..x..x..x" | more
Originally posted by antares85
esercizio trovare processo che occupa + mem, non capisco perchè +7 in sort, se sia indispensabile il ps -axl (e se si perchè) all'inizio e ancora l'intero comando tr e cut che credo siano un lontano dialetto arabo/cinese per me :)
sort +7 -n vuol dire "ordina numericamente (non alfabeticamente) considerando la settima colonna"
ps -alx => per far stampare più processi possibile :D (guarda il man)

Anche in questo caso gli ultimi comandi puoi saltarli, alla fine:

ps -alx | sort +7 -n | tail -1 oppure
ps -alx | sort +7 -nr | head -1 [Ho un'avversione personale ed immotivata per tail :D]

Ragazzi per ogni esercizio controllate come funziona passo per passo e poi valutate; se un comando in pipe o più servono solo per formattare meglio l'output considerate se mantenere lo stile o la semplicità!

__________________
The answer is blowing in the wind...


Posted by antares85 on 13-07-2007 20:37:

ecco non capisco come si fa a sapere da quali colonne prendere le info desiderate (sort +7 e -f 5,9, perchè proprio quelle?). c'è un qualche standard sempre uguale sul quale basarsi dove si vede ad ogni colonna quali info corrispondono?


Posted by NoWhereMan on 13-07-2007 22:03:

1) Per me un file è eseguibile se lo è per tutti (altrimenti farsi tutti i casi possibili è una macello...)


ecco una regex:
ls -l | grep '^[rw-]*x'
o anche (tenuto presente che x non compare mai all'inizio)
ls -l | grep '^[rw-]\+x' # non chiedetemi perché bisogna fare escape del + e non di *

trova tutti gli elementi della lista in cui all'inizio c'è una permutazione qualsiasi di (r,w,-) N volte seguita da un x. Il match è ovviamente al primo x trovato

naturalmente, 20 minuti solo per trovare la regex, quindi impossibile durante l'esame :D (e tra l'altro se non avessi detto tu la cosa del ls -l io starei ancora qui a smanettare con find . -perm che non va :D non mi vengono in mente altri sistemi...).

non per altro, è che ogni comando ha la sue particolari necessità di escaping quindi uno devi fare \+ un altro \{ mah...

peccato che nell'esame di LFA non ci sia un bel test di regex pratico :P


@antares85: in teoria le conti, ma occhio, perché nell'output di ps le colonne non sono sempre nello stesso numero (anche se sembra dalla formattazione) in alcuni casi hai (ad es)

code:
10 S 0 1 5 1 16 (wait) pm ? 0:00 init


(intuitiv. 10 colonne, in realtà (wait) pm sono DUE!)

in altri:
code:
10 W 0 26 5 1 16 pm ? 0:00 /usr/sbin/inet


10 colonne

o, peggio

code:
10 W 0 26 5 1 16 fs co 0:00 ps alx


intuitivamente 10 colonne, ma in realtà 11 (ps alx)

insomma una porcheria.

su linux che ho (ma stando a man sembrerebbe un'implementazione moderna comune immagino ad altri unix), ps è un po' meglio perché i campi vuoti sono contrassegnati almeno da un trattino;

nel nostro caso a parte estrarre il field del PID e in generale i primi 7 campi, dall'8 in poi si rischia :/

forse quello di minix è custom (e/o vecchio)


Posted by n3o on 13-07-2007 22:44:

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: )

__________________
The answer is blowing in the wind...


Posted by NoWhereMan on 14-07-2007 08:15:

Originally posted by n3o
Io sono convinto che l'esercizio incriminato loro sono convinti si possa fare con il find (ma in Minix non è vero! :evil: )


mi sa che hai ragione...


Posted by =kimi= on 14-07-2007 15:23:

ciao ragazzi,
scusate qualcuno mi puo spiegare il comando xargs per favore??? non lo capisco molto... neanche il suo utilizzo


Posted by NoWhereMan on 14-07-2007 15:38:

http://www.dsy.it/forum/showthread....mber=4#p439883c


Posted by Bennyk on 14-07-2007 15:52:

Lightbulb

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:

[...]


Io ho provato così (in MINIX):

find / -type f -size +10 -perm -111 | xargs ls -l | sort +6 -nr | head -5

e, seguendo il tuo criterio: "per me un file è eseguibile se lo è per tutti gli utenti" sembra funzionare.

Perchè: "I bit di permesso vengono controllati con il test -perm modalità. Se modalità non ha segno, i bit di permesso dei file devono combaciare perfettamente. Un - che precede i bit significa che tutti i bit di permesso devono essere impostati, ma non fa assunzioni sugli altri; un + è soddisfatto se uno qualsiasi dei bit è impostato."


Posted by NoWhereMan on 15-07-2007 06:55:

funziona anche

find / -type f -size +10 -perm -1

+1 o /1 non funzionano. -1 significa comunque x a tutti


Posted by RedAngel86 on 15-07-2007 11:07:

Non riesco a capire bene come funziona sto -perm, qualkuno potrebbe gentilmente spiegarmelo?


Posted by n3o on 15-07-2007 12:39:

code:
| owner (u) | group (g) | others (o)| +-----------+-----------+-----------+ | r w x | r w x | r w x | | 4 2 1 | 4 2 1 | 4 2 1 |
find / -perm 666
find / -perm a+rw (equivalente, a = all)
trova tutti i file che sono leggibili e modificabili da ogni utente

find / -perm 755
find / -perm u+rwx,g+rx,o+rx (equivalente)
trova tutti i file che sono leggibili, modificabili ed eseguibili da parte del proprietario, e che sono leggibili ed eseguibili dal gruppo e dagli altri

find / -perm -XXX
aggiungendo un meno prima dell'espressione ottale modifico il comportamento del find, indicando che voglio cercare tutti quei file il cui bit interessato è attivato, es:

find / -perm -111
trova tutti i file che hanno il flag "eseguibile" settato per ogni utente

find / -perm -661
trova tutti i file che hanno i flag "leggibile" e "modificabile" settati per il proprietario e il gruppo, e il flag "eseguibile" per gli altri
(gli altri permessi non specificati possono essere settati o no)

__________________
The answer is blowing in the wind...


Posted by liver82 on 15-07-2007 12:59:

Ciao ragazzi forse questo può essere d'aiuto, ho provato a cercare un modo per trovare tutti i file nascosti nel sistema:

find / -type f -name ".*"

la particolarità è l'uso delle virgolette...che non conoscevo. So che per la maggior parte di voi è una cosa banale ma magari qualcuno non lo sapeva. :-)


Posted by collo on 15-07-2007 15:47:

Unhappy

ciao n30 ho provato a creare lo script dell'esercizio che indicava di trovare lo spazio occupato da 1 utente(dai suoi files) ma mi continua a dare errore....sicuri che la sintassi sia corretta????:?:?
l'errore che m da è:
user ....(vuoto cioè nn m stampa niente) takes 0 kb into the system.
WHY??
HELP ME!!
grazie mille


Posted by n3o on 15-07-2007 16:57:

se lo copi ESATTAMENTE SPAZI INCLUSI funziona, controlla bene, sarai la ventesima persona che me lo chiede, poi scopro che quasi tutti hanno messo degli spazi in più dove non dovevano esserci! :D

__________________
The answer is blowing in the wind...


Posted by RedAngel86 on 15-07-2007 19:22:

Grazie mille n3o


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

Il proprietario di un processo in esecuzione `e normalmente
diverso dal proprietario del file contente un programma (e
diverso ad ogni esecuzione)
effective UID bit: il processo assume come proprietario il
proprietario del file del programma
SUID root
chmod 4555 file
chmod u+s file

ragazzi qst parte lo trovata sulle slide di monga... qualcuno potrebbe kiarirmi le idee??? soprattutto sul suid root


Posted by n3o on 16-07-2007 11:38:

Un file con SUID bit attivato viene eseguito con i privilegi dell'utente che possiede il file. (non importa chi lo lancia)
Esempio passwd ha come proprietario root ma visto che un qualsiasi utente ha diritto a modificarsi la propria password, il primo ha il SUID attivato in modo da poter essere eseguito da un utente normale con privilegi di root.

__________________
The answer is blowing in the wind...


Posted by =kimi= on 16-07-2007 12:29:

ah ok... grazie... quindi nell'esercizio che mi chiede di cercare tutti i file SUID root, cm mi devo muovere???


Posted by imperator on 16-07-2007 12:34:

ciao a tutti... ho un problema con l'aggiunta di un utente...
in particolare con il comando passwd:
quando lancio il comando e mi chiede di inserire la password la tastiera è come se fosse bloccata, non scrive, l'unico tasto che funziona è l'invio...
qualcuno sa darmi qualche dritta? grazie


Posted by Simaldeff on 16-07-2007 12:34:

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*

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


Posted by Simaldeff on 16-07-2007 13:01:

ho risolto con un piccolo script del genere :

#!/bin/sh
ID="(grep "^$1" /etc/passwd | cut -f 3 -d :)"
find / -user "$ID" - type f | ls -l | grep "^[rw-]*x"
exit 0

cosi facendo me li ha trovati tutti ... anche quelli piu insoliti (tipeo 657 421 523 etc ... basta che ci sia un x nella stringa permessi di ls -l)

per chiamare il script basta fare
./script.sh <username>

naturalmente.

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


Posted by n3o on 16-07-2007 13:05:

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

Originally posted by Simaldeff
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*
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!!!

__________________
The answer is blowing in the wind...


Posted by imperator on 16-07-2007 13:14:

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

[/Color]


pensavo che mentre digitavo almeno mi segnalasse con degli * il fatto che digitavo un tasto; invece non fa nulla...
cmq sn un pirla!!:D:D:D:D:D:D:D:D:D
grazie


Posted by n3o on 16-07-2007 13:16:

@Simaldeff
Ottima anche la tua soluzione, devi solo aggiungere le restrizioni successive che chiede il problema, praticamente ordinare ed estrarre i 5 maggiori (se uno trova un metodo più semplice anche per questo...)

@=kimi=
Cercare tutti i file con SUID attivato

find / -type f -perm -004000 (testato)

__________________
The answer is blowing in the wind...


Posted by Simaldeff on 16-07-2007 13:19:

ma i tuoi passagi 4 e 5 sono solo utili se si vuole un certo formato all'output della cosa ...
si possono saltare metendo in
sort +5 -n
no?

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


Posted by n3o on 16-07-2007 13:21:

Io ho provato ad omettere quei passaggi e non funziona...credo di averlo scritto anche nel post...almeno provatelo!!!

__________________
The answer is blowing in the wind...


Posted by Simaldeff on 16-07-2007 13:31:

trovo la tua soluzione della ls -lF motlo piu furba. Ma li e' da verificare se fa anche i casi anomali ... tipo i permessi 523 o 421 ... cioe se guarda tutti i bit di permesso o solo quelli riguardante il user (ovvero la prima ciffra).

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


Posted by Simaldeff on 16-07-2007 13:46:

solo un suggerimento : sarebbe meglio scrivere il nostro codice in font courier nelle nostre risposte sul forum ... cosi capiamo meglio gli spazi ... no?

esempio

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

invece di

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

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


Posted by antares85 on 16-07-2007 16:51:

ragazzi qualcuno mi sa indicare o dire qual'è la legenda per leggere le varie colonne dei file? tipo dove sta scritto che la colonna 5 è la dimensione del file e la 9 il nome? (magari qst si capiscono ma le altre?)


Posted by poi_1969 on 16-07-2007 17:00:

n3o, non bisogna metere xargs -l 1 per predere una riga alla volta, altrimenti prende un blocco e ne fa ls?


Posted by n3o on 16-07-2007 17:17:

Originally posted by antares85
ragazzi qualcuno mi sa indicare o dire qual'è la legenda per leggere le varie colonne dei file? tipo dove sta scritto che la colonna 5 è la dimensione del file e la 9 il nome? (magari qst si capiscono ma le altre?)
Non c'è alcuna legenda, guardi l'output di un programma e ti comporti di conseguenza (per ls e ps ho fatto così!!!)

ls -l
Risultato di esempio:
-rw-r--r-- 1 root operator 186 Jul 12 12:45 test.c
Colonne:
1) -rw-r--r-- => permessi (il 1° - vuol dire che è un file, d = directory, l = link e ce ne sono altri che non mi ricordo...)
2) 1 => n° di link
3) root => proprietario
4) operator => gruppo
5) 186 => dimensione in byte
6) Jul => mese creazione
7) 12 => giorno creazione
8) 12:45 => ora creazione
9) test.c => nome file

Originally posted by poi_1969
n3o, non bisogna metere xargs -l 1 per predere una riga alla volta, altrimenti prende un blocco e ne fa ls?
L'opzione -l su Minix non esiste! Provate i comandi su Minix e fate riferimento ai manuali al suo interno!!! Moooolto pericoloso pensare che le proprio conoscenze di Linux bastino! (provato sulle mie spalle!)

__________________
The answer is blowing in the wind...


Posted by antares85 on 16-07-2007 17:49:

mmh...ci proverò, grazie


Posted by Vid on 16-07-2007 21:54:


1) find / -type f -size +5 => trova tutti i file di dimensione > 5KB


ma la dimensione del size non si riferisce ai blocchi da 512 bytes?

Io credo sia corretto mettere -size +10.


Posted by ^Belzebu^ on 16-07-2007 22:02:

Originally posted by maxj8
La domanda di Shell di 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 (banale) e di copiare anche tutto il path dei file nella nuova cartella (meno banale).


e come sarebbe per copiare anche tutto il path dei file?
grazie!

ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by n3o on 16-07-2007 23:13:

Originally posted by Vid
ma la dimensione del size non si riferisce ai blocchi da 512 bytes?

Io credo sia corretto mettere -size +10.
Hai ragione :oops:, pensa che non ci avevo mai fatto caso, aggiorno il post per sicurezza...

__________________
The answer is blowing in the wind...


Posted by n3o on 16-07-2007 23:59:

Originally posted by ^Belzebu^
e come sarebbe per copiare anche tutto il path dei file?
grazie!

ByezAll
^Belzebu^
Sappi che (ovviamente) in Linux la cosa è mooooooolto semplice 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
Spiegazione, riga per riga:
0) interprete script
1) NEWPATH contiene la directory di destinazione (anche composta...)
2) pwd restituisce il percorso corrente e passato a tr '/' ' ', gli slash vengono sostituiti con degli spazi, in modo che il for riesca a scorrere ogni singola sotto directory che crea il percorso corrente
3) creo a "pezzetti" il sottoalbero anche nella directory destinazione, aggiungendo via via le sottodirectory più profonde della directory attuale
4) Aggiorno la directory di destinazione con l'ultimo ramo aggiunto
5) fine for
6) scorro ogni file nella directory
7) copio salvaguardando i permessi ogni file dalla sorgente alla destinazione
8) fine for

Ricordate di creare prima la directory di destinazione e consiglio di modificare le istruzioni (3) e (7) durante la prima volta per vedere cosa fa lo script:

3) echo mkdir ${NEWPATH}/${SUBDIR}
7) echo cp -p ${FILE} ${NEWPATH}/${FILE}

Esempio:
Destinazione = /dir2
Directory corrente = /root/dir1 (sarà il risultato di pwd)
Output del programma con gli echo:

mkdir /dir2/root
mkdir /dir2/root/dir1
cp -p prova /dir2/root/dir1/prova
cp -p script.sh /dir2/root/dir1/script.sh

__________________
The answer is blowing in the wind...


Posted by Simaldeff on 17-07-2007 09:29:

io lego in
man cpdir
in opzioni
-m Merge trees. The first synopsis for is assumed, and the files from one tree are merged into the other. There is not "If it's a directory then put it into that directory." trickery here.

Non si potrebbe usare questa?

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


Posted by n3o on 17-07-2007 10:20:

Se riesci a cavarci qualcosa facci sapere!
La soluzione più semplice è quasi sempre la migliore! :D

__________________
The answer is blowing in the wind...


Posted by Vid on 18-07-2007 15:18:

Anch'io stavo sbattendo la testa su cpdir ma non riesc oa farlo funzionare come voglio.

Personalmente ho risolto anch'io tramite il seguente script (tipo di esercizio: copiare file che inziano con un certo pattern da un ramo del FS ad un altro, mantenendo la struttura delle dir):

--------

#!/usr/bin/sh
# uso: <nomescript> origine destinazione pattern

for i in $(find $1 -type d) # dir del ramo passato come arg 1
do
mkdir -p "$2/$i" # ricrea la struttura nel path passato come arg 2
done
for j in $(find $1 -type f -name "$3*") #i files da copiare
do
cp "$j" "$2/$j"
done

----------

La soluzione però non mi piace per più motivi, fra tutti il fatto che ricreo la struttura del ramo scelto partendo comunque da / e che creo anche directory vuote. Se qualcuno riuscisse a usare cpdir...

Poi, tornando al problema dei files eseguibili, credo che la soluzione che prevede ls -F abbia un problema: provate a fare un touch "prova*", il file non sarà eseguibile ma verrà comunque incluso dallo script.


Posted by GiKappa on 18-07-2007 15:44:

ciao,

sapete quale altro comando serve per compattare i file oltre a tar?


Posted by n3o on 18-07-2007 16:24:

In minix ci sono tar, ar, vol e compress controlla i relativi manuali!
(anche se credo che solo compress comprima oltre che collezionare...)

@Vid: L'esercizio era: copiare tutti i file di una directory mantendo la gerarchia dei parenti.
Che copi l'albero da root va bene; il find va in profondità, cosa non richiesta dal problema (ma rimane buono nel caso richieda qualcosa di più complesso).

Per quanto riguarda l'algoritmo di ricerca dei file eseguibili, ce ne sono in giro 3 versioni, ognuna con il suo side-effect, ma credo che tutte e tre ai prof andranno benissimo!!!

__________________
The answer is blowing in the wind...


Posted by antares85 on 18-07-2007 16:38:

DOMANDA DELL?ULTIMO MINUTO!
come si fa a sapere ad un certo utente che numero UID corrisponde?

ES: file appartenenti all'utente 'ast':

find / -user 8 -type f | wc

TKS!


Posted by Paul03 on 18-07-2007 16:39:

Ciao ragazzi a me all'esame aveva chiesto di trovare i tre file piu grossi per ogni singolo utente. Io avevo in mente di utilizzare la find con l'opzione -user e poi concatenarla con il du però non sono riuscito ancora a mettere giu niente. Mi sapreste aiutare?


Posted by Simaldeff on 18-07-2007 16:40:

ho fatto una scoperta :
malgrado tutti sembrino usare una cosa del tipo (inquesto thread almeno)

ID=$(grep "^$!" /etc/passwd | cut -d : -f 3)

per estrare l'id dello user dallo file password.
sapiate che i comandi minix come find accetano il nome dello user in lettere

find / -user root
find / -user 0


hanno lo stesso risultato.

forse sto puntando qualcosa che tutti hanno gia scoperto ... ma mi sembrava importante dirlo tutto visto che nessuno ne parlava.

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


Posted by Laüra on 18-07-2007 16:43:

Esercizio:
Aggiungere 10 uteneti prendendo la lista da un file di testo.


Scusate se per caso è già stato risolto.....

Ho 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

Come vi sembra?

Grazie!


Posted by antares85 on 18-07-2007 17:04:

Grazie Simaldeff , per me non era per niente scontato! (anche se mi sembra che ci sia scritto già da qlk parte in qst thread ma ormai è enorme e ci si perde :p )


Posted by Vid on 18-07-2007 17:14:

Scusate ma mi è sorto un dubbio su du:

man non dice come sono espressi i risultati numerici, se blocchi, bytes, kbytes o caramelle, però confrontando i risultati di du e di ls ottengo dei dati incoerenti.

Per esempio ho un file archivioroot.tar che occupa 7874 secondo du e 8062976 secondo ls (rapporto di 1:1024).
ho poi un file test1k (da 1024 bytes guardacaso... :) ) che occupa 2 secondo du e 1024 secondo ls (rapporto di 1:512).

Ora, credo che si possa dare l'esame anche rimanendo con questo dubbio... ma qualcuno sa spiegarmi perchè?

EDIT: forse ho capito... du credo indichi i blocchi usati, anche parzialmente, e avendo scelto in fase di installazione blocchi da 1024, un file da 1024bytes occupa 2 blocchi. Infatti creando un file da 1536 bytes (3x512) du mi ritorna comunque 2.
Non so se sia giusto ma me la tengo buona, meglio dedicare il tempo alle modifiche del kernel...


Posted by NoWhereMan on 18-07-2007 17:15:

per quanto riguarda stampare il messaggio quando un processo termina in qualsiasi modo è sufficiente che la printf sia all'interno della procedura pm_exit() (ovviamente nei sorgenti del PM) che viene chiamata in qualsiasi caso: syscall exit() oppure SIGKILL o SIGTERM

NOTA: ho notato con un amico che qemu tende a crashare se il messaggio della exit non termina con un newline, quindi vi conviene che il messaggio sia sempre qualcosa del tipo

printf("\nMESSAGGIO\n");

che per inciso produce anche un output più leggibile (per quanto possa interessare leggere "MESSAGGIO" mille volte)


Posted by vittorio on 18-07-2007 17:16:

ragazzi, on ho mai toccato minix...come cavolo si fa a spostarsi da una cartella a un'altra? quali sono i comandi di minix basilari?


Posted by vittorio on 18-07-2007 17:27:

ragazzi, on ho mai toccato minix...come cavolo si fa a spostarsi da una cartella a un'altra? quali sono i comandi di minix basilari?


Posted by antares85 on 18-07-2007 17:29:

trovi tutto su questo thread, scartabellatelo dall'inizio alla fine e guarda i link


Posted by liver82 on 18-07-2007 17:30:

Laura io direi che è perfetto il tuo...invece per quanto riguarda il seguente comando:

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

a me funziona anche così:

find / -type f -size +10 | xargs ls -lF | grep "\*$" | sort -n | tail -5

come è stato anche detto qualche thread più su.

Volevo poi chiedere anche se potete segnare i file esatti per far apparire il messaggio quando viene killato un processo. Grazie mille!!


Posted by NoWhereMan on 18-07-2007 17:46:

/usr/src/servers/pm/forkexit.c

era facile :P

e poi c'era sempre

cd /usr/src/servers/pm
grep pm_exit *

ciao


Posted by Simaldeff on 18-07-2007 17:55:

@vittorio
comincia con
cd /
e poi aggiungi il tuo path ...
ls e' come il commando dir del dos

@gli altri
qualcuno sa se e' possibile fare una cosa del tipo
"isolare i file/processi con una taglia tra 100 byte e 1KB"
cioe prendere solo una parte delle cose che non siano la testa o la coda di una lista o testo.

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


Posted by liver82 on 18-07-2007 18:02:

Originally posted by NoWhereMan
/usr/src/servers/pm/forkexit.c

era facile :P

e poi c'era sempre

cd /usr/src/servers/pm
grep pm_exit *

ciao


Io ho usato find / -type f | xargs grep -l pm_exit

va bene lo stesso? :razz:

Cmq mi aveva tirato fuori anche altri file e la mia conoscenza non è bastata.
Grazie mille!!


Posted by NoWhereMan on 18-07-2007 18:19:

scriptino compatto per la copia con struttura directory

(modificando opportunamente) DEST e il filtro (il filtro non sono riuscito a renderlo
parametrizzabile perché '*' viene sempre espanso dalla riga di comando, invece find vuole il carattere!)

code:
DEST=miadestinazione # potrebbe essere anche $1 #in questo esempio copiamo tutti i file nascosti della dir corrente dentro a $DEST DEST=miadestinazione/ find `pwd` -name .\* | while read F do mkdir -p $DEST/`dirname $F` cp -pr $F $DEST/$F done


Posted by NoWhereMan on 18-07-2007 18:21:

Originally posted by liver82
Io ho usato find / -type f | xargs grep -l pm_exit

va bene lo stesso? :razz:

Cmq mi aveva tirato fuori anche altri file e la mia conoscenza non è bastata.
Grazie mille!!


va bene lo stesso ma in quel caso è ridondante perché i file sono pochi e il livello e non ci sono sottodirectory, quindi basta grep $COSE * :P

ciao


Posted by antares85 on 18-07-2007 20:37:

Qualcosa che spero possa essere utile, schemi riassuntivi:

Come partizionare


Posted by antares85 on 18-07-2007 20:38:

Comandi principali


Posted by antares85 on 18-07-2007 20:39:

Alcuni esercizi


Posted by antares85 on 18-07-2007 20:40:

e infine altri comandi e spiegazioni utili...


Posted by liver82 on 18-07-2007 20:45:

Originally posted by NoWhereMan
va bene lo stesso ma in quel caso è ridondante perché i file sono pochi e il livello e non ci sono sottodirectory, quindi basta grep $COSE * :P

ciao


uffa non riesco a far uscire il messaggio...:(

1)io vado in /usr/src/servers/pm/
2)forkexit.c
3) mi porto alla fine della funzione pm_exit()
4) metto il printf
5) vado in /usr/src/tools/
6) eseguo i comandi make clean, make image, make hdboot
7)riavvio e non funziona.

Qualcuno mi sa dire perchè?


Posted by NoWhereMan on 18-07-2007 20:48:

mettilo all'inizio :P


Posted by liver82 on 18-07-2007 20:53:

Per killare un processo basta che faccio:

kill nro PID

vero?


Posted by liver82 on 18-07-2007 21:36:

Originally posted by NoWhereMan
mettilo all'inizio :P


Continua a non funzionarmi...boh!
Grazie cmq per la pazienza!:-)


Posted by Vid on 19-07-2007 00:32:

Ok, basta così... tocca e ritocca il kernel il mio minix è diventato una bolgia infernale :)

Piange in continuazione che i suoi processi terminano e mi minaccia se glieli uccido, ricordandomi la vendetta ora di questo, ora di quel numero di processo; si schifa a creare files che iniziano con la m (involontariamente comico il suo commento cannot touch merda ...), ogni volta che premo F8 mi esclama "Forza Inter!" e ad ogni avvio mi scrive una frase a caso dal database fortune.dat. Mi ricorda quante volte l'ho ricompilato e fortunatamente non mi chiede perchè mai sono ossessionato dal sapere in continuazione quanti files ha l'utente pippo, quali sono i suoi files più grandi, quali sono i più piccini, quali sono quelli così e cosà, perchè insisto nel volere archiviarglieli e perchè continuo a cancellare files che ho appena creato.
Se sopporta tutto questo, in fondo, minix è buono.
Io di mio sono un po' stufo di maltrattarlo per cui ora lo spengo e domani andrà come andrà...
In bocca al lupo a tutti voi, e grazie per le dritte, questo thread è stato molto più utile di slide e lezioni varie.


Posted by iuz-lab on 19-07-2007 01:56:

non so come funziona ash.. ma a me manca molto il doppio tab in bash che mi indica quali comandi iniziano per non so cosa..

per questo suggerisco queste due righe di codice..
echo "#!/usr/bin/env sh
find \`echo \$PATH | tr ':' ' '\` -type f -name \"\$1*\"" > /bin/fc
chmod +x /bin/fc

in questo modo fc (find command) rispondera' con la lista dei comandi possibili che iniziano con il primo parametro passato..

tipo..
# fc bzip
/usr/local/bin/bzip2
/usr/local/bin/bzip2recover
...

non e' assolutamente perfetto come script.. ma almeno e' veloce da scrivere..
e perdendo un'po' di flessibilita' si puo' fare anche..
echo "#!/usr/bin/env sh
find `echo $PATH | tr ':' ' '` -name \"\$1*\"" > /bin/fc
chmod +x /bin/fc

(occhio ad i backtick! che non sono semplici apostrofi)
ciao a tutti e buona fortuna

a proposito..
find / -name "*.c" | xargs tar c archivio.tar
non archivia correttamente se i file sono tanti (nemmeno troppi)!!
quindi occhio!

spero di non aver detto cavolate.. e ciao di nuovo..


Posted by iuz-lab on 19-07-2007 04:06:

Originally posted by n3o

1) Per me un file è eseguibile se lo è per tutti (altrimenti farsi tutti i casi possibili è una macello...)


si puo' usare [ -x nome_file ] per capirlo


Posted by Simaldeff on 19-07-2007 09:33:

si era già trattato di questo ... la soluzione più comoda e' IMHO

ls -lF -> che mette un asterisco * alla fine della linea di un file eseguibile anche per solo user o solo group o solo altri ... etc ... basta che sia eseguibile per qualcuno.

poi per filtrarle basta un bel

grep "\*$" .... che tiene tutti quelle linee che hanno un * prima della fine della linea.

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


Posted by antares85 on 19-07-2007 11:15:

FATTO!!! posso dire che il partizionamento è quello pari pari che c'è sul thread omonimo, cn la piccola differenza che 2M nn sono 2000K ma 2048...ma nn credo siano pignoli su questo.

L'es di shell va a culo, c'è a chi capita la riga di codice e basta e chi deve fare lo script articolatissimo...non deve essere per forza funzionante, infatti il mio non lo era ma vedeva che l'idea e l'impostazione d base c'era e mi ha messo 23 (Trentini, mentre il MONGAloide era più severo e inoltre sembrava non credere a chi dicesse che gli si impallava tutto o si "slogava" prima del tempo automaticamente, ma la realtà è che le macchine fanno SCHIFO e lui è un pxxxa!!!)

Il terzo manco c'ho provato ovviamente :P, mi andava + ke bn il 23.

Ultima cosa: non è assolutamente permesso guardare materiale on line come detto anche dal prof precedentemente (wiki o altro), quindi...TUTTO A MEMORIA!

Colgo l'occasione per ringraziare tutti coloro che hanno contribuito all'arricchimento di questo thread, e specialmente a n3o (anche se l'es di archiviare i file modificati da meno di 1 sett non va fatto con tar ma con ar... ;) )

CIAO! :)


Posted by n3o on 19-07-2007 12:19:

In verità 2 MB sono proprio 2 * 10^6 byte
Invece 2 MiB sono 2 * 2^20 byte
(io ho usato le potenze decimali e non ho avuto problemi...)

Riguardo a tar in sede di esame a molti non funzionava, quindi hanno optato per ar, leggetevi man ar per delucidazioni (molto simile a tar comunque...)

Complimenti per la buona uscita e in bocca al lupo a tutti gli altri!

__________________
The answer is blowing in the wind...


Posted by GiKappa on 19-07-2007 12:45:

potresti inserire un esempio veloce per archiviare con ar?

ho cercato un po' in internet, ma non ho trovato molto di utile!


Posted by n3o on 19-07-2007 13:04:

Beh come ho scritto bastava guardarsi man ar :razz:
ar rc <archivio> <file>

Esempio
Archiviare i files più piccoli di 100KB ma più grandi di 5KB:

find / -type f -size +10 -a -size -200 | xargs ar rc archive.a

Opzioni:
r => sostituisci o aggiungi (nel caso un file non sia già presente)
c => crea l'archivio (sopprime il noioso messaggio di notifica, non fa nulla se l'archivio esiste già)
t => visualizza il contenuto (ar t archive.a)

__________________
The answer is blowing in the wind...


Posted by Laüra on 19-07-2007 13:29:

Ho una domanda......anche se sembra un po' stupida....

Negli esercizi in cui si dice di trovare file con determinate caratterisitche.....per file si intende sempre regular file, quindi bisogna mettere l'opzione -type f nel comando find che si utilizza oppure dipende dai casi?

Per esempio se mi chiedono il file più grande non ho dubbi.....uso find -type f...
ma se invece mi chiedono quanti file ha un certo utente?


Posted by n3o on 19-07-2007 13:55:

Sì, per file è sottinteso regular file

Se fosse fondato il tuo dubbio allora si dovrebbe considerare oltre alle directory anche i link, i device a caratteri e a blocchi che possono essere proprietà di un certo utente.

__________________
The answer is blowing in the wind...


Posted by darkman13 on 19-07-2007 15:48:

Trovare tutti i processi per ogni utente e fornirne l'occupazione in memoria???


Posted by n3o on 19-07-2007 16:26:

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:
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!!!)

__________________
The answer is blowing in the wind...


Posted by Peach on 19-07-2007 17:24:

Ho un problema con i comandi mv e cp
come scritto qui io faccio
cp /usr/p* /usr/prova

ma mi da come errore
/usr/p* no such file or directory qualcuno sa aiutarmi?


Posted by ^Belzebu^ on 19-07-2007 17:32:

Originally posted by GiKappa
potresti inserire un esempio veloce per archiviare con ar?
ho cercato un po' in internet, ma non ho trovato molto di utile!


guardate anche il comando gzip.
il mio esercizio prevedeva la creazione di un file archivio.gz , che si crea appunto con gzip.
e attenti ai 10 minuti!!! scorrono in frettissima!!

ByezAll
^Belzebu^

__________________
Meglio essere Padroni all'Inferno che schiavi in paradiso!


Posted by Simaldeff on 19-07-2007 17:43:

mmmmhhh io il gzip non c'e' l'ho sul mio minix ... quello dell'imagine che c'e' sul wiki.

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


Posted by Peach on 19-07-2007 17:54:

Scusate ma come si fa a rendere eseguibile uno script?


Posted by Peach on 19-07-2007 18:08:

Originally posted by Simaldeff
mmmmhhh io il gzip non c'e' l'ho sul mio minix ... quello dell'imagine che c'e' sul wiki.


idema ma suppongo che si usi come il camando tar no?


Posted by Laüra on 19-07-2007 18:44:

Originally posted by Peach
Scusate ma come si fa a rendere eseguibile uno script?


Come prima riga devi scrivere:

#!/bin/sh

E devi mettere il permesso x al file con chmod.


Posted by Peach on 19-07-2007 18:45:

Ok grazie mille


Posted by darkman13 on 19-07-2007 19:07:

Approfitto per l'ennesima volta del gentilezza di n3o... Trovare il processo con pid dispari che occupa più spazio in memoria?


Posted by n3o on 19-07-2007 20:19:

Ma dove li trovi questi orrori ???

code:
#!/bin/sh MAXSIZE=0 MAXPID=0 for PROC in $(ps alx | tr -s ' ' : | cut -d : -f 5,8); do PID=$(echo $PROC | cut -d : -f 1) SIZE=$(echo $PROC | cut -d : -f 2) if [ $PID % 2 -eq 1 -a $SIZE -gt $MAXSIZE ]; then MAXPID=$PID MAXSIZE=$SIZE fi done echo "Processo con PID dispari più esoso: $MAXPID con $MAXSIZE KB"

Spiegazione:

__________________
The answer is blowing in the wind...


Posted by darkman13 on 19-07-2007 20:48:

sono stai chiesti a ragazzi nel esame... non capisco il dislivello allucinante tra gli esercizi


Posted by n3o on 19-07-2007 21:08:

E con questo, signori, auguro buona fortuna a tutti (in bocca al lupo per quelli superstiziosi) specialmente a quelli del turno di domani. :approved:

Vado a godermi (meritate) vacanze! :ciaoo: (e buone vacanze anche a voi!) :D
See you soon on DSY :muhehe:

PS: dimenticavo, oggi è l'anniversario dell'attentato a Paolo Borsellino...
Persone come lui, il cielo solo raramente ce le manda.
Grazie. :angel:

__________________
The answer is blowing in the wind...


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

Originally posted by darkman13
sono stai chiesti a ragazzi nel esame... non capisco il dislivello allucinante tra gli esercizi





sai qualche altro tipo di esercizio che è stato chiesto questa volta?


Posted by darkman13 on 20-07-2007 00:07:

no solo questo!


Posted by GiKappa on 20-07-2007 08:39:

a me aveva chiesto di scrivere uno script per trovare per ogni utente l'occupazione in memoria (mi sembra che sia stato già scritto)


Posted by Vid on 20-07-2007 09:03:

E anche sistemi operativi l'abbiamo archiviato :)

Vi posto gli esercizi che mi hanno assegnato:

# SHELL SCRIPT #

Creare uno script che produca in uscita una lista ordinata del numero totale dei files presenti nel filesystem per ogni utente.

# KERNEL #

Creare una syscall che, opportunamente richiamata tramite un programma, stampi il numero di volte che è stata chiamata a partire dal boot.

Un altro esercizio di script che ho sentito assegnare riguardava il produrre un elenco dei file al cui interno fosse contenuta la parola "copyright" case-insensitive.

In bocca al lupo a chi ancora deve darlo e buone ferie e vacanze a chi lo ha dato.


Posted by Paul03 on 20-07-2007 10:56:

Ragazzi vi posto l'esercizio che è stato chiesto a me che contiene l'AR... La consegna era:
Creare un archivio gzip (tar.gz) che contenga tutti i file che inziano per "c" e la cui dimensione sia inferiore di 10 kb:

find / -type f -name c\* -size -20 | ar ** nomearchivio

Spiegazione:
-type f: cerca tutti i file
-name c\*: tutti i file che iniziano per c (attenzione ad utilizzare \* e non solo * in quanto usando solo * se la prima lettera del primo file dopo la c fosse a cercherebbe tutti i file che iniziano per ca)
-size -20:tutti i file <10kb (20 sono i blocchi)
ar **: dove ** sono gli attributi che giuro non ricordo comunque ci sono sul man

Ciauzzz


Posted by matteojacoca on 20-07-2007 11:28:

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


Posted by =kimi= on 20-07-2007 12:48:

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...


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