我需要列出在 UNIX/Linux 中具有链接到它们的指定共享库的程序(如 ldd,反之亦然)

Posted

技术标签:

【中文标题】我需要列出在 UNIX/Linux 中具有链接到它们的指定共享库的程序(如 ldd,反之亦然)【英文标题】:I need to list the programs which have a specified shared library linked to them in UNIX/Linux (like ldd but vice versa) 【发布时间】:2014-03-20 19:38:58 【问题描述】:

unix/linux 中的 ldd 命令列出程序的所有动态链接库。

我如何确定反向问题: 链接到指定共享库的程序列表是什么?

我需要一种方法来获取使用“libz”的程序列表。

有这个命令吗?

【问题讨论】:

【参考方案1】:

我非常怀疑会有。这需要保留所有可执行文件的数据库并记住它们所依赖的内容,如果您只从特定渠道安装软件,这可能是可能的,但它肯定无法跟踪您生成的可执行文件。更不用说这样的数据库在很大程度上是无用的,因此没有吸引力。

但是,如果您需要找到此类可执行文件(例如,要知道删除共享库是否安全),您可以轻松找到大部分。关键是您拥有的大多数可执行文件都位于/usr/bin/usr/local/bin 或类似位置。因此,您只需在这些目录中的所有文件上运行ldd,并为您要查找的库运行grep

【讨论】:

谢谢你!这真的很有帮助。我使用: ldd /bin/* |grep -B 20 ncursesw 并得到了我想要的。使用 ncursesw 的本机程序列表。这几乎给了我一个迹象,例如 ncursesw 在 ububtu 中作为本机库分发。 我发现 /bin/nano 和 /bin/rnano 在 ubuntu 12 中使用 ncursesw。但现在我仍然有一个问题:nano 是与 ubuntu 12 一起分发的本机程序吗?有没有办法我知道? (Linux发行版默认发行的程序有哪些) @YairKarmy,我不会选择“本地”这个词,因为本地通常显示出更深层次的绑定。不过,如果您想知道某个 Linux 发行版附带了哪些软件,那么只需安装一个并在安装其他软件之前查看该软件!在 Ubuntu 中,您可以使用软件中心查看已安装的软件包。在其他发行版中,您可以使用它们各自的包管理器。 谢谢,但我需要编写一个在各种操作系统和机器上使用 cursesw/ncursesw 的应用程序。最初我试图确定默认情况下哪个平台具有curses/ncurses/cursesw/ncursesw/xcurses/xcursesw lib中的哪一个。我想如果我找到一个使用这些库之一的程序并且该程序是随操作系统版本一起安装的默认情况下,我知道这个库也是默认安装的。获取每台机器并从头开始安装似乎需要做很多工作。 应该有某种文档,哪些程序是随发行版带来的。或者我应该看看在操作系统发布的同一日期和时间安装了哪些程序?

以上是关于我需要列出在 UNIX/Linux 中具有链接到它们的指定共享库的程序(如 ldd,反之亦然)的主要内容,如果未能解决你的问题,请参考以下文章

在 unix (linux/osx) 中创建的符号链接是不是仍然可以在 Windows 中工作?

Unix/Linux 符号链接是不是支持回退?

如果需要的页面存在,如何进行链接测试,如果存在则转到它?

UNIX/Linux系统取证之信息采集案例

在Unix/Linux上创建符号链接

ipcs命令