Как я могу получить список файлов на моем компьютере, которые «не принадлежат» ни одному пакету?

9

Я собираюсь написать сценарий, который делает это:

  • Просматривает каждый файл в / usr / lib
  • Выполняет dpkg -sпоиск по каждому файлу.
  • Сообщает список «потерянных» файлов, не принадлежащих ни одному из пакетов .deb.

Идея заключается в том, что со временем я установил много make installпрограммного обеспечения и хотел бы получить список оставшихся файлов из установленного вручную программного обеспечения, которое я с тех пор удалил.

Кен Киндер
источник
В будущем убедитесь, что все, что вы устанавливаете вне упаковочной системы, будет установлено в / usr / local или / opt. Тогда у вас будет четкое разделение.
Гейра

Ответы:

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

Я предупреждаю вас сейчас: это медленно.

Оли
источник
3
Это быстрее:find /usr/lib -type f -exec dpkg -S {} + | grep 'no path found'
αғsнιη
1
Никаких разногласий нет. Оли 2012 не был так хорош, как 2015. Я обновил его, поэтому он возвращает только список файлов.
Оли
3

Вы можете запустить следующую команду

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

который сравнивает список файлов /usr/libсо списком файлов, присутствующих хотя бы в одном файле /var/lib/dpkg/info/<NAME>.list(файлы, используемые dpkg -S). -v1Вариант файлы отчетов , присутствующие в первом списке , но не во втором.

На моей машине этот список различий дает более 5000 просмотров, поэтому я сомневаюсь, что это могло бы помочь.

enzotib
источник
Работает очень быстро для меня.
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
user2697383
источник
1
Мне там нравится man cruft, но чуть более подробное объяснение о крофе и о том, почему вы рекомендуете, было бы неплохо! : P ;-)
Fabby
Это не будет работать, точнее: (1) «chown: отсутствует операнд после« root: cruft »». Нужно написать: "sudo chown root: cruft / var / spool / cruft" вместо этого (2) "sudo addgroup $ USER cruft" потребует закрытия / открытия новой оболочки (relogin). (3) Для вызова cruft потребуется «sudo cruft», если вы хотите проверить все каталоги.
Muenalan