L'script es basa la comanda lsof que mostra els fitxers oberts (veure el for al codi). La línia més important del codi és, precisament, la del for, en concret la comanda que s'executa `lsof -c $program -F pn\n | cut -c 2- | tail -n+2 | sort`, la resposta de la qual la fa servir el for per iterar. Aquí van alguns comentaris:
- El paràmetre -c proces fa que mostri noms els fitxers oberts per un cert procés (per exemple podria ser 'java').
- La part -f pn\n fa que apareguin pid del procés (amb una 'p' davant) seguit dels noms dels fitxers (amb una 'f' davant)
- El cut -c 2- elimina la primera columna de carcters (la p i les n)
- El tail -n+2 elimina la primera fila (el pid)
- El sort ordena el que queda, i així podem anar comptant.
#!/bin/bash
#######################
# Mostra els cops que un fitxer est obert per un cert programa
# -per filtrar els .log, per exemple afegir: | grep "\.log"
#######################
function mostraHelp
{
echo Mostra els cops que un fitxer est obert per un cert programa
echo ""
echo "Us: $0 [--help|programa] ";
}
if [ "$1" == "--help" ]; then
mostraHelp;
exit;
else
program=$1;
fi
fitxer_anterior=""
count=1
primer=1
total=0
if [ "$1" != "" ]; then
for f in `lsof -c $program -F pn\n | cut -c 2- | tail -n+2 | sort`
do
let total=$total+1;
if [ "$fitxer_anterior" == "$f" ]; then
let count=$count+1;
else
if [ "$primer" == "0" ]; then
echo -e $count $"\t" $fitxer_anterior
let count=1
fitxer_anterior=$f;
else
primer=0;
fitxer_anterior=$f;
fi
fi
done
echo -e $count $"\t" $fitxer_anterior
echo -e $"\n" Total: $total;
else
mostraHelp;
exit;
fi


0 comentaris:
Publica un comentari