Javaの場所は/usr/bin/javaから来ます。

Javaの場所は/usr/bin/javaから来ます。

私の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つのコマンドの違いは何ですか?

答え1

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他のファイルと同様に、削除リンクを使用してください。

答え2

readlink -f〜する:

指定された名前を持つすべてのコンポーネントのすべてのシンボリックリンクを繰り返し追跡してパスを正規化します。最後のコンポーネントを除くすべてのコンポーネントが存在する必要があります。

which検索:

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

which見つかったものがシンボリックリンクかどうかは重要ではなく、実行可能であることだけが重要です。印刷されるパスが常にあることを確認してくださいPATH

/usr/bin/javaあなたのシステムにシンボリックリンク到着する/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin/java。この2つのコマンドを組み合わせると変えるwhichコマンドラインから出力を作成します。readlink -f

readlink -f /usr/bin/java

つまり、でwhich最初に呼び出された実行可能ファイルの場所が見つかり、シェルはそのパスを引数として挿入しました。それから道を探すjavaPATHreadlink -freadlinkシンボリックリンクしたがって、そのリンク(および見つかった他のリンク)を解析して、実際のファイル自体へのフルダイレクトパスを作成します。

ほとんどすべての目的で、これらのパスは交換可能です。javaシンボリックリンクを使用すると、シンボリックリンクは自動的に物理パスとしてチェックされ、ファイル自体に対する変更はユーザーではなくパッケージマネージャによって実行されるため、まったく表示できません。いずれかのパスでプログラムを実行するか、次をjava使用してプログラムを実行できます。

パッケージマネージャは実際のファイルを置く代わりにシンボリックリンクを使用します。/usr/binなぜなら、JREには異常な設定で互いに隣り合うことを望む完全なファイルセットがあり、シンボリックリンクを使用すると、パッケージマネージャはユーザーの一般的な配列を提示できるからです。あなた。そこには、処理する理由がまったくない他の多くのファイルがあり、/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64システムの一般的なライブラリ配列には参加しません。

答え3

この1行のコマンドは次のとおりです。

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、最後のリンクを返します。

関連情報