# [SKRYPT] analyze_etc.sh

## 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):

```
#!/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  :Smile:  (na reiserfs, na ext3 wlokl sie niemilosiernie). Czekam na opinie  :Smile: 

----------

## Poe

bardzo fajnie, wlasnie sprawdza  :Smile:  domyslam sie, ze te NOT FOUND, mozna wywalic.. o, skonczylo

```

Files: 887 Valid: 403 Unknown: 484

```

 :Very Happy: 

a mozna by to jakos przerobic, zeby odrazu wywalalo te pliki "niepotrzebne"?

----------

## nelchael

Nie ma mowy! On wylistowal np. /etc/hosts i /etc/hostname, prawda? AFAIR listuje tez /etc/{gruop|passwd|shadow} - ktorys z nich.

----------

## Poe

hm, mozliwe, nie przegladalem dokladnie tej listy. coz..

----------

## nelchael

IMHO jest to niebezpieczne, jak chcesz mozesz dosc latwo dorobic taka funkcjonalnosc:

```
#!/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'.

----------

## Poe

Hm, chyba jednak nie bede ryzykował  :Wink:  ewenrtualnie przejze liste i wywale pliki, do ktorych bede mial pewnosc 100%ową  :Smile: 

----------

## 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  :Smile: 

----------

## 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ę :Wink: 

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.

----------

## Rav70

 *nelchael wrote:*   

> IMHO jest to niebezpieczne, jak chcesz mozesz dosc latwo dorobic taka funkcjonalnosc:
> 
> ```
> 
>       #rm -f ${i}
> ...

 

Można też

```

      rm -i ${i}

```

żeby system prosił o potwierdzenie przed usunięciem każdego pliku.

Pozdr. Rav

----------

## 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.

```

#!/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

----------

## 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.

----------

## 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

----------

## nelchael

Mozna i tak  :Smile: 

----------

