시스템에서 패키지가 아닌 모든 파일을 제거하는 도구

시스템에서 패키지가 아닌 모든 파일을 제거하는 도구

예를 들어, 빌드나 서버 시스템을 깨끗하게 유지하려면 다음을 수행하세요.모든 파일이 존재하고 설명되었는지 확인하십시오.패키지 메타데이터를 통해. 직장에서 우리는 인수 없이 실행하면 rm어떤 패키지에서도 언급되지 않은 모든 파일/디렉터리(일부 트리 제외)에 대해 / 문이 있는 파일을 생성하는 매우 훌륭한 도구를 가지고 있습니다. 이것은rmdir/home다른~에서rpm -V그리고debsums, 패키지에서 이미 언급한 파일만 확인합니다.

DEB/RPM/포트/기타 패키징 시스템에 대한 유사한 도구가 있습니까? DEB가 가장 좋지만 다른 시스템(또는 다른 시스템이 없는 경우 자체 시스템)에서 포팅하는 것이 가능할 수 있습니다.

PS: 저는요아니요대체 아키텍처를 찾고 있습니다. 여기서 문제는 시스템의 모든 파일을 고려하는 것입니다. VM 등은 해당되지 않습니다.

답변1

원하는 것이 파일 무결성 검사기라면 RPM이 귀하의 요구에 적합할 것입니다. rpm -qaV(대문자 V에 주목하세요). 이것은 통과하고 확인합니다:

  • 파일 크기
  • 모드(권한 및 파일 형식)
  • MD5 체크섬
  • 장치 번호(다른 파티션을 마운트하여 누군가 숨겨진 파일이 있는지 확인)
  • readlink 경로(기호 링크가 다른 파일을 가리키는 경우)
  • 사용자 소유권
  • 그룹 소유권
  • 시간 변경

이는 상당히 포괄적인 목록이어야 합니다.

rpm -qa --filesbypkg | awk '{print $2}'시스템에 기록된 모든 파일이 나열됩니다.
find / | grep -vf /tmp/files-on-system.txtRPM 데이터베이스에 없는 시스템의 모든 파일이 검색됩니다. 하나의 명령으로 두 명령을 모두 수행하는 또 다른 방법은 다음과 같습니다.rpm -qf 'find /'#replace single quote with backtick 참고: 이는 또한 디렉터리에 오류 파일을 표시합니다.

  • /dev
  • /home
  • /proc
  • /var/run
  • /var/log
  • /var/lib
  • /tmp

답변2

Debian 및 dpkg를 사용하는 기타 시스템에서는 sort -u /var/lib/dpkg/info패키지에서 제공하는 모든 파일 목록이 제공됩니다. 시스템에 실제로 존재하는 파일 목록과 비교해 보면 많은 수의 파일을 제공하는 패키지는 없음을 알 수 있습니다. 이 목록은 데비안 스퀴저를 간략히 살펴본 것이며 결코 완전한 것은 아닙니다.

  • 명백한 용의자: /etc, /usr/local, /opt, /var, /home, /srv, 다양한 마운트 지점.
  • 패키지 설치 스크립트에 의해 생성된 많은 기호 링크. 일반적으로 이는 파일이 패키지에 있었고 이제 대안으로 대체되었기 때문입니다. 먼저 새 패키지의 압축을 푼 다음 대체된 이전 패키지가 삭제되고 마지막으로 새 패키지의 postinst 스크립트가 링크를 생성합니다.
  • 일부 용도dpkg-divert.
  • in /boot, initrd-*(설치된 커널 및 추가 모듈에서 자동으로 재생성됨) 및 부트로더 파일( /boot/grub/*).
  • 에서는 /lib/modules/*모듈 종속성 파일과 기호 맵 및자동으로 모듈 컴파일(dkms에서).
  • 패키지를 설치할 때 유일하게 승인된 소스에서 다운로드되는 재배포 불가능한 다양한 콘텐츠입니다. 대부분 문서이지만 일부 글꼴도 있습니다.
  • X11 글꼴은 /usr/X11R6/lib/X11/fonts.
  • CUPS 백엔드가 에서 으로 복사 /usr/lib/cups/backend-available/됩니다 /usr/lib/cups/backend/http/.
  • 설치 중에 컴파일된 다양한 파일: *.pyc(Python), *.elc(Emacs), *.dll(Mono)...
  • 생성된 문서 색인 /usr/share/doc/HTML(에서돕다).

각 파일을 이해하려면 해당 기록을 추적해야 합니다. 즉, 감사를 통과하려면 자신이 소유한 문서만 보여주는 것이 아니라, 피감사인으로서 각 문서의 유효성에 대한 증거도 제시해야 합니다.

고전적인 접근 방식은 다음과 같은 도구를 사용하는 것입니다.인계철선, 파일이 변경되면 경고해 줍니다. 변경 사항을 추적할 수 있는 더 강력한 기능을 찾고 있다면 바로 이것이다.버전 관리. 데비안은 /etc다음을 통해 턴키 버전 제어를 제공합니다.관리자를 기다려주세요. (불행히도) 기본 설치의 일부가 아닙니다. 패키지를 설치하고 원하는 버전 제어 시스템을 선택한 /etc/etckeeper/etckeeper.conf다음 실행하십시오 etckeeper init. 아래의 모든 변경 사항은 매일 밤 /etc실행 또는 기타 APT 프런트엔드 전후에 자동으로 커밋됩니다 . apt-get이러한 자동 커밋을 비활성화하여 관리자가 수동으로 실행 etckeeper commit하고 로그 메시지를 입력하도록 할 수 있습니다.

답변3

깨끗하고 일관된 빌드 시스템을 정말로 원한다면 LVM에서 제공하는 것과 같은 파일 시스템 스냅샷을 사용하는 것이 더 나을 것입니다. LVM에 /usr과 같은 파일 시스템을 사용하여 시스템을 설치할 수 있습니다. 그런 다음 명령을 통해 원래 상태로 복원하려는 파일 시스템의 스냅샷을 생성할 수 있습니다 lvsnapshot. 이러한 스냅샷을 정상적으로 마운트하는 대신 쓰기 가능으로 마운트할 수 있습니다. 이전 상태로 되돌리려면 스냅샷을 마운트 해제하고 삭제한 후 다시 생성한 다음 새 스냅샷을 다시 마운트하면 됩니다. /home 또는 기타 파일 시스템을 현재 상태로 유지하려는 경우 이를 LVM에 배치할 수 있지만 해당 시스템의 스냅샷을 생성하지 마십시오.

소프트웨어 배포 또는 사용자 정의 설치 디스크를 테스트할 때 사용하는 또 다른 방법은 VirtualBox 또는 VMware Workstation과 같은 가상 머신을 사용하는 것입니다. 전체 디스크의 스냅샷을 찍고 요청 시 복원할 수 있습니다. 또한 호스트 재부팅 시 시스템을 일시 중지하는 등의 장점도 있습니다. 가상 머신이 시작된 후에는 일시 중지된 상태에서 다시 시작됩니다. 특히 VirtualBox는 여러 디스크 스냅샷을 찍은 다음 이를 보존하면서 이전 스냅샷으로 복원할 수 있습니다. 필요한 경우 두 개 이상의 행 스냅샷 간에 전환할 수 있습니다.

관련 정보