从 apt 包安装的文件列表

从 apt 包安装的文件列表

当我使用 apt-get 安装软件包时,如何获取已安装或将要安装的文件列表?相反,我能否找到导致特定文件安装的软件包?

答案1

笔记:在以下命令中,以“root#”开头的命令表示需要以root身份运行。

要查找包中安装了哪些文件,请使用dpkg -L

$ dpkg -L $package

apt-file可以在安装包之前告诉您包将安装哪些文件:

root# apt-get install apt-file
root# apt-file update
$ apt-file list $package

或者,如果您已经在本地拥有该包作为.deb文件,则可以dpkg在其上运行:

$ dpkg --contents $package.deb

要查找哪个包提供了系统中已有的文件,请使用:

$ dpkg -S /path/to/file

要查找哪个软件包提供了当前系统上没有的文件,请apt-file再次使用:

$ apt-file search /path/to/file

答案2

这里有一个函数可以帮你完成这个任务,而不需要将包下载到磁盘。这个解决方案也不需要任何第三方程序(如 apt-file)或最低限度的 debian/ubuntu 安装之外的任何东西。

# Function that gets the package layout of a remote package from 
# apt/apt-get/aptitude/synaptic/etc...
apt_list () 
{
    # Build array of packages 
    local packages=("$@");
    # Iterate package indexes up to the length of the array minus 1
    for pkg in $(seq 0 1 $((${#packages[@]}-1)));
    do
        # Pretty little separator in case you are examining the 
        # contents of multiple packages.
        echo -e "\n#### ${packages[$pkg]} ####\n";
        # Pipe steps (in order)
        # Print the url to the .deb package remote location from sources.list
        # delimit by single quotes and select only the url
        # pipe the url to xargs after a curl silent follow redirects 
        # insecure (no cert checking some may wish to take the -k off 
        # the curl command.
        # use dpkg -c to check the contents of the downloaded package in stdin
        # Use perl to remove dots after modification timestamp on sysroot
        apt-get download -o Dir::Cache::archives="./" --print-uris ${packages[$pkg]}\
        | awk -F\' '{print $2}' | xargs -I '{}' curl -skL '{}' |\
         dpkg-deb -c /dev/stdin | perl -ne 's,(:\d\d )[.]/,$1/,g;print';
        # Line break so the last package name doesn't wind up on same line as PS1
        echo;
    # end loop
    done
}

然后使用apt_list <package name1> [package name 2]

例如 apt_list curl wget

关于你的第二个问题,dpkg -S /path/to/isntalled/file如果你尝试使用 查看已下载/本地 .deb 文件的内容,则可以使用 或dpkg --contents </path/to/deb/file>。至于反向检查软件包中的文件,如果你不知道拥有该文件的软件包的名称,可以使用第三方解决方案apt 文件(一种软件包,它索引了可用存储库中的软件包内容,并允许您在所有可用软件包中搜索特定文件)可用。这就像yum provides在基于 rhel 的系统(如 CentOS)上将是最好的选择。

​​​​​​

答案3

dpkg -S /path/to/file/in/question

就我而言,dpkg 是 apt-get 所依赖的低级工具。

答案4

对于使用 Linux Mint 的用户来说,还有另一个选择:

apt content <packageName>

相关内容