Page 1 of 1
[SKRYPT] analyze_etc.sh
Posted: Wed Jan 12, 2005 7:35 pm
by nelchael
Oto maly skrypcik, ktory pokazuje, ktore pliki w /etc/ nie maja wlasciciela (tzn. pakiet, do ktorego nalezaly zostal usuniety, ale jako, ze pliki w /etc/ maja cfgpro nie zostal usuniety):
Code: Select all
#!/bin/bash
BASH_COLOR_RESET="\e[0m"
BASH_COLOR_GREEN="\e[01;32m"
BASH_COLOR_RED="\e[01;31m"
FILES_OK=0
FILES_BAD=0
FILES_TOTAL=0
for i in `find /etc -type f | sort`; do
echo -n "Checking \"${i}\"... "
# Check
jest="`grep -Hr \"${i}\" /var/db/pkg/* | head -n 1 | cut -d ':' -f 1 | sed -e 's,/CONTENTS,,g' -e 's,/var/db/pkg/,,g'`"
FILES_TOTAL=$(($FILES_TOTAL + 1))
if [ "x${jest}" = "x" ]; then
echo -en "${BASH_COLOR_RED}NOT FOUND${BASH_COLOR_RESET}"
FILES_BAD=$(($FILES_BAD + 1))
else
echo -en "${BASH_COLOR_GREEN}ok${BASH_COLOR_RESET} (${jest})"
FILES_OK=$(($FILES_OK + 1))
fi
echo
done
echo "Files: ${FILES_TOTAL} Valid: ${FILES_OK} Unknown: ${FILES_BAD}"
Dziala bardzo szybko

(na reiserfs, na ext3 wlokl sie niemilosiernie). Czekam na opinie

Posted: Wed Jan 12, 2005 7:45 pm
by Poe
bardzo fajnie, wlasnie sprawdza

domyslam sie, ze te NOT FOUND, mozna wywalic.. o, skonczylo
Code: Select all
Files: 887 Valid: 403 Unknown: 484

a mozna by to jakos przerobic, zeby odrazu wywalalo te pliki "niepotrzebne"?
Posted: Wed Jan 12, 2005 7:51 pm
by nelchael
Nie ma mowy! On wylistowal np. /etc/hosts i /etc/hostname, prawda? AFAIR listuje tez /etc/{gruop|passwd|shadow} - ktorys z nich.
Posted: Wed Jan 12, 2005 7:52 pm
by Poe
hm, mozliwe, nie przegladalem dokladnie tej listy. coz..
Posted: Wed Jan 12, 2005 8:09 pm
by nelchael
IMHO jest to niebezpieczne, jak chcesz mozesz dosc latwo dorobic taka funkcjonalnosc:
Code: Select all
#!/bin/bash
BASH_COLOR_RESET="\e[0m"
BASH_COLOR_GREEN="\e[01;32m"
BASH_COLOR_RED="\e[01;31m"
FILES_OK=0
FILES_BAD=0
FILES_TOTAL=0
for i in `find /etc -type f | sort`; do
echo -n "Checking \"${i}\"... "
# Check
jest="`grep -Hr \"${i}\" /var/db/pkg/* | head -n 1 | cut -d ':' -f 1 | sed -e 's,/CONTENTS,,g' -e 's,/var/db/pkg/,,g'`"
FILES_TOTAL=$(($FILES_TOTAL + 1))
if [ "x${jest}" = "x" ]; then
echo -en "${BASH_COLOR_RED}NOT FOUND${BASH_COLOR_RESET}"
FILES_BAD=$(($FILES_BAD + 1))
#rm -f ${i}
# ^ wystarczy usunac tego hasha.
else
echo -en "${BASH_COLOR_GREEN}ok${BASH_COLOR_RESET} (${jest})"
FILES_OK=$(($FILES_OK + 1))
fi
echo
done
echo "Files: ${FILES_TOTAL} Valid: ${FILES_OK} Unknown: ${FILES_BAD}"
Nie biore jednak
zadnej odpowiedzialnosci za efekty jakie moga wystapic po czyms takim.
PS. czesc plikow w /etc/ jest generowana w czasie dzialania (lub przy pierwszym uruchomieniu) - one tez zostana wyswietlone jako 'NOT FOUND'.
Posted: Wed Jan 12, 2005 8:10 pm
by Poe
Hm, chyba jednak nie bede ryzykował

ewenrtualnie przejze liste i wywale pliki, do ktorych bede mial pewnosc 100%ową

Posted: Wed Jan 12, 2005 8:11 pm
by nelchael
I tak polecam z tego skryptu korzystac - oblookac liste i usunac te do ktorych mamy pewnosc.
PS. kopia bezpieczenstwa /etc to tez dobry pomysl

Posted: Wed Jan 12, 2005 9:19 pm
by milu
A miałem właśnie porządki zrobić na hdd - co prawda ten skrypt tylko do etc ale zobaczymy jak on chodzi. Potem i tak odpalę
cruft'a co by przeczesać resztę;)
A jakby ktoś chciał to
tutaj jest więcej info na ten temat. i link do skryptu tez tam jest - nie ściągać tego co jest wrzucone w [ code ] bo chyba jest to nieaktualne.
Posted: Wed Jan 12, 2005 9:55 pm
by Rav70
nelchael wrote:IMHO jest to niebezpieczne, jak chcesz mozesz dosc latwo dorobic taka funkcjonalnosc:
Code: Select all
#rm -f ${i}
# ^ wystarczy usunac tego hasha.
Można też
żeby system prosił o potwierdzenie przed usunięciem każdego pliku.
Pozdr. Rav
Posted: Wed Jan 12, 2005 10:06 pm
by quat
mam nadzieje ze mnie mod nie pogoni ale zminilem troszke skrypcik jego zeby chodzil szybciej. jedyny mankament to robi plik tymczasowy (wybralem na to /var/tmp) ktory po wszytskim jest usuwany.
Code: Select all
#!/bin/bash
BASH_COLOR_RESET="\e[0m"
BASH_COLOR_GREEN="\e[01;32m"
BASH_COLOR_RED="\e[01;31m"
FILES_OK=0
FILES_BAD=0
FILES_TOTAL=0
tmpfile=/var/tmp/list-of-etcow.tmp
rm $tmpfile>/dev/null
for i in `ls /var/db/pkg/*/*/CONTENTS*`;
do
cat $i | grep "obj /etc/" >> $tmpfile
done
for i in `find /etc -type f | sort`; do
echo -n "Checking \"${i}\"... "
# Check
grep -q $i $tmpfile
OUT=$?
FILES_TOTAL=$(($FILES_TOTAL + 1))
if [ $OUT = 0 ]; then
PACKAGE=`qpkg -nc -f $i | awk '{print $1}'`
echo -en "${BASH_COLOR_GREEN}ok${BASH_COLOR_RESET} ($PACKAGE)"
FILES_OK=$(($FILES_OK + 1))
else
echo -en "${BASH_COLOR_RED}NOT FOUND${BASH_COLOR_RESET}"
FILES_BAD=$(($FILES_BAD + 1))
fi
echo
done
rm $tmpfile>/dev/null
echo "Files: ${FILES_TOTAL} Valid: ${FILES_OK} Unknown: ${FILES_BAD}"
wg mnie dziala szybciej.
pozdrawiam
Posted: Wed Jan 12, 2005 10:11 pm
by nelchael
Niekoniecznie. Linuks ma cos co sie nazywa file-cache. Przy pierwszym przeszukiwaniu drzewka /var/db/pkg idzie wszystko z dysku, przy nastepnych juz idzie wlasnie z file-cache.
Posted: Wed Jan 12, 2005 10:26 pm
by quat
nelchael wrote:Niekoniecznie. Linuks ma cos co sie nazywa file-cache. Przy pierwszym przeszukiwaniu drzewka /var/db/pkg idzie wszystko z dysku, przy nastepnych juz idzie wlasnie z file-cache.
tak masz racje. ale w mojej poprawce nie przeszukuje calej bazy za kazdym razem ale ograniczam sie jedynie do plikow ktore sa instalowane w katalogu /etc, czyli przeszukuje znacznie mniejszy zbior nazw.
pozdr
Posted: Wed Jan 12, 2005 11:01 pm
by nelchael
Mozna i tak
