누락되거나 손상된 파일이있는 패키지 재설치 따라 많은 파일이 사라졌습니다. ‘rpm -Va’의

불완전한 종료와 화려한 fsck에 따라 많은 파일이 사라졌습니다. ‘rpm -Va’의 출력은 수백 줄입니다 (대부분 파일이 누락되었지만 일부 체크섬 및 기타 불일치). 파일이 없거나 손상된 패키지를 쉽게 다시 설치할 수 있습니까?

해당 OS는 Fedora 22입니다.



답변

참조 및 완전성을 위해 처음에 요청한 것을 달성 할 수있는 하나의 명령은 다음과 같습니다.

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u

다음은 다양한 부분에 대한 간단한 설명입니다.

rpm -Va 2>&1

rpm 데이터베이스에 현재 설치되어 있거나 나열된 모든 패키지에 대해 완전한 검증을 실행합니다. 또한 내 상자에서 프리 링크가 활성화되어 발생하는 일부 오류가 오류로보고되지만 stdout에서 원할 때 stderr을 stdout으로 리디렉션합니다.
주의 : 모든 파일, 권한 및 소유자 / 그룹을 확인할 수 있으려면 루트로 실행해야합니다.

grep -vE '^$|prelink:'

emtpy 행 및 사전 링크 오류 표시를 억제합니다 (예 : 오류
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1).

sed 's|.* /|/|')

rpm -Va파일 이름 만 표시 하도록 출력을 필터링합니다.

rpm -qf $()

패키지에 포함 된 획득 한 모든 파일 이름을 쿼리하고 패키지 이름과 버전을 출력합니다.

| sort -u

중복 된 패키지 이름 / 버전 조합을 억제합니다.

모두 확인에 실패한 패키지 목록을 받게됩니다.

rpm -Va패키지와의 종속성을 검사하기 때문에 관련없는 일부 문제가 여전히 표시 될 수 있습니다 --nodeps.


답변

최근에 openSUSE 13.2에서 누락 된 파일과 비슷한 문제가 발생하여 다음과 같이 수정했습니다.

rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime\
| awk -e '($1=="missing") && ($2=="d") {system("rpm -qf "$3);}; ($1=="missing") && ($2!="d") && ($2!="c") {system("rpm -qf "$2);}'\
| sort -u | xargs zypper in -f

rpm 옵션과 awk 호출은 손상이 발생하지 않았기 때문에 시간을 절약하기위한 것입니다.