我想找到 Ubuntu 14.04(服务器)上安装了哪个软件包可以访问该javac
命令。RHEL 系列发行版有yum provides
这个功能,但 Debian 系列似乎没有类似功能。
这AskUbuntu 问题建议使用dpkg -S
和apt-file
,但是这些都不起作用:
$ sudo dpkg -S `which javac`
dpkg-query: no path found matching pattern /usr/bin/javac
apt-file search
乍一看似乎有效:
$ apt-file search javac
javacc: /usr/bin/javacc
但这apt-cache policy
表明这个包甚至没有安装,所以它显然不是提供的包javac
。
$ apt-cache policy javacc
javacc:
Installed: (none)
Candidate: 5.0-5
我如何才能找出哪个包提供了该javac
命令?
答案1
在某些情况下,需要进行额外的侦查。特别是,
$ ls -l $(which javac)
lrwxrwxrwx 1 root root 23 May 24 2017 /usr/bin/javac -> /etc/alternatives/javac
显示这/usr/bin/javac
是一个符号链接 - 因此我们可以使用readlink
来深入研究:
$ dpkg -S "$(readlink -f $(which javac))"
openjdk-8-jdk-headless:amd64: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
或(看作是一个update-alternatives
链接)
$ update-alternatives --query javac
Name: javac
Link: /usr/bin/javac
Slaves:
javac.1.gz /usr/share/man/man1/javac.1.gz
Status: auto
Best: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
Value: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
Alternative: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
Priority: 1081
Slaves:
javac.1.gz /usr/lib/jvm/java-8-openjdk-amd64/man/man1/javac.1.gz
从中我们可以选出当前值:
$ dpkg -S /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
openjdk-8-jdk-headless:amd64: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
答案2
看起来像是/usr/bin/javac
由 管理的符号链接update-alternatives
。如果你 ,你看到了什么readlink -f /usr/bin/javac
?如果它指向其他地方,也许可以检查那位置与dpkg -S
? 或者update-alternatives
它本身可以告诉您对于特定链接有哪些选项,例如:
$ update-alternatives --config javac
There is only one alternative in link group javac (providing /usr/bin/javac): /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
Nothing to configure.
那么:
$ dpkg -S /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
openjdk-8-jdk-headless:amd64: /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
该包中的所有文件:https://packages.ubuntu.com/xenial/openjdk-8-jdk-headless/filelist