误删/var/lib/dpkg/info,文件解决方案(是否完全解决,不确定)

版权声明:个人原创,转载请申明 https://blog.csdn.net/baidu_38172402/article/details/86611909

/var/lib/dpkg/info”用于保存各个软件包的配置文件列表,误删该文件夹,并不会造成系统瘫痪,但会对后续软件的安装造成影响,导其无法找到相关的依赖库,导致软件安装失败。

1.以下解决方案来自google:运行一下脚本文件:

#!/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"

亲测,在本人机器上无效。

2.前提是aptitude可以使用,否则无效。首先用1中方法解决,确实在info下生成了相关文件,但却没有生效。本人刚开始时用

aptitude命令,提示未找到该命令,sudo apt-get install aptitude 也无法安装成功,改为apt-get 也是不成功,因为info删除后,找不到相关的依赖库,所以拷贝了与本机器相同(系统版本号一模一样)info文件夹,可以安装新的软件,但却无法卸载以前的软件,后面运行下面脚本,基本修复了该问题。

#!/bin/bash
for package in $(cat dpkg-warning.txt | grep "dpkg: warning: files list file for package " | grep -Po "'[^']*'" | sed "s/'//g");
do
  aptitude reinstall "$package";
  #如果没有安装aptitude, 则可以用apt-get --reinstall "$package";
done

cat dpkg-warning.txt

dpkg: warning: files list file for package 'phddns' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'valgrind-dbg' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'linux-headers-generic' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'libxml-sax-perl' missing; assuming package has no files currently installed
dpkg: warning: files list file for package 'libgcc-5-dev-arm64-cross' missing; assuming package has no files currently installed

2来自于:https://blog.csdn.net/taosera/article/details/79420257?utm_source=blogxgwz0

以上两种方法,经检测是最可靠的,如果都没办法的,只能重装系统了,所以使用强制删除时要谨慎啊?网上部分帖子的命令,在完全不了解的情况下也不要随意尝试。

猜你喜欢

转载自blog.csdn.net/baidu_38172402/article/details/86611909