Yanıtlar:
Gelen /var/lib/dpkg/info
olan .list
metin 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 ( /usr
veya 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.allow
herhangi bir yerde listelenmemiştir ancak libwrap0
paketin yüklenmesi sırasında dosya yoksa, muhtemelen oluşturulan dosyadan gelebilir ..pyc
dosyalar (derlenmiş Python kitaplıkları), .elc
dosyalar (derlenmiş Emacs Lisp kütüphaneleri), vb./var/lib/dpkg/info/*.list
- yukarıdaki sorgu başka bir prensip altında yeniden yazılması gerekir.
Proses ikamesi için destekli bir kabuk ( , AT&T , ) kullanarak @ Patrice'nin çözümünün daha verimli bir sürümü :bash
ksh
zsh
(
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.
locate
Veritabanını kullanmak çalıştırmaktan daha hızlı olur find
mu? locate \* | grep -v "^/home/"
- ayrıca içeriye /boot/
ve diğer sistem bölümlerine bakma avantajına sahiptir .
Ayrıca işlem ikamesini de kullanabilirsiniz & grep
& find
. Belirli bir dizinde dosya arıyorsanız, grep
yalnızca ilgili yolları /var/lib/dpkg/info
birkaç 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)
find: argument list too long