![어떤 패키지에도 속하지 않는 파일을 찾는 방법은 무엇입니까?](https://linux55.com/image/55033/%EC%96%B4%EB%96%A4%20%ED%8C%A8%ED%82%A4%EC%A7%80%EC%97%90%EB%8F%84%20%EC%86%8D%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 시스템에는 어떤 패키지에도 속하지 않는 파일이 있습니다. 해당 파일은 내 파일이거나 배송된 파일입니다 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)