如何获取仅已安装的库包列表?

我想从终端中仅获取已安装的库包列表。
有相应的命令吗?
5个回答

/sbin/ldconfig -p

-v选项将显示库的版本。
结果:
267 libs found in cache `/etc/ld.so.cache'
        libz.so.1 (libc6) => /usr/lib/libz.so.1
        libz.so (libc6) => /usr/lib/libz.so
        libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1
        libxml2.so.2 (libc6) => /usr/lib/libxml2.so.2
        libxcb.so.1 (libc6) => /usr/lib/libxcb.so.1
        libxcb-xlib.so.0 (libc6) => /usr/lib/libxcb-xlib.so.0
        libwrap.so.0 (libc6) => /lib/libwrap.so.0
        libvolume_id.so.0 (libc6) => /lib/libvolume_id.so.0
        libuuid.so.1 (libc6) => /lib/libuuid.so.1
        libutil.so.1 (libc6, hwcap: 0x8008000000008000, OS ABI: Linux 2.6.8) => /lib/tls/i686/cmov/libutil.so.1
        libutil.so.1 (libc6, OS ABI: Linux 2.6.8) => /lib/libutil.so.1
        libutil.so (libc6, OS ABI: Linux 2.6.8) => /usr/lib/libutil.so
        libusb-0.1.so.4 (libc6) => /lib/libusb-0.1.so.4
        libusb-0.1.so.4 (libc6) => /usr/lib/libusb-0.1.so.4
        libulockmgr.so.1 (libc6) => /lib/libulockmgr.so.1
        libt1x.so.5 (libc6) => /usr/lib/libt1x.so.5
        libt1.so.5 (libc6) => /usr/lib/libt1.so.5
        libtiff.so.4 (libc6) => /usr/lib/libtiff.so.4
        libticw.so.5 (libc6) => /lib/libticw.so.5

如果你想将那个列表转换成一个包裹的列表,你可以这样做:
dpkg -S $(/sbin/ldconfig -p | awk 'NR>1 { print $NF }')

而且你还可以进一步调整,以消除错误、不必要的组件和重复内容。
$ dpkg -S $(/sbin/ldconfig -p | awk 'NR>1 { print $NF }') 2>/dev/null | sed 's/\: .*$//' | sort -u
akregator
ark
binutils
calligra-libs
comerr-dev
compiz-core
dolphin
e2fslibs:amd64
freeglut3:amd64
gettext
...

这个命令有问题,没有显示任何内容。$ dpkg -S $(/sbin/ldconfig -p | awk 'NR>1 { print $NF }') 2>/dev/null | sed 's/: .*$//' | sort -u - Raymond

我不确定是否有一种确切的方法可以通过包名知道一个包是否是一个“库”(如果这本身就是一个明确的定义的话),但你可以很容易地找到以lib开头和结尾的已安装的包。
dpkg -l | awk '($1 == "ii") && ($2 ~ /^lib|lib$/) { print $2 }'

一些软件包中包含的“lib”并不是库文件。你可能需要从中排除“librarian”和“libreoffice”这两个选项。
dpkg -l | awk '($1 == "ii") && ($2 ~ /^lib|lib$/) && ($2 !~ /^(libreoffice|librarian)/) { print $2 }'

这仍然会错过大量的 python-... 库。


才能出手相助:

aptitude search '?and(?section(libs), ~i)'

它的意思是:在包含libs?section中寻找已安装的包(~i)。
你可以使用这个来查找你的仓库中的所有库。
aptitude search '?section(libs)'

这种方法显然需要适应能力。


请注意,这仅限于符合Debian政策的软件包。如果某个库不在库部分中,即使它是一个库,也不会被包含进来。 - Braiam

pkg-config --list-all
pkg-config --list-all | grep <package>

2pkg-config是一个计算机程序,它定义并支持一个统一的接口,用于查询已安装的库,以便编译依赖于这些库的软件。它不会提供完整的已安装软件包列表。 - Marc Vanhoomissen

你可以使用以下命令在Ubuntu中查找所有已安装的软件包:
apt list --installed

您可以使用以下方法搜索特定的软件包:
apt list --installed <package_name>

如果用户无法运行上述命令,请在命令前面加上sudo