升级到 Debian 12 后,/lib/x86_64-linux-gnu/ 和 /usr/lib/x86_64-linux-gnu/ 中出现重复文件

升级到 Debian 12 后,/lib/x86_64-linux-gnu/ 和 /usr/lib/x86_64-linux-gnu/ 中出现重复文件

我刚刚将我的系统从 Debian 11 升级到 12,按照以下步骤cyberciti 的指南。这个系统已经保持最新9年多了,所以它已经经历了至少4次重大升级(今天的Debian 7或8到12)。

在第一次运行期间apt upgrade --without-new-pkgs,我遇到了一个错误libudev(遗憾的是我忘记保留命令的输出),我通过删除 2 个文件解决了该问题:

$ rm /lib/x86_64-linux-gnu/libudev.so.1 /lib/x86_64-linux-gnu/libudev.so.1.6.5

我能够完成升级并重新启动。


通过进一步调查,我的系统似乎还有一些其他重复的库:

$ dpkg --search /lib/x86_64-linux-gnu/perl/ /usr/lib/x86_64-linux-gnu/perl/
dpkg-query: no path found matching pattern /lib/x86_64-linux-gnu/perl/
libperl5.36:amd64: /usr/lib/x86_64-linux-gnu/perl

看起来这些目录不是符号链接:

$ ls -ld /lib/ /lib/x86_64-linux-gnu/ /usr/ /usr/lib/ /usr/lib/x86_64-linux-gnu/
drwxr-xr-x 84 root root 4.0K Jul  5 21:05 /lib//
drwxr-xr-x 78 root root  96K Jul  5 21:05 /lib/x86_64-linux-gnu//
drwxr-xr-x 12 root root 4.0K Jul  5 20:32 /usr//
drwxr-xr-x 84 root root 4.0K Jul  5 21:05 /usr/lib//
drwxr-xr-x 78 root root  96K Jul  5 21:05 /usr/lib/x86_64-linux-gnu//

我之前已经遇到过一个非常类似的问题:从 Debian 10 升级到 11 后无法恢复 systemd:“未定义符号:seccomp_api_get”


以下是问题:

  1. /lib/x86_64-linux-gnu/和中有重复的库是否正常/usr/lib/x86_64-linux-gnu/
  2. 我可以依赖 的输出dpkg --search并删除显示的路径no path found …吗?或者有什么工具可以帮助我清理这个烂摊子吗?
  3. 我的系统上发生哪些事件可能导致这种情况发生?

更新:实际上看起来有两个目录是相同的:

$ ls -lh /lib/x86_64-linux-gnu/test.ignore /usr/lib/x86_64-linux-gnu/test.ignore
ls: cannot access '/lib/x86_64-linux-gnu/test.ignore': No such file or directory
ls: cannot access '/usr/lib/x86_64-linux-gnu/test.ignore': No such file or directory
$ touch /lib/x86_64-linux-gnu/test.ignore
$ ls -lh /lib/x86_64-linux-gnu/test.ignore /usr/lib/x86_64-linux-gnu/test.ignore
-rw-r--r-- 1 root root 0 Jul  5 22:14 /lib/x86_64-linux-gnu/test.ignore
-rw-r--r-- 1 root root 0 Jul  5 22:14 /usr/lib/x86_64-linux-gnu/test.ignore

但我不明白它是如何工作的。现在我知道我不能删除其中的文件,/lib/x86_64-linux-gnu/因为它也会删除其中的文件/usr/lib/x86_64-linux-gnu/

答案1

如果您想查看符号链接,则不得添加/

ls -ld /lib

应该会向您显示不同的结果。

Debian 12强制执行“合并/usr,您看到的“重复”是正常的。

答案2

在斯蒂芬·基特的回答的帮助下,以下是我的问题的答案:

  1. /lib/x86_64-linux-gnu/和中有重复的库是否正常/usr/lib/x86_64-linux-gnu/

是的,有一个符号链接:

$ ls -ld /lib /usr/lib
lrwxrwxrwx  1 root root    7 Jul  5 20:34 /lib -> usr/lib/
drwxr-xr-x 75 root root 4096 Jul  6 00:42 /usr/lib/
  1. 我可以依赖 的输出dpkg --search并删除显示的路径no path found …吗?或者有什么工具可以帮助我清理这个烂摊子吗?

不,使用dpkg --searchon/lib只会给出不相关的结果,因为某些文件安装在/usr/lib/:

$ dpkg --search /lib/x86_64-linux-gnu/perl/cross-config-5.36.0/Config.pm \
/usr/lib/x86_64-linux-gnu/perl/cross-config-5.36.0/Config.pm
dpkg-query: no path found matching pattern /lib/x86_64-linux-gnu/perl/cross-config-5.36.0/Config.pm
libperl5.36:amd64: /usr/lib/x86_64-linux-gnu/perl/cross-config-5.36.0/Config.pm

删除该文件/lib/x86_64-linux-gnu/perl/cross-config-5.36.0/Config.pm将删除 中的文件/usr/lib,这可能会破坏整个系统。

  1. 我的系统上发生哪些事件可能导致这种情况发生?

正如 Stephen 共享的链接中所解释的,从 到/lib的符号链接/usr/lib/在 Debian 12 上是正常的。

相关内容