알아낼 수 있는 방법이 있나요?모두특정 시스템의 파일아니요RPM을 통해 설치하시겠습니까? 파일 시스템의 모든 파일을 반복하는 스크립트와 같은 것을 사용하여 이를 강제로 수행 할 수 있다는 것을 알고 있지만 rpmquery -f
RPM 기반 시스템(특히 제가 집에 있는 Fedora)에서 이를 수행하는 표준 방법이 있는지 궁금합니다. ). Fedora용이므로 이를 이용하거나 yum
알아 dnf
두시면 좋을 것 같습니다.
이를 수행하는 표준 방법이 없다면 이를 수행할 수 있는 기존 스크립트를 아는 사람이 있습니까? 나는 필요하지 않다면 바퀴를 재발명하고 싶지 않습니다.
폴리스티렌이것과 비슷한 질문이 있습니다, 그러나 Gentoo와 Portage에 관한 것이므로 완전히 관련이 없습니다.
답변1
파티에 조금 늦었지만 누군가가 이것이 유용하다고 생각할 것입니다.
find /usr/ -exec /bin/sh -c 'rpm -qf -- "$1" >/dev/null 2>&1 || echo "$1"' find_sh {} \;
이 명령은 파일 시스템을 크롤링하여 rpm -qf
실행합니다. rpm -qf
파일에 해당하는 패키지를 인쇄합니다. 운 좋게 1이 발견되면 값 0이 반환되고, 그렇지 않으면 1이 반환됩니다.
당신이 용감하다면 출력을 에 바인딩할 수 있지만 | xargs rm -f
개인적으로는 그렇게 용감하지 않을 것입니다. /usr
실제로는 어떤 것에도 속하지 않는 많은 것들이 있다는 것이 밝혀졌습니다 .
답변2
모든https://superuser.com/questions/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system, 다음 명령은 요구 사항에 대한 확실한 기준입니다.
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
find 명령을 관심 있는 디렉터리로 필터링하여 추가로 사용자 정의합니다 ( /
예: 대신 디렉터리 목록 지정 또는 , , 및 등과 같은 폴더 /{usr,bin}
제외 ) ./proc
/dev
/home
/tmp
답변3
내가 아는 한, 일종의 전용 명령을 사용하는 것은 불가능하며 일부 스크립트를 통해서만 달성할 수 있습니다.TL;DR - 하단 링크를 참조하세요.이는 rpm 기반 시스템이나 기타 바이너리 기반 패키지 관리자에는 적합하지 않습니다. 이러한 패키지 관리자는 일반적으로 사용자가 패키지 관리자 "뒤에 있는" 시스템에 몰래 들어가는 모든 것을 이해하기보다는 자신이 설치한 항목을 추적하도록 설계된 상태 기반 시스템입니다.
rpm 파일이 아닌 파일에 대해서는 어디에 선을 그어야 합니까? 임시 파일(/tmp 및 /var/tmp 등), 캐시(/var/cache 등) 또는 사용자 생성 파일(/home 또는 /srv 또는 기타 사용자 정의 마운트 지점)은 어떻습니까?
소스 기반 배포의 경우 사용 사례에서 제한하는 경우 기능을 제공하는 것이 합리적일 수 있습니다.FHS타사 소프트웨어의 경우 /usr/local 또는 /opt 대신 /usr, /bin, /lib 등과 같은 "시스템" 패키지에서 사용되는 디렉터리입니다.
요청한 작업을 수행하는 스크립틀릿에 대해서는 다음과 유사한 질문을 참조하세요.