如何恢复已删除的充满 dpkg 管理的文件的文件夹?

如何恢复已删除的充满 dpkg 管理的文件的文件夹?

我正在尝试基于第 3 方 docker 映像制作一个交互式 docker 容器,该映像/usr/share/man已被删除以节省图层空间。属于该文件夹中的每个文件都是 apt 包的一部分,否则可以正常工作。我想仅恢复我当前已安装的软件包的那些已删除的手册页。

对于单个包解决这个问题的方法是重新安装它。我可能会--reinstall在容器上的每个包裹上写上类似的东西,

apt-get --reinstall install \
    $(dpkg --get-selections | awk '$2=="install"{print $1}')

但是有没有一种方法可以有选择地让 dpkg 重新创建已删除的文件夹,而不必每次重建时都诉诸这样一个耗时和带宽消耗的过程?

答案1

您将需要重新安装受影响的软件包,因为本地映像没有任何内容可供修复。

但是,您可以最大程度地减少所需的维修量。

您可以/usr/share/man通过循环确定哪些包中包含文件,例如

for pkg in $(dpkg --get-selections | awk '$2=="install" { print $1}')
do
  f=$(dpkg -L $pkg | grep /usr/share/man)
  if [ -n "$f" ]
  then
    echo $pkg has files in /usr/share/man
  fi
done

然后您可以重新安装这些软件包。

我们甚至可以通过查看/var/lib/dpkg/info/$pkg.infoman 文件并与丢失的内容进行比较来进一步限制丢失的内容,然后仅重新安装它们。

然而,最终,我认为你会重新安装一个很多的包裹。在我的 Jessie 安装中,703 个软件包的文件为/usr/share/man.这比安装的 2200 个软件包要好,但仍然很多。似乎表明了避免网络流量的本地镜像。

相关内容