[分享]检测系统中包文件是否完整的方法

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
firehare
帖子: 2625
注册时间: 2005-04-10 16:54
来自: 温州大学
联系:

[分享]检测系统中包文件是否完整的方法

#1

帖子 firehare » 2005-05-20 11:09

昨天,我用sudo打开了一个文件浏览器,在去厕所之前没有锁定屏幕,被我的小表弟给误删了/usr/lib/evolution*(后面记不清了)目录,而且居然在回收站都找不到,真不明白他居然有这等电脑水平!重新安装evolution发现接收服务器协议中POP等协议都没了,只剩下Exchange一项了,于是上了IRC的#Ubuntu-zh,找到了华华,问问到底应如何才能找到是哪个包少了文件。
经过华华,月月和罗勇的帮助,终于解决了该问题,华华给出了他的脚本:
一开始我用的脚本是:

代码: 全选

$find /var/lib/dpkg/info -name '*list' -exec cat {} \; | xargs ls 2> errorpkgs.lst
这个也是我得出结果的那个,运行完之后,使用命令

代码: 全选

$grep 没有 errorpkgs.lst>errpkgfind.lst
在errpkgfind.lst中找到相应的缺失文件,然后用

代码: 全选

$dpkg -S 缺失文件
就可以知道是哪个包损坏了

可是在运行的过程中发现该脚本运行速度很慢,于是华华给出了他的最终版

代码: 全选

#!/bin/sh
cat /var/lib/dpkg/info/*.list | while read F
do
  [ ! -f "$F" ] && echo $F >> errpkg.lst
done
不过这东东尚未运行过,不过看起来似乎没错,所以如果有哪位仁兄也遇到我这样的情况不妨一试!
我心无畏,源自于我心无知。
图片
头像
max0000
帖子: 310
注册时间: 2005-04-08 14:54

#2

帖子 max0000 » 2005-07-20 22:47

怀疑系统不对,拿来试了一下。

你没运行过的脚本没有找到什么东西。

最先的找到了。grep 出来,dpkg后提示:

代码: 全选

转移(diversion)到了 nvidia-glx 从: /usr/X11R6/lib/libGL.so.1.2
转移(diversion)到了 nvidia-glx 到: /usr/X11R6/lib/nvidia/libGL.so.1.2.xlibmesa
xlibmesa-gl: /usr/X11R6/lib/libGL.so.1.2
这是什么意思?
回复