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
:D
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ż

Code: Select all

      rm -i ${i}
ż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 :)