当我使用 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>