简单的说关于dpkg是一个dpkg是Debian的中级软件包管理器,类似RPM.
而其中的:/var/lib/dpkg/info”用于保存各个软件包的配置文件列表.
如果把这个里面的东西全部删除系统并不会瘫痪(我莽撞的尝试过了,哈哈),它好像联接到/etc/init.d/相关目录的命令。而Terminal对软件包的命令来源于那里(暂时这么认为的,呵呵)如: 自己安装mysql,没有了/ect/init.d 里的mysql文件, Terminal将无法执行: service mysql restart 将无法重启mysql,各种liunx的命令可能会有区别,好像看到 service mysqld [stop| stop| restart]这样的命令。随便提下我的系统是ubuntu。
但如果你误删了ect/init.d 的目录,那么重装是无济于事的。那么如何恢软件包在/ect/init.d里相应文件呢?
暂时只在下面方法取得成功:
将/var/lib/dpkg/info里的相应内容删除,一般一个软件有几个相对应文件,但可以区分的,如:mysql的开头都是mysql,那么reinstall该然件包,系统会再次在/etc/init.d下生成相应的文件。 如: /etc/init.d/mysql. 试一试命令: sudo service mysql restart,成功了!
参考http://hi.baidu.com/gengjie/blog/item/7e4d3e7af535a3ec2e73b3bd.html
#!/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"
From:
http://blog.csdn.net/gf574723691/article/details/53505721