AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 481
Accepted
David Z
David Z
Asked: 2010-07-31 00:10:55 +0800 CST2010-07-31 00:10:55 +0800 CST 2010-07-31 00:10:55 +0800 CST

如何找到提供文件的包?

  • 772

很简单的问题:是否有一些 shell 命令(或 GUI 方法)我可以使用它,给定系统上文件的路径,告诉我将它放在那里的包是什么?假设该文件确实来自一个包,即。

额外的问题:如果它是一个未安装在我的系统上的文件怎么办?例如,是否有一个网站可以让我查找文件并查看哪些软件包(如果有)提供它?

package-management
  • 10 10 个回答
  • 512755 Views

10 个回答

  • Voted
  1. Best Answer
    Ressu
    2010-07-31T00:42:03+08:002010-07-31T00:42:03+08:00

    您可以使用dpkg命令找出哪个已安装的包拥有一个文件:

    来自man dpkg:

    -S, --search 文件名-搜索-模式...
                      从已安装的包中搜索文件名。
    

    例子:

    $ dpkg -S /bin/ls
    coreutils: /bin/ls
    

    您可以使用完整路径或仅使用文件名进行搜索。

    如果您希望搜索计算机上尚未安装的文件,您可以使用Ubuntu Packages Search,或者apt-file按照其他答案中的描述。

    • 626
  2. jbowtie
    2010-08-11T18:43:23+08:002010-08-11T18:43:23+08:00

    该apt-file命令可以从命令行为您执行此操作。从源代码构建软件包时,我经常使用它。对于系统上已经安装的软件包提供的文件,apt-cache是另一种选择。

    要安装apt-file,请执行以下操作:

    sudo apt-get install apt-file
    

    然后,您需要更新它的数据库:

    sudo apt-file update
    

    最后,搜索文件:

    $ apt-file find kwallet.h
    kdelibs5-dev: /usr/include/kwallet.h
    libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h
    

    然而,更友好的方法是使用Ubuntu Packages Search网站。他们可以选择“搜索包的内容”来查找特定的文件名。

    • 372
  3. ptman
    2010-07-31T00:49:52+08:002010-07-31T00:49:52+08:00

    还有 apt-file 用于在未安装的包中查找文件。例如:

    apt-file list packagename
    
    • 52
  4. moberley
    2010-08-11T18:42:10+08:002010-08-11T18:42:10+08:00

    您可以在Ubuntu 软件包网站上搜索各种 Ubuntu 版本中包含的软件包的内容。在“搜索包的内容”标题下查看。

    例如,以下是焦点 (20.04) 中 libnss3.so 的搜索结果:

    http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=focal&arch=any

    • 20
  5. A.B.
    2015-11-30T07:57:08+08:002015-11-30T07:57:08+08:00

    你的意思是,哪个包而不是哪个应用程序。该应用程序是您的包管理器,例如Software Center.

    使用dpkg:

    dpkg -S /usr/lib/tracker/tracker-store
    dpkg -S tracker-extract
    dpkg -S tracker-miner-fs
    

    例子

    % dpkg -S /usr/lib/tracker/tracker-store
    tracker: /usr/lib/tracker/tracker-store
    

    使用apt-file:

    apt-file search /usr/lib/tracker/tracker-store
    

    或者也可能:

    apt-file search --regex /tracker-extract$
    apt-file search --regex /tracker-miner-fs$
    

    例子

    % apt-file search /usr/lib/tracker/tracker-store
    tracker: /usr/lib/tracker/tracker-store
    

    或在线在这里,在该部分Search the contents of packages。

    在此处输入图像描述

    例子

    在此处输入图像描述

    • 17
  6. Bruno Bronosky
    2018-07-18T21:45:47+08:002018-07-18T21:45:47+08:00

    这是对Alexx Roche 出色答案的扩展。我试图对该答案进行编辑,但被拒绝了(尽管不是被 Alexx 拒绝)


    我试图追踪which我系统上安装的内容。经过一些工作,我创建了/usr/local/bin/apt-whatprovides

    #!/bin/sh
    #apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
    #rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
    
    BINARY="$(realpath $(which $@) 2>/dev/null)"
    [ -z "$BINARY" ] && BINARY="$@"
    echo Searching for $BINARY
    PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
    echo "${PACKAGE}"
    

    虽然对于大多数已安装的东西,您可以使用:

    apt-file search $(realpath $(which THING)) | grep 'THING$'
    

    对于未安装的 THING,您可以使用:

    apt-file search THING | grep '/THING$'
    

    该apt-whatprovides脚本适用于系统上和不在系统上的文件。例如,我的系统缺少dig但有ping这样的结果:

    pi@raspberrypi:~ $ apt-whatprovides ping
    Searching for /bin/ping
    inetutils-ping: /bin/ping
    iputils-ping: /bin/ping
    
    pi@raspberrypi:~ $ apt-whatprovides dig
    Searching for dig
    dnsutils: /usr/bin/dig
    epic4: /usr/share/epic4/script/dig
    epic4-help: /usr/share/epic4/help/8_Scripts/dig
    knot-dnsutils: /usr/bin/dig
    

    请注意,这Searching for是ping(已安装)的完整路径,而只是dig未安装的二进制名称。这帮助我发现我需要安装dnsutils而不需要去搜索https://packages.ubuntu.com/#search_contents

    • 7
  7. Alexx Roche
    2018-03-18T07:25:54+08:002018-03-18T07:25:54+08:00

    我试图追踪which我系统上安装的内容。经过一些工作,我创建了 apt-whatprovides

    #!/bin/sh
    #apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
    #rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
    
    BINARY=$(realpath $(which $@))
    PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
    echo ${PACKAGE%:*}
    

    虽然对于大多数事情,你可以只使用

    apt-file search $(realpath $(which THING))|grep 'THING$'
    
    • 4
  8. Ahmad Ismail
    2021-09-23T09:24:16+08:002021-09-23T09:24:16+08:00

    你可以用apt它来做。

    $ apt contains /bin/ls
    coreutils: /bin/ls
    

    输出与以下内容相同:

    $ dpkg -S /bin/ls
    coreutils: /bin/ls
    
    • 3
  9. Amandasaurus
    2010-08-12T11:31:41+08:002010-08-12T11:31:41+08:00

    您可能必须这样做的一个原因是,如果您正在编译已经有 ubuntu 包的软件,您可以运行apt-get build-dep $PACKAGENAME. 这将安装您需要编译的所有软件包$PACKAGENAME。

    • 2
  10. Qinsi
    2020-10-14T19:29:36+08:002020-10-14T19:29:36+08:00

    为什么:

    不同的发行版有自己的方式,命令太多记不住o(╥﹏╥)o

    如何:

    通用解决方案:pacapt -Qo file_path

    结果:

    在 ubuntu 上:

    $ pacapt -Qo /usr/bin/iostat
    sysstat: /usr/bin/iostat
    

    在centos上:

    $ pacapt -Qo /usr/bin/iostat
    sysstat-10.1.5-19.el7.x86_64
    

    甚至可以找到路径本身:

    $ pacapt -Qo iostat
    sysstat: /usr/share/man/man1/iostat.1.gz
    sysstat: /usr/bin/cifsiostat
    sysstat: /usr/bin/iostat
    sysstat: /usr/share/man/man1/cifsiostat.1.gz
    

    什么是pacapt:

    pacapt 是许多包管理器的包装器

    安装:

    只需下载可移植脚本:

    wget -O $HOME/bin/pacapt https://github.com/icy/pacapt/raw/ng/pacapt

    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行判断机器是否需要重新启动?

  • 有没有办法重置所有包/源并从头开始?

  • 如何回滚到 PHP 5.2?

  • 包管理器之间有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve