Herhangi bir pakete ait olmayan dosyalar nasıl bulunur?


12

Sistemimde herhangi bir pakete ait olmayan dosyalarım var, bunlar benim veya yüklü derlenmiş programlardan make install. Herhangi bir pakete ait olmayan tüm dosyaları nasıl bulabilirim?

Yanıtlar:


10

Gelen /var/lib/dpkg/infoolan .listmetin dosyaları liste tüm dosyaları Debian'ın paket yöneticisi aracılığıyla yüklenmiş her package¹ içerdiği söyledi.

Dosya sistemindeki herhangi bir girişle eşleşmeyen tüm dosyaları bulmak böyle naif bir şeyle elde edilebilir:

find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)

Tüm dosya sistemi taranacağı için bu çok uzun zaman alacaktır. Sistem dizinleri için ( /usrveya gibi /var) farklı bölümler kullanıyorsanız , bunları ilkinden sonra belirtin /.

Uyarı: Bu mu değil paket komut dosyaları tarafından oluşturulan dosyaları içerir. Örneğin:

  • /etc/hosts.allowherhangi bir yerde listelenmemiştir ancak libwrap0paketin yüklenmesi sırasında dosya yoksa, muhtemelen oluşturulan dosyadan gelebilir .
  • Yükleme sırasında birçok dosya derlenir, örneğin .pycdosyalar (derlenmiş Python kitaplıkları), .elcdosyalar (derlenmiş Emacs Lisp kütüphaneleri), vb.
  • ...

hatafind: argument list too long
naught101 16:18

@ naught101 Bu eşleşen bir gazillion dosyası olduğunu gösterir /var/lib/dpkg/info/*.list- yukarıdaki sorgu başka bir prensip altında yeniden yazılması gerekir.
Patrice Levesque

6

Proses ikamesi için destekli bir kabuk ( , AT&T , ) kullanarak @ Patrice'nin çözümünün daha verimli bir sürümü :bashkshzsh

(
  export LC_ALL=C
  comm -23 <(find / -xdev -type f | sort) \
           <(sort -u /var/lib/dpkg/info/*.list)
)

Patrice'in çözümü gibi, hiçbir dosya yolunun yeni satır karakteri içermediğini varsaymaz.


1
locateVeritabanını kullanmak çalıştırmaktan daha hızlı olur findmu? locate \* | grep -v "^/home/"- ayrıca içeriye /boot/ve diğer sistem bölümlerine bakma avantajına sahiptir .
naught101

3

Etiketlemiş olduğunuzdan debian, henüz belirtilmemiş olan bariz bir seçim ile sorunuzu sorguladığınızdan, cruft-ngherhangi bir esnekliğe ihtiyacınız cruftyoksa veya tüm sistemi / locatedb'yi aramak istemiyorsanız kullanmaktır.


0

Ayrıca işlem ikamesini de kullanabilirsiniz & grep& find. Belirli bir dizinde dosya arıyorsanız, grepyalnızca ilgili yolları /var/lib/dpkg/infobirkaç saniye kaydetmek için iki kez kullanıldığını unutmayın .

dir="/lib/x86_64-linux-gnu"
find "$dir" -type f \
| grep -v -x -F -f \
    <(find '/var/lib/dpkg/info' -name '*.list' -print0 \
       | xargs -0 grep -h -F "^$dir" \
       | sort -u)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.