
異常終了とカラフルなfsckの後に多くのファイルが失われました。 「rpm -Va」の出力は数百減ります(ほとんどのファイルがありませんが、チェックサムやその他の不一致もあります)。欠落または破損したファイルを含むパッケージを簡単に再インストールする方法はありますか?
問題のオペレーティングシステムはFedora 22です。
答え1
参照と完全性のために元の要求を達成するコマンドは次のとおりです(すばやく作業しますが、機能します)。
rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u
各セクションの簡単な説明は次のとおりです。
rpm -Va 2>&1
現在、rpmデータベースにインストール/リストされているすべてのパッケージに対して完全な検証が実行されます。また、私のボックスでは、辞書リンクのアクティブ化によって引き起こされたいくつかのエラーがエラーとして報告されますが、stdoutに表示したいので、stderrをstdoutにリダイレクトします。
注目:すべてのファイル、権限、所有者/グループを確認するには、rootとして実行する必要があります。
grep -vE '^$|prelink:'
空行と事前リンクエラーを抑制します(これらのエラーの例
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1
:)
sed 's|.* /|/|')
rpm -Va
ファイル名のみを表示するように出力がフィルタリングされます。
rpm -qf $()
取得したすべてのファイル名がどのパッケージに含まれているかを照会し、パッケージ名とバージョンを出力します。
| sort -u
重複したパッケージ名/バージョンの組み合わせは表示されません。
全体的に検証に失敗したパッケージのリストを受け取ります。
rpm -Va
--nodeps
.
答え2
最近、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呼び出しは時間を節約するように設計されています。
答え3
CentOS 7で同じ問題があり、@auxsvrの答えからいくつかのカスタマイズで問題を解決しました。
rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime |egrep 'manque|missing' |awk '$2=="d"{print "rpm -qf "$3}' |sh |sort -u |xargs yum -y reinstall