|
mark |
.grande:maestro.
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
#copiomkdir 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
|