어떤 패키지에도 속하지 않는 파일을 찾는 방법은 무엇입니까?

어떤 패키지에도 속하지 않는 파일을 찾는 방법은 무엇입니까?

내 시스템에는 어떤 패키지에도 속하지 않는 파일이 있습니다. 해당 파일은 내 파일이거나 배송된 파일입니다 make install. 어떤 패키지에도 속하지 않는 모든 파일을 찾는 방법은 무엇입니까?

답변1

이 텍스트 파일은 데비안 패키지 관리자를 통해 설치된 각 패키지 1에 포함된 /var/lib/dpkg/info모든 파일을 나열합니다..list

항목과 일치하지 않는 파일 시스템의 모든 파일을 찾는 것은 다음과 같이 간단하게 수행할 수 있습니다.

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 라이브러리) 등과 같은 많은 파일이 설치 프로세스 중에 컴파일됩니다.

답변2

더 효율적인 버전@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의 솔루션과 마찬가지로 파일 경로에 개행 문자가 포함되어 있지 않다고 가정합니다.

답변3

debian아직 언급되지 않은 명백한 옵션으로 질문에 태그를 지정했으므로 유연성 cruft-ng이 필요하지 않거나 전체 시스템/위치를 검색하고 싶지 않은 경우 cruft이를 사용할 수 있습니다 .

답변4

grep프로세스 교체 && 를 사용할 수도 있습니다 find. 디렉터리에서 파일을 찾는 경우 grep이를 두 번 사용하여 관련 경로만 필터링하면 몇 초를 절약할 수 있습니다./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)

관련 정보