知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

误删dpkg的/var/lib/dpkg/info文件夹的解决办法

发布时间:2014-09-05 14:45:08作者:知识屋

误删dpkg的/var/lib/dpkg/info文件夹的解决办法
 
今天安装软件时时,出现这样的错误提示:E: Sub-process /usr/bin/dpkg returned an error code (1)
 
上网查解决方案,被网上误导,一不小心误删了dpkg的info文件夹,之后在使用apt-get 或者 dpkg命令总是提示
 
“dpkg:警告:无法找到软件包 ******* 的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里”
 
上网查了一下,info文件夹保存各个软件的配置文件列表,真是粗心大意啊。
 
试了很多网上传说的方法都不好用,只好祭出谷歌神器,终于在国外的一个文章中找到了解决方案
 
执行下面的脚本
 
#!/bin/bash
set -e
 
# Clean out /var/cache/apt/archives
apt-get clean
# Fill it with all the .debs we need
apt-get --reinstall -dy install $(dpkg --get-selections | grep '[[:space:]]install' | cut -f1)
 
DIR=$(mktemp -d -t info-XXXXXX)
for deb in /var/cache/apt/archives/*.deb
do
    # Move to working directory
    cd "$DIR"
    # Create DEBIAN directory
    mkdir -p DEBIAN
    # Extract control files
    dpkg-deb -e "$deb"
    # Extract file list, fixing up the leading ./ and turning / into /.
    dpkg-deb -c "$deb" | awk '{print $NF}' | cut -c2- | sed -e 's/^//$///./' > DEBIAN/list
    # Figure out binary package name
    DEB=$(basename "$deb" | cut -d_ -f1)
    # Copy each control file into place
    cd DEBIAN
    for file in *
    do
        cp -a "$file" /var/lib/dpkg/info/"$DEB"."$file"
    done
    # Clean up
    cd ..
    rm -rf DEBIAN
done
rmdir "$DIR"
 
原理是重新下载所有安装过的软件包,然后从中提取文件列表信息复制到info文件夹里。
 
执行完毕后提示x11-common有空文件列表,原因不明,只能执行替换法了,从别的ubuntu上拷贝了x11-common的文件,
 
但是依然提示dpkg警告,例如chrome的,对于这些软件只好手动安装了,手动重新安装chrome和WPS之后问题解决
 
apt-get和dpkg终于没有警告了。虽然问题解决,也不知道是否解决彻底,暂时就这样吧,如果在有问题只好重装了,哇咔咔~
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜