“哪个”和“哪里”

“哪个”和“哪里”

在我的 Linux 机器上,输入后which java,我得到

/usr/bin/java

输入后whereis java,我得到

java:/usr/bin/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz

这两个结果的含义是什么?设置 JAVA_HOME 时,我应该使用哪一个?

答案1

which/whereis 区别

which   (1) - shows the full path of (shell) commands
whereis (1) - locate the binary, source, and manual page files for a command

我会使用which它,因为它只显示二进制文件的位置,因为我认为这就是您所需要的。但是 Java 可以安装在其他地方,并且which不会报告它,因为它只在环境变量中列出的目录中搜索可执行文件或脚本PATH

答案2

which <executable>返回在 PATH 上找到的第一个可执行文件。换句话说,如果<executable>作为命令输入,将执行什么。

答案3

JAVA_HOME应该是包含 JDK 或 JRE 的父文件夹,或者换句话说,它有Java 发行版中的/lib/bin文件夹,其中包含 Java 运行时的库/依赖项以及可执行文件。 就您而言,这似乎/usr/share/java是最合适的 - 检查其中是否有来自发行版的子文件夹。

which命令返回第一个可执行匹配,同时whereis定位其他匹配以及可执行文件。

答案4

这些都不是。

JAVA_HOME 应该指向 JDK 的根文件夹

在我的系统上:

$ echo $JAVA_HOME 
/etc/java-config-2/current-system-vm

$ ll /etc/java-config-2/current-system-vm 
lrwxrwxrwx 1 root root 24 mai   16  2009 /etc/java-config-2/current-system-vm -> /usr/lib/jvm/sun-jdk-1.6

相关内容