查找安装后文件被删除或丢失的软件包

查找安装后文件被删除或丢失的软件包

我只是不小心这样做了,rm -r /var但幸运的是,在造成更多损失之前设法 ^C 了它。有没有办法找出该位置上所有文件被删除的软件包,以便我可以重新安装它们?

% ls -l /var
total 20
drwxr-xr-x  2 root root 4096 Jan 14 08:26 backups
drwxr-xr-x 23 root root 4096 Jan  6 20:26 cache
drwxr-xr-x 70 root root 4096 Jan 14 09:26 lib
lrwxrwxrwx  1 root root    9 Oct 31 17:53 lock -> /run/lock
drwxrwsr-x  2 root mail 4096 Oct 17 02:59 mail
lrwxrwxrwx  1 root root    4 Oct 31 17:53 run -> /run
drwxr-xr-x 11 root root 4096 Jan 10 22:06 spool

答案1

首先给出更通用、更简单的答案:

假设 dpkg 状态区域完好无损,您可以使用以下命令确定是否有任何已安装的软件包缺少注册文件:

for p in $(dpkg-query -f '${Package} ' -W); do
    dpkg -L $p | grep '^/' | while read file; do
        [ -e "$file" ] || echo "$p is missing $file"
    done
done

要将检查限制在下的文件/var,您只需更改 grep 表达式:

for p in $(dpkg-query -f '${Package} ' -W); do
    dpkg -L $p | grep '^/var/' | while read file; do
        [ -e "$file" ] || echo "$p is missing $file"
    done
done

但是,这对你来说可能用处不大。部分原因是 Debian/Ubuntu 中的大多数软件包不会直接将许多文件发送到/var,还因为我提到的 dpkg 状态区域生活在 之下/var,在 中/var/lib/dpkg。如果从那里删除了任何内容,您的问题就会变得更加复杂。

根据 FHS ,其中的大部分数据/var都是“可变数据”;“假脱机目录和文件、管理和日志数据以及临时文件”。即使您重新安装所有软件包,其中的大部分(如果不是大部分)也不会恢复。但同样,即使没有它,您的系统也可能仍然可以很好地运行。

中最重要的数据/var是您自己的数据;这可能是数据库内容、邮件、crontab 等。其中大部分将位于/var/lib/var/mail/var/spool/var/local和下/var/opt。如果这类数据已被删除,那么您可能只需要希望有好的备份。通常不太重要的是 中的系统日志/var/log。如果这些都消失了,显然您已经失去了诊断过去问题的能力,但一切应该仍然工作. 中其余最常见的目录/var/var/backups/var/cache/var/run、;其中一些可能是指向 或其他地方的符号链接/var/lock)您不必担心;那里的数据应该可以由拥有应用程序重新生成。/var/tmp/run

最后,如果您在意外删除操作后尚未重新启动系统或系统守护程序,则某些看似已删除的文件可能仍隐藏在某个进程中,并保持打开状态。此lsof工具可以帮助您找到这些文件,您可以通过从 复制这些文件来检索它们/proc/$pid/fd/$fdnumber

答案2

我会采用一种更简单的方法。

请记住,您有一个已安装软件包的镜像(实际上是一个缓存),位于

/var/cache

因此,如果您想恢复程序和配置,只需进入缓存并重新安装其中的内容。当然,这只有在您没有安装任何会严重破坏系统的东西并且没有删除 apt 包缓存的情况下才会起作用(您为什么要这样做!?)

如果是这样的话,我会选择:

cd /var/cache/apt/archives/

sudo apt-get install *.deb

再次强调,只有当您的系统在删除内容之前运行正常时,您才应该这样做。无论如何,您将在该位置找到所有已安装的软件包,它们会像第一次安装时一样重新配置您的设置(因此,尽管下面有注释,但您仍将获得程序 + 配置)。

相关内容