web-dev-qa-db-ja.com

Javaのソフトリンクとハードリンク-ソフトリンクのみが機能する理由

UbuntuにOracle Javaをインストールしました16.04。ハードリンクを作成してみました。

ln /usr/local/jdk-9.0.1/bin/Java /usr/bin/Java

Javaを実行すると、次のエラーが表示されました。

Java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

ハードリンクを削除し、代わりにソフトリンクを作成しました。

ln -s /usr/local/jdk-9.0.1/bin/Java /usr/bin/Java

これで問題が解決します。それでは、なぜソフトリンクは機能するのにハードリンクは機能しないのでしょうか?

3
vico

ファイルにシンボリックリンクln -sを作成すると、Windowsの世界からのリンクのように機能します。このシンボリックリンクはどのフォルダからでも起動できますが、作業ディレクトリは元のファイルが置かれているディレクトリになります。

ハードリンクについては、ハードリンクlnを作成すると、すべてのプロパティを保持する元のファイルのコピーの一種を作成します(元のファイルと同じiノードを持ちます)。したがって、作業ディレクトリはハードリンクが配置されているディレクトリになります。そのため、ハードリンクは正常に機能しますが、/usr/binを作業ディレクトリとして使用し、このフォルダ内の他の補足ファイルを探します。

3
M. Dm.