패키지가 "소유"하지 않은 컴퓨터의 파일 목록을 어떻게 얻을 수 있습니까?


9

이 작업을 수행하는 스크립트를 작성하려고합니다.

  • / usr / lib의 각 파일을 살펴 봅니다.
  • 합니까 dpkg -s각 파일에 대한 검색을.
  • .deb 패키지에 속하지 않은 "고아"파일 목록을보고합니다.

아이디어는 시간이 지남에 따라 많은 make install소프트웨어를 설치했으며 삭제 한 후에 수동으로 설치된 소프트웨어에서 남은 파일 목록을 얻고 싶습니다.


향후 패키징 시스템 외부에 설치 한 모든 항목이 / usr / local 또는 / opt에 설치되어 있는지 확인하십시오. 그런 다음 명확하게 분리 할 수 ​​있습니다.
geirha

답변:


8
find /usr/lib -type f -exec dpkg -S {} + 2>&1 >/dev/null | sed -r 's/^[^/]+//'

나는 지금 당신에게 경고 할 것입니다 : 그것은 느립니다.


3
더 빠르다 :find /usr/lib -type f -exec dpkg -S {} + | grep 'no path found'
αғsнιη

1
거기에 동의하지 않습니다. 2012 년의 Oli는 2015 년만큼 좋지 않았습니다. 파일 목록 만 반환하도록 업데이트했습니다.
Oli

3

다음 명령을 실행할 수 있습니다

join -t '' -v1 <(find /usr/lib | sort) \
               <(grep -h /usr/lib /var/lib/dpkg/info/*.list | sort -u)

파일 목록과 파일에 /usr/lib있는 파일 목록 /var/lib/dpkg/info/<NAME>.list(에서 사용 된 파일 dpkg -S)을 비교합니다. 이 -v1옵션은 첫 번째 목록에는 있지만 두 번째 목록에는없는 파일을보고합니다.

내 컴퓨터 에서이 차이 목록은 5000 개 이상의 히트를 제공하므로 도움이 될 수 있습니다.


정말 빨리 작동합니다.
user1202136

2
sudo aptitude install cruft
man cruft
sudo addgroup cruft
sudo chmod g+rwx /var/spool/cruft
sudo chown root:cruft /var/spool/cruft
sudo addgroup $USER cruft
cruft -r cruftreport
sudo chown root:root /var/spool/cruft
less cruftreport

1
나는 man cruft거기를 좋아 하지만 부스러기에 대한 약간 더 많은 설명과 왜 당신이 그것을 추천 할 것입니까! : P ;-)
Fabby

이것은 더 정확하게 작동하지 않습니다. (1) "chown : 'root : cruft'뒤에 피연산자가 없습니다." 다음을 작성해야합니다 : "sudo chown root : cruft / var / spool / cruft"대신 (2) "sudo addgroup $ USER cruft"는 새 쉘을 닫거나 열어야합니다 (재 로그인). (3) 부스러기를 호출하려면 모든 다이어를 검사하려면 "스 도프 부스러기"가 필요합니다.
muenalan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.