| 
      .grande:maestro.
 |  | mark |  
  
    Registered: Oct 2003 Posts: 783 (0.10 al dì)
 Location:
 Corso: F49
 Anno: finito!
 Time Online: 8 Days, 18:34:33 [...]
 Status: Offline
 
    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 |