我可以期望“debsums -cs”在完成时退出并提示吗?

我可以期望“debsums -cs”在完成时退出并提示吗?

由于一个愚蠢的用户错误,我搞乱了我的 Ubuntu 16.04 LTS 安装——它启动时出现黑屏。

幸运的是,文件系统完好无损,我可以毫无困难地进入控制台会话。我试图撤消我的损坏(撤消日志中的最后一组更改),在朋友的英勇帮助下,我们设法使用 xfce4 桌面进入图形会话(我在 14.04 天前安装它作为实验)。

我正在尝试按照这个答案恢复我的系统到正常工作状态(我使用 Unity),但当我进行到“步骤 3”时,sudo debsums -cs它停滞了。很快,我列出了一些缺失的字体(我删除了一些 Noto 字体——我知道这一点),然后这个过程就安静了下来。

我第一次让它运行了 18 个小时,但在最初几分钟后没有得到任何新结果。我关闭它,重新运行debsums_init,然后再次尝试……结果完全相同。检查top该过程,它向我显示了以下内容:

顶部输出

那么,我应该期望它debsums -cs完成工作并退出并提示吗?还是它挂了?还是它已经告诉我了所有要告诉我的事情,我应该直接杀掉它?


更新- 解决了@muru 的以下诊断和建议(请参阅下面接受的答案):

这是输出lsof -p PID

 COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
 debsums 14678 root  cwd    DIR    8,2     4096 13369346 /home/user
 debsums 14678 root  rtd    DIR    8,2     4096        2 /
 debsums 14678 root  txt    REG    8,2  1907192  8475875 /usr/bin/perl
 debsums 14678 root  mem    REG    8,2    27168  8651816 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/File/Glob/Glob.so
 debsums 14678 root  mem    REG    8,2    10368 10493560 /usr/lib/x86_64-linux-gnu/perl5/5.22/auto/File/FnMatch/FnMatch.so
 debsums 14678 root  mem    REG    8,2    14480  9859421 /usr/lib/x86_64-linux-gnu/perl5/5.22/auto/Locale/gettext/gettext.so
 debsums 14678 root  mem    REG    8,2    35328  8654166 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/Encode/Encode.so
 debsums 14678 root  mem    REG    8,2   102064  8524369 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/POSIX/POSIX.so
 debsums 14678 root  mem    REG    8,2    18704  8658188 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/Digest/MD5/MD5.so
 debsums 14678 root  mem    REG    8,2    18768  8654260 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/IO/IO.so
 debsums 14678 root  mem    REG    8,2    18696  8524352 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/Fcntl/Fcntl.so
 debsums 14678 root  mem    REG    8,2    47696  8658199 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/List/Util/Util.so
 debsums 14678 root  mem    REG    8,2    14608  8524357 /usr/lib/x86_64-linux-gnu/perl/5.22.1/auto/Cwd/Cwd.so
 debsums 14678 root  mem    REG    8,2  2981280  8389721 /usr/lib/locale/locale-archive
 debsums 14678 root  mem    REG    8,2    39224  7078564 /lib/x86_64-linux-gnu/libcrypt-2.23.so
 debsums 14678 root  mem    REG    8,2  1864888  7078561 /lib/x86_64-linux-gnu/libc-2.23.so
 debsums 14678 root  mem    REG    8,2   138696  7078570 /lib/x86_64-linux-gnu/libpthread-2.23.so
 debsums 14678 root  mem    REG    8,2  1088952  7078569 /lib/x86_64-linux-gnu/libm-2.23.so
 debsums 14678 root  mem    REG    8,2    14608  7078560 /lib/x86_64-linux-gnu/libdl-2.23.so
 debsums 14678 root  mem    REG    8,2   162632  7078534 /lib/x86_64-linux-gnu/ld-2.23.so
 debsums 14678 root  mem    REG    8,2     1719  9999141 /usr/share/locale-langpack/en_GB/LC_MESSAGES/dpkg-dev.mo
 debsums 14678 root    0u   CHR  136,0      0t0        3 /dev/pts/0
 debsums 14678 root    1u   CHR  136,0      0t0        3 /dev/pts/0
 debsums 14678 root    2u   CHR  136,0      0t0        3 /dev/pts/0
 debsums 14678 root    3r   REG    8,2      307  2915907 /var/lib/dpkg/info/libfm-extra4:amd64.md5sums

在此之前有以下警告:

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
  Output information may be incomplete.

的输出watch lsof -p PID是静态的,自启动以来就没有改变过:

观看 lsof

watch使用管道运行| tail可得到:

观看尾巴

也就是说,与上面截图中的最后 10 行相同。FWIW,文件libfm-extra4:amd64.md5sums(307 字节)列出如下:

-rw-r--r-- 1 root root 307 Jul 12  2016 /var/lib/dpkg/info/libfm-extra4:amd64.md5sums

输出的结果sudo strace -p PID为以下五行无限循环:

readlink("/usr/share/doc/libfm-extra4", "libfm4", 4095) = 6
lstat("/usr/share/doc/libfm4", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/usr/share/doc/libfm4/changelog.Debian.gz", {st_mode=S_IFLNK|0777, st_size=35, ...}) = 0
readlink("/usr/share/doc/libfm4/changelog.Debian.gz", "../libfm-extra4/changelog.Debian"..., 4095) = 35
lstat("/usr/share/doc/libfm-extra4", {st_mode=S_IFLNK|0777, st_size=6, ...}) = 0

调查/usr/share/doc/libfm-extra4目录后发现该changelog.Debian.gz文件是一个符号链接,无法找到目标。删除该文件后,进程可以 debsums -cs继续。


如果有帮助:我通过将 Debian 源放入我的系统sources.list并运行更新,而不是使用 GDebi 包管理器,损坏了我的系统。我失去了对 Unity 的访问权限,尽管我现在正在同一台机器上工作,并且通过从控制台启动 xcfe 会话xstart。我无法通过这种方式启动 Unity 会话。

答案1

如果debsums退出,您可以期待出现提示。但是,我认为它正在执行 IO 密集型操作,这些操作很耗时。

在另一个终端中,运行lsof -p PID,其中 debsums 的 PID 可以从 top 获得。这应该会显示它打开的文件列表。运行watch lsof -p PID以便更新列表,您可以查看它是在进行中还是卡住了。

打开文件列表的顶部主要由用于运行debsums自身的文件(perl 和各种 perl 模块)组成。感兴趣的部分是这里的最后一行 -.md5sums它正在读取的文件。它正在检查的文件可能在列表的更下方,因此可能是运行watch 'lsof -p PID | tail'

相关内容