/ usr / bin / javaからのJavaの場所


20

Linuxシステム内でjavaの場所を見つけようとしています。

[980@b449 ~]$ which java
/usr/bin/java


[980@b449 ~]$ readlink -f $(which java)
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java

2つのコマンドの違いは何ですか?

回答:


21

どの2つのコマンドですか? /usr/bin/javaへのソフト(シンボリック)リンク/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java
です同じファイルであるため、違いはありません。
次のように入力した場合

ls -l /usr/bin/java

次のような結果が得られる場合があります。

lrwxrwxrwx. 1 root root 22 Aug  5 17:01 /usr/bin/java -> /etc/alternatives/java

これは、システムに複数のJavaバージョンがあり、デフォルトを変更するために代替手段を使用できることを意味します。それ以外の場合は、単にリンクを追加および削除して、デフォルトのリンクを手動で変更できます。

シンボリックリンクを作成するには、次のコマンドを使用します

ln -s /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java /usr/bin/java

または一般的な形で

ln -s <original file> <link to file>

rm他のファイルを削除する場合と同様に、リンクを削除するために使用します。


5

readlink -f意志

指定された名前のすべてのコンポーネントのすべてのシンボリックリンクを再帰的にたどることにより、パスを正規化します。最後のコンポーネントを除くすべてが存在する必要があります

which検索します

bash(1)と同じアルゴリズムを使用して、環境変数PATHにリストされているディレクトリ内の実行可能ファイルまたはスクリプト用

which見つけたものがシンボリックリンクであるかどうかは気にしません:実行可能であるというだけです。それは、それが印刷するパスがのディレクトリの一つの中に常にあることを保証しPATHます。

お使いのシステムでは、/usr/bin/javaあるシンボリックリンク/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java。このように2つのコマンドを組み合わせると、の出力をコマンドラインに置き換えて作成します。whichreadlink -f

readlink -f /usr/bin/java

つまり、which最初に呼び出される実行可能ファイルがどこ発見したjava、あなたの中にありPATH、そしてシェルは引数としてそのパスを挿入していますreadlink -freadlink次に、パスを検索し、それがシンボリックリンクであることがわかります。そのため、そのリンク(および見つかった他のリンク)を解決して、実際のファイル自体への完全な直接パスを生成します。

ほとんどすべての目的で、これらのパスは交換可能です-シンボリックリンクjavaは使用時に実際のパスに自動的に解決され、ファイル自体の変更はあなたではなくパッケージマネージャーによって行われるため、それを見るために。どちらのパスからでも、またはjustを使用してプログラムをjava実行しても、最終的に実行される実際の実行可能ファイルと同じであるため、結果はまったく同じになります。

/usr/binJREには異常な構成で隣り合うファイルのセットがすべてあるため、パッケージマネージャーは実際のファイルを置くのではなくシンボリックリンクを使用します。ユーザーとしてあなた。内部には他/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64に対処する理由がなく、システムの通常のライブラリ配置に参加しない他の多くのファイルがあります。


0

この単一行コマンド:

which java | xargs readlink -f

あなたのために仕事をします。

  • which java すなわちあなたを与える: /usr/bin/java
  • readlink -fすべてのシンボリックリンクを通過/usr/bin/java-> /etc/alternatives/java-> /usr/lib/jvm/java-8-oracle/jre/bin/java最後のリンクを返します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.