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


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.