首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ldconfig要从libext2fs.so.2创建一个指向libselinux.so.1的符号链接?

为什么ldconfig要从libext2fs.so.2创建一个指向libselinux.so.1的符号链接?
EN

Unix & Linux用户
提问于 2019-06-05 15:57:09
回答 1查看 1.4K关注 0票数 0

使用strace,我发现了ldconfig (glibc)的行为,我无法理解

代码语言:javascript
复制
lstat("/usr/lib/libext2fs.so.2", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
unlink("/usr/lib/libext2fs.so.2")       = 0
symlink("libselinux.so.1", "/usr/lib/libext2fs.so.2") = 0

是否需要ext2fs (libext2fs.so.2)的共享对象库作为到libselinux.so.1的符号链接。

ldconfig如何知道该做什么?在我看来,这种静态二进制/usr/bin/ldconfig会有这样的行为是不符合逻辑的,对吧。然而,它的配置文件/etc/ld.so.conf并不能帮我解开这个谜团。

是什么让我的发行版工具(Arch )更加令人困惑/怀疑,我找不到该文件所属的任何包。

代码语言:javascript
复制
$ pkgfile /usr/lib/libselinux.so.1

不显示任何包,而$ pkgfile /usr/lib/libext2fs.so

输出core/e2fsprogs

所以我的问题是:

  1. 这个libselinux.so.1在这里扮演什么角色?
  2. ldconfig是如何决定创建这个符号链接的(顺便说一下。打破e2fsck)
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-06-05 21:40:48

您的库可能在某个时候被错误地从/usr/lib/libselinux.1重命名为/usr/lib/libext2fs.so.2。这并不妨碍ldconfig从库的内容(而不是库的文件名)中找到预期的名称,从而链接“正确”名称。可以通过将任何库复制到某个目录并要求ldconfig更新(仅)此目录来验证这一点。

这里是Debian 9上的等价物:

代码语言:javascript
复制
$ mkdir /tmp/foo
$ cp -aL /lib/x86_64-linux-gnu/libselinux.so.1 /tmp/foo/libmytest.so.2
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24  2017 /tmp/foo/libmytest.so.2
$ /sbin/ldconfig -v -n /tmp/foo
/tmp/foo:
    libselinux.so.1 -> libmytest.so.2 (changed)
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24  2017 /tmp/foo/libmytest.so.2
lrwxrwxrwx 1 test test     14 Jun  5 23:33 /tmp/foo/libselinux.so.1 -> libmytest.so.2

顺便说一句,libselinux是处理SELinux软件的通用库。即使是lscpmvps命令也通常与之链接(用于各自的-Z选项)。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/523089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档