首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到我刚刚安装的openjdk-11?

如何找到我刚刚安装的openjdk-11?
EN

Ask Ubuntu用户
提问于 2021-05-07 20:39:20
回答 3查看 11.5K关注 0票数 5

我目前正试图在我的Ubuntu20.04机器上安装ghidra。在安装过程中,我得到以下信息:

代码语言:javascript
复制
******************************************************************
JDK 11+ (64-bit) could not be found and must be manually chosen!
******************************************************************
Enter path to JDK home directory (ENTER for dialog): 

所以,我觉得很酷,然后跑:

代码语言:javascript
复制
sudo apt-get install openjdk-11-jdk

如果我现在运行whereis java

代码语言:javascript
复制
/usr/share/java$ whereis java
java: /usr/bin/java /usr/share/java /usr/share/man/man1/java.1.gz

所以我光盘到第一个目录,ans看:

代码语言:javascript
复制
/usr/share/java$ ls
commons-logging-1.2.jar           java-atk-wrapper.jar  pdfbox-1.8.16.jar
commons-logging-adapters-1.2.jar  java_defaults.mk      pdfbox.jar
commons-logging-adapters.jar      java_uno.jar          ridl-6.4.7.jar
commons-logging-api-1.2.jar       juh-6.4.7.jar         ridl.jar
commons-logging-api.jar           juh.jar               unoloader-6.4.7.jar
commons-logging.jar               jurt-6.4.7.jar        unoloader.jar
fontbox-1.8.16.jar                jurt.jar
fontbox.jar                       libintl.jar

这里有一堆jar文件?通常jdk有一个bin文件夹,等等?

我还尝试将/usr/share/java提供给ghidra安装,但是它抱怨说这不是一个有效的jdk主目录,因为它缺少一个bin文件夹。

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2021-05-08 13:33:51

由于您以前曾使用whereis检查您的二进制文件是否已安装,现在您可以检查它是否可以正确执行:

  • 其位置是否属于您的路径变量?尝试命令which java,它应该返回类似于/usr/bin/java的内容
  • 那么它是一个有效的二进制吗?尝试使用命令java -version显示其版本,它应该显示如下所示
代码语言:javascript
复制
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
  • 还请记住,一些java应用程序可能需要设置JAVA_HOME环境变量。然后,可以将其设置为java安装的home dir,例如JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

为了帮助您检索java主路径,您可以使用which java | xargs realpath,它提供了类似于/usr/lib/jvm/java-11-openjdk-amd64/bin/java的路径(或者您可以在which提供的路径上多次使用ls -l ),您需要从该路径中删除最新的部分/bin/java

PS :如果您需要系统上的几个java运行时,那么路径解析和JAVA_HOME必须匹配相同的版本。在方便的情况下,您可以解压缩/my/定制/install/jdk15 15/等任何文件夹中的任何特定版本,并覆盖系统路径:

代码语言:javascript
复制
  export JAVA_HOME=/my/custom/install/jdk15
  export PATH=$JAVA_HOME/bin:$PATH

在我的系统中,我使用如下命令在我的.bashrc中设置了.bashrc:

代码语言:javascript
复制
export JAVA_HOME=`dirname $(dirname $(readlink -f $(which java)))`
export PATH=$JAVA_HOME/bin:$PATH
票数 2
EN

Ask Ubuntu用户

发布于 2021-07-07 17:55:43

首先,确保通过运行java --version正确地完成了安装,您应该看到如下所示:

然后,为了找到jdk文件夹,运行下面的命令:

代码语言:javascript
复制
readlink -f $(which java) 

它返回路径,在我的例子中,它返回:

/usr/lib/jvm/java-11-openjdk-amd64 64/bin/java

您可以运行ls /usr/lib/jvm/java-11-openjdk-amd64,它将显示jdk文件夹内容。它看起来就像:

详细信息

为什么

第一个whereis!就像which不解析符号链接一样!

which java =>给出命令路径=>将符号链接返回给符号链接

debian中的示例:

/usr/bin/java =符号链接to=> /etc/alternatives/java =符号链接to=> /usr/lib/jvm/java-10-openjdk-amd64/bin/java

/usr/lib/jvm/java-10-openjdk-amd64/bin/java是实际的java二进制文件!而/usr/lib/jvm/java-10-openjdk-amd64是java的主页。

如果你想用的话!一个需要解决的符号链接!这里是递归的!

Symlink => Symlink =>实际文件夹或文件

我们可以通过读链接来做到这一点。

Readlink

https://man7.org/linux/man-pages/man1/readlink.1.html

https://www.geeksforgeeks.org/readlink-command-in-linux-with-examples/

readlink -打印解析的符号链接或规范文件名

总之!如果你有一个符号链接!

readlink symbolicLink =>会给出它决心要做的

给定Symlink1 => Symlink2 => path

readllink Symlink1 =return=> Symlink2

readlink Symlink2 =return=>路径

在这里,让我们看看java:

一条命令

是啊,太丑了!

还有更好的!使用-f标志

从帮助医生那里

代码语言:javascript
复制
 -f, --canonicalize            canonicalize by following every symlink in
                                every component of the given name recursively;
                                all but the last component must exist

所以:

代码语言:javascript
复制
readlink -f $(which java)

重新解析符号链接!

你也可以通过这里使用它!

您可以看到并找到您的主目录!

在这个上下文中使用which!总比这里好!

whichwhereis之间的区别!让我们使用whatis

代码语言:javascript
复制
$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command
票数 4
EN

Ask Ubuntu用户

发布于 2021-05-08 14:00:11

whereisfind命令的另一个替代方法是locate命令。它非常快:

代码语言:javascript
复制
$ locate openjdk | head -n10
/home/rick/Android/Sdk/sources/android-28/org/openjdk
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util/stream
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util/stream/CollectorOps.java
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util/stream/DoubleStreamTestDataProvider.java
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util/stream/DoubleStreamTestScenario.java
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util/stream/FlagDeclaringOp.java
/home/rick/Android/Sdk/sources/android-28/org/openjdk/testlib/java/util/stream/IntStreamTestDataProvider.java

这是第一个包含openjdk的10个文件处理程序。您可以使用wc (word count)命令使用-l (行计数)参数快速定位和计数文件数:

代码语言:javascript
复制
$ time locate java | wc -l
57555

real    0m0.945s
user    0m0.927s
sys     0m0.021s

$ time locate openjdk | wc -l
72

real    0m1.053s
user    0m1.033s
sys     0m0.021s

所以文件名中有57,555个带有java的文件,在文件名中有72个带有openjdk的文件。在这两种情况下,都需要大约1秒的时间才能找到它们。

要真正了解locate命令的速度,请考虑搜索哪个文件名包含字母e,这是字母表中最常见的字母:

代码语言:javascript
复制
$ time locate e | wc -l
2283738

real    0m0.580s
user    0m0.592s
sys     0m0.177s

有2,228,738个文件的字母e出现在他们的文件名至少一次。这是为三个Ubuntu安装,一个Windows安装和一个共享Ubuntu + Windows分区。只需1/2每秒就能找到他们!

您可能必须首先安装locate命令:

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1336818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档