回答:
に/var/lib/dpkg/info
は.list
、Debianのパッケージマネージャを通じてインストールされた各パッケージに含まれるすべてのファイルをリストしたテキストファイルがあります。
ファイルシステム内のどのエントリにも一致しないすべてのファイルを見つけるには、次のような単純な方法で実現できます。
find / -xdev -type f \( -exec grep -xq "{}" /var/lib/dpkg/info/*.list \; -or -print \)
ファイルシステム全体がスキャンされるため、これには明らかに非常に長い時間がかかります。システムディレクトリ(/usr
またはなど/var
)に別のパーティションを使用する場合は、初期パーティションの後に指定します/
。
警告:パッケージスクリプトによって作成されたファイルは含まれません。例えば:
/etc/hosts.allow
はどこにもリストさlibwrap0
れていませんが、パッケージのインストール時にそのファイルが存在しなかった場合、作成された可能性があります。.pyc
ファイル(コンパイルされたPythonライブラリ)、.elc
ファイル(コンパイルされたEmacs Lispライブラリ)などです。/var/lib/dpkg/info/*.list
—上記のクエリは他のいくつかの原則の下で書き直す必要があるでしょう。
@Patriceのソリューションのより効率的なバージョンで、プロセス置換をサポートするシェルを使用します(bash
、AT&T ksh
、zsh
):
(
export LC_ALL=C
comm -23 <(find / -xdev -type f | sort) \
<(sort -u /var/lib/dpkg/info/*.list)
)
Patriceのソリューションと同様に、改行文字を含むファイルパスはないと想定しています。
locate
データベースを使用する方が実行するよりも速くなりますfind
か?locate \* | grep -v "^/home/"
-また/boot/
、他のシステムパーティションを確認できるという利点もあります。
また、プロセス置換&使用することができますgrep
&をfind
。特定のディレクトリでファイルを探している場合grep
、関連するパスのみをフィルタリングするためにを2回使用し/var/lib/dpkg/info
て、数秒節約できることに注意してください。
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