Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi N - Z > Sistemi operativi I > Filez > alcuni script
  Last Thread   Next Thread
Author
Thread    Post New Thread    Post A Reply
mark
.grande:maestro.

User info:
Registered: Oct 2003
Posts: 783 (0.10 al dì)
Location:
Corso: F49
Anno: finito!
Time Online: 8 Days, 18:34:33 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
alcuni script

spero vi possano tornare utili

(1) Trovare l'utente col minor numero di file nel sistema

code:
find / -type f -exec ls -l {} \; cut -d ' ' -f 3 | sort | uniq -c | sort +0 -n

(2) Trovare l'utente col file piu' recente nel sistema
code:
find / -type f > tmp; while read l; do t=$(stat -atime $l); u=$(stat -uid $l); echo $t $u; done < tmp | sort +0 -nu | tail -2

altra versione
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


# (3) Elencare i tre utenti che hanno il maggior numero di file nel sistema
# cat /etc/passwd | cut -d : -f 1 > tmp; while read l; do ris=$(find / -type f -user $l | wc -l); echo $l $ris; done < tmp | sort +1 -n | tail -3
#
# (4) Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
# find /usr/bin -type f -exec wc -l {} \; 2>/dev/null 1>tmp; while read l; do riga=$(echo $l | cut -d ' ' -f 1); nome=$(echo $l | cut -d ' ' -f 2); if [ $(expr $riga % 2) -ne 0 ]; then echo -e "$nome: \t\t\t$riga"; fi; done < tmp
#
# (5) 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
#
# (6) Trovare tutti i link simbolici nel filesystem
# find / -type l -exec ls -l {} \;
#
# (7) Trovare tutti i file di testo che non siano script
# find / -type f | grep -v *.sh
#
# (8) Contare quanti file di manuale ci sono nel filesystem
# prima ho cercato il tipo di file che conteneva la frase "displays the online" prelevata digitando in minix man man con lo script:
# find / -type f -exec grep -l "displays the online" {} \;
# e quindi ho cercato i file *.1 con
# find / -type f -name "*.1" | wc -l
#
# (9) A quante "pagine" (una pagina equivale a circa 1500 caratteri) corrispondono tutti i file di testo del filesystem?
#find / | echo $(expr $(wc -c) / 1500)
#
# (10) Quali file ha modificato l'utente XY in una specifica data?
# if [ $# -ne 2 ]; then clr; echo "uso: script <+/-nr. giorni> <nr. utente>"; else find / -type f -mtime $1 -user $2 -exec ls -l {} \; fi
#
# (11) Quali file di testo ha modificato l'utente XY nell'ultimo anno?
# find / -type f -user root -mtime -365 -exec file {} \; | grep text
# find / -type f -user $1 -mtime -365 -exec file {} \; | grep text
#
# (12) Qual'e' l'utente che ha modificato piu' file nell'ultimo anno?
# find / -type f -mtime -365 -exec ls -l {} \; > tmp; cut -d " " -f 3 < tmp | sort | uniq -c
#
# (13) Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese
# find / -type f -mtime -31 -user root -exec file {} \; | grep text | cut -d ":" -f 1 | wc -l
#
# (14) Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato
#tt=0;find /usr/bin -type f > tmp; while read l; do tt=$(expr $tt + $(du $l|cut -f 1)); done <tmp; ; ris=$(expr $tt / $(wc -l tmp|cut -d " " -f 5)); echo "risultato $ris (KB/file)"
#
# (15) Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato ESCLUDENDO gli hardlink
# find / -type f -exec ls -li {} \; | sort +0 -nu
#
# (16) Quanta memoria occupa il processo piu' grande?
# ps -exl | sort -n +7
#
# (17) Trovare il numero di file che hanno blocchi dispari
# find / -type f > tmp; while read l; do nbl=$(expr $(expr $(stat -size $l) / 512) % 2); if [ $nbl -eq 0 ]; then echo nome file: $l; fi; done < tmp; rm tmp
#
# (18) Trovare tutti gli script del sistema, minori di 1 k, copiarli su /tmp/script/ Aggiungerli tutti i file su un file.tar !
# mkdir -p /tmp/script; find / -type f -size -2 -exec file {} \; | grep script | cut -d : -f 1 | xargs tar cvf /tmp/script/archivio.tar
#
# (19) Calcolare la somma delle dimensioni dei file *.s.
# tot=0; find / -type f -name *.s > tmp; while read l; do tot=$(expr $tot + $(du $l | cut -f 1)); done < tmp; echo "totale spazio occupato dai file di tipo (s): $tot"
#
# (20) Archiviare in un ar tutti i file minori di 2 kb e che inizano con m
# find / -type f -size -4 -name "m*" | xargs ar rc archivio.ar
#
# (21) Mostrare, per ogni utente, il numero di file presenti sul sistema
# ut=$(cat /etc/passwd | cut -d : -f 1); for i in $ut; do qt=$(find / -type f -user $i | wc -l); echo -e "$i\t\t$qt"; done
#
# (22) memorizzare in un archivio .ar tutti i file creati negli ultimi 2 giorni di dimensione minore di 5k.
# nota: se un file è di 5120 byte = 5 KB, non viene archivato in quanto la granularità minima è il blocco quindi, con -size -10 vengono considerati solo i file di dimensioni minori o uguali a 4608 byte cioè 5120-512
# find / -type f -mtime -2 -size -10 | xargs rc archivio.ar
#
# (23 - da_L13-es5) Trovare tutti i file più piccoli di 5Kb e per ogni file riportare il proprietario.
# la versione col for dà problemi di Out of space meglio usare il file temporaneo
# ut=$(cat /etc/passwd | cut -d : -f 1); for i in $ut; do find / -type f -size -10 -user $i -exec ls -l {} \;; done
# ut=$(cat /etc/passwd | cut -d : -f 1); for i in $ut; do find / -type f -size -10 -user $i > tmp;while read l; do echo -e "utente $i:\t$l"; done < tmp;done
#
# (24 - da_L13-es6) Trovare gli utenti ed i gruppi distinti proprietari dei file nelle directory /bin, /sbin, /usr/bin e /usr/sbin.
#for i in /bin /sbin /usr/bin /usr/sbin; do find $i -type f -exec ls -l {} \; | cut -d " " -f 3-5 | echo -e "\nuser group di $i\n--------------------\n" "$(sort -u)";done
#
# (25 - da_L13-es7) L'inode associato al file /usr/bin/cp è associato (tramite hard link) anche ad altri file. Trovare tutti i file contenuti nella directory /usr/bin che sono hard link allo stesso inode
#echo "i file con inode $(stat -ino /usr/bin/cp) sono:"; find / -type f -inum $(stat -ino /usr/bin/cp)
#
# (26 - da_L13-es8) Scrivere uno script che visualizza i processi in esecuzione nel sistema ordinati per occupazione di memoria (ordinamento crescente).
#ps -exl | sort +7 -s
#
# (27 - da_L13-es9) Trovare tutti i link simbolici presenti nel sistema.
# find / -type l -exec ls -l {} \;
#
# (28 - da_L13-es10) Scrivere uno script che, per ogni file in /usr, stampa nome completo del file, proprietario (in formato numerico), data ultima modifica, e numero di inode.
#
# (29 - da_L13-es11) Rimuovere il bit set-user-id dall'eseguibile /esercizi/esercizio11
#
# (30 - da_L13-es12) Il file /esercizi/esercizio12 è la copia di uno dei file in /usr/bin. Trovare il file sorgente.
#
# (30 - da_L13-es13) Il file /esercizi/esercizio13 è un hard link ad uno dei file in /bin. Trovare il file senza guardare il contenuto.
#
# (31 - da_L13-es16) Il programma /esercizi/esercizio16 stampa su standard output 3 numeri casuali (A, B, e C). Scrivere uno script che legge l'output del programma e calcola: A + B * C.
#
# (32 - da_L13-es17) Trovare le righe contenenti la parola "varius" all'interno del file /esercizi/esercizio17.txt. Per ognuna delle righe contare il numero di caratteri (se possibile, evitare di contare i caratteri della punteggiatura) e di parole.
#
#=================================================
==================================================
==
# spostare tutti i files che iniziano per m da una directory (e sottodirectory) ad un'altra
#copio:#mkdir miadir; find / -type f -name "m*" > tmp; while read l; do mkdir -p miadir/$(dirname $l); cp $l miadir/$l; done < tmp
#muove: #mkdir miadir;find / -type f -name "m*" > tmp; while read l; do mkdir -p miadir/$(dirname $l); mv $l miadir/$l; done < tmp
#undo move: #while read l; do mv miadir/$l $l; done < tmp
#=================================================
==================================================
==
# Trovare tutti i files eseguibili > 5k e evidenziando i 5 più grandi
# find / -type f -size +10 \( -perm ugo+rx -o -perm ugo+wx -o -perm -ugo+x \) -exec ls -l {} \; | sort +4 -n | tail -5
# stesso risultato con: find / -type f -size +10 -perm ugo+xxx -exec ls -l {} \; | sort +4 -n | tail -5
#
# Trovare il processo che occcupa più memoria ram
# ps -eal | sort +7 -n
#
# Archiviare tutti i files che contengono la parola "login"
# find / -type f -exec grep -l login {} \; 2> /dev/null | xargs -cvf archivio.tar
#
# Trovare i tre files più grossi per ogni utente
# ut=$(cat /etc/passwd | cut -d : -f 1); for i in $ut; do echo "utente: $i"; find / -type f -user $i - exec ls -l {} \; | sort +4 -n | tail -3; done
#
# trovare tutti i file nascosti nel sistema
# find / -type f -name ".*"
#
# trovare tutti i file eseguibili sul sistema
# find / -type -perm -111 -exec ls -l {} \; - trova tutti i file con x settato indifferentemente dagli altri permessi e cioè rw
# find / -type -perm +555 -exec ls -l {} \; - trova tutti i file con r-x settati e w non settato quindi trova r-xr-xr-x quindi il + è pi+ preciso
#
# Trovare il processo con pid dispari che occupa più spazio in memoria
# 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
# oppure: ps -axl | awk '{if($4 % 2 && $7 > 0) print $4, $7}' | sort +1 -n
#
# Creare uno script che produca in uscita una lista ordinata del numero totale dei files presenti nel filesystem per ogni utente
# ut=$(cat etc/passwd | cut -d : -f 1); for i in $ut; do nf=$(find -type f -user $i | wc -l); echo -e "$i \t $nf";done|sort +1 -n
#
# produrre un elenco dei file al cui interno fosse contenuta la parola "copyright" case-insensitive.
# find / -type f -exec grep -i -l {} \;
#
# 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 -size -20 | xargs tar -cvf archivio.tar; gzip archivio.tar
#
# Calcolare per ogni utente lo spazio occupato sul sitema
# ut=$(cat /etc/passwd | cut -d : -f 1); for i in $ut; do find / -type f -user $i -exec ls -l {} \; | awk '{somma += $5} END {print somma}'; done
#
# Calcolare l'occupazione totale dei processi in memoria per ogni utente
#tot=0; IDUSER=$(cat /etc/passwd | cut -d : -f 3); for a in $IDUSER; do ps -alx | tr -s " " : | grep -v SZ | for b in $(cut -d : -f 4-8); do ut=$(echo $b | cut -d : -f 1); sz=$(echo $b | cut -d : -f 5); if [ $ut -eq $a ]; then tot=$(expr $tot + $sz) ; echo "$tot" > pippo; fi; done; echo "$a $(cat pippo) kb"; echo 0 > pippo; done

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

Last edited by mark on 18-10-2009 at 15:34

18-10-2009 15:31
Click Here to See the Profile for mark Click here to Send mark a Private Message Find more posts by mark Add mark to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 04:56.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.043 seconds (72.80% PHP - 27.20% MySQL) con 26 query.