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
これで問題が解決します。それでは、なぜソフトリンクは機能するのにハードリンクは機能しないのでしょうか?
ファイルにシンボリックリンクln -s
を作成すると、Windowsの世界からのリンクのように機能します。このシンボリックリンクはどのフォルダからでも起動できますが、作業ディレクトリは元のファイルが置かれているディレクトリになります。
ハードリンクについては、ハードリンクln
を作成すると、すべてのプロパティを保持する元のファイルのコピーの一種を作成します(元のファイルと同じiノードを持ちます)。したがって、作業ディレクトリはハードリンクが配置されているディレクトリになります。そのため、ハードリンクは正常に機能しますが、/usr/bin
を作業ディレクトリとして使用し、このフォルダ内の他の補足ファイルを探します。