Jak mogę uzyskać listę plików na moim komputerze, które nie są „własnością” żadnego pakietu?

9

Zastanawiam się nad napisaniem skryptu, który to zrobi:

  • Przechodzi przez każdy plik w / usr / lib
  • Robi dpkg -swyszukiwania w każdym pliku.
  • Zgłasza listę plików „osieroconych” nienależących do żadnego pakietu .deb.

Chodzi o to, że z czasem zainstalowałem dużo make installoprogramowania i chciałbym uzyskać listę resztkowych plików z ręcznie zainstalowanego oprogramowania, które usunąłem.

Ken Kinder
źródło
W przyszłości upewnij się, że wszystko, co instalujesz poza systemem pakowania, zostanie zainstalowane w / usr / local lub / opt. Wtedy będziesz miał wyraźną separację.
geirha

Odpowiedzi:

8
find /usr/lib -type f -exec dpkg -S {} + 2>&1 >/dev/null | sed -r 's/^[^/]+//'

Ostrzegam cię teraz: jest wolny.

Oli
źródło
3
Jest szybszy:find /usr/lib -type f -exec dpkg -S {} + | grep 'no path found'
αғsнιη
1
Brak porozumienia. Oli z 2012 roku nie była tak dobra, jak z 2015 roku. Zaktualizowałem go, więc zwraca tylko listę plików.
Oli
3

Możesz uruchomić następujące polecenie

join -t '' -v1 <(find /usr/lib | sort) \
               <(grep -h /usr/lib /var/lib/dpkg/info/*.list | sort -u)

które porównują listę plików /usr/libz listą plików obecnych w co najmniej jednym pliku w /var/lib/dpkg/info/<NAME>.list(pliki używane przez dpkg -S). -v1Rozwiązaniem byłoby zgłosić plików znajdujących się w pierwszym liście, ale nie w drugim.

Na mojej maszynie ta lista różnic daje ponad 5000 trafień, więc wątpię, by to mogło pomóc.

enzotib
źródło
Działa dla mnie naprawdę szybko.
user1202136
2
sudo aptitude install cruft
man cruft
sudo addgroup cruft
sudo chmod g+rwx /var/spool/cruft
sudo chown root:cruft /var/spool/cruft
sudo addgroup $USER cruft
cruft -r cruftreport
sudo chown root:root /var/spool/cruft
less cruftreport
użytkownik2697383
źródło
1
Podoba mi się man crufttam, ale trochę więcej wyjaśnień na temat cruft i dlaczego polecasz, byłoby miło! : P ;-)
Fabby
To nie zadziała, a dokładniej: (1) „chown: brakujący operand po 'root: cruft'”. Musisz napisać: „sudo chown root: cruft / var / spool / cruft” zamiast (2) „sudo addgroup $ USER cruft” będzie wymagało zamknięcia / otwarcia nowej powłoki (ponowne zalogowanie). (3) Wywołanie cruft będzie wymagało „sudo cruft”, jeśli chcesz sprawdzić wszystkie katalogi.
muenalan