簡體   English   中英

Java 有太多級別的符號鏈接

[英]Java has too many level symbolic links

好吧,我試圖在我的 linux 機器(Kali-Linux)上安裝 Forge。雖然我曾經並且仍然無法訪問 Forge 文件(.jar)。由於缺少一個問題命令稱為“java”。

我遇到的當前問題是sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-16.0.1/bin/java 1在使用此命令時我得到的響應是update-alternatives: error: cannot stat file '/bin/java': Too many levels of symbolic links. 當我嘗試在/bin中使用 ls 時。java 符號鏈接有一個奇怪的符號(只是想提一下,因為它看起來很奇怪) ls 命令的響應。

無論如何要解決這個問題? 在此處輸入圖像描述

“太多級別的符號鏈接”消息意味着在嘗試解析 object 的路徑時已遍歷 40 個符號鏈接。

它幾乎總是會發生,因為您有一個直接或間接指向自身的符號鏈接。 限制(和檢查)的目的是防止 kernel 進入無限循環。

那么,為什么會發生在這里? 嗯,這並不完全清楚。 但似乎較早的update-alternatives運行以錯誤符號鏈接的形式留下了一些“殘骸”。 如果“/bin/java”已經指向“/etc/alternatives/java”,那么“/etc/alternatives/java”應該是一個符號鏈接到……其他地方。

嘗試以下操作:

  1. 使用update-alternatives --remove-all java清除java命令的任何替代項。 (如果由於同樣的問題而失敗,請先嘗試第 2 步,然后重試此步驟。添加--force也可能有幫助。)

  2. 如果“/bin/java”和“/usr/bin/java”符號鏈接仍然存在,請刪除它們。

  3. 確保您實際安裝了 Java(已經)。 “/usr/lib/jvm/jdk-16.0.1/bin/java”是可執行文件的正確路徑。 運行/usr/lib/jvm/jdk-16.0.1/bin/java -version進行檢查。

  4. 運行sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-16.0.1/bin/java 1

請注意, update-alternatives實際上並沒有安裝任何東西。 為了使命令正常工作,您需要已經安裝(在這種情況下)Java JRE 或 JDK 或 Kali Java package

請注意,刪除已損壞的“替代”符號鏈接鏈不會造成任何真正的傷害。 您可以隨時清理它們並重建它們。 (如有必要,手動。)替代機制只是管理符號鏈接的一種奇特方式。

我找到了解決方案。 我把它放在這里有一個明確的解釋。 當您使用此命令sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-16.0.1/bin/java 1更新 java 時,已經有一個 java 文件的符號鏈接在這 3 個目錄 /usr/bin/java -> /etc/alternatives/java 和 -> /lib/jvm/jdk-current-version/bin/java 之間。

要首先更新備選方案,您需要刪除位於 /lib/jvm/jdk-current-version/bin/java 的符號鏈接。 這最終將刪除所有鏈接。 然后你需要從 /usr/bin/java 和 /etc/alternatives/java 中刪除 java 文件。 然后運行 update-alternatives 命令。

就我而言,我執行了以下命令

  1. rm symlink /usr/lib/jvm/java-11-openjdk-amd64/bin/java
  2. update-alternatives --remove-all java用於刪除 java 文件。
  3. rm /usr/bin/java如果 java 文件仍然存在於 /usr/bin
  4. 然后運行命令update-alternatives --install /usr/bin/java java /opt/jdk/jdk-17.0.4.1+1/bin/java 100或者在你的情況下它是sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-16.0.1/bin/java 1 .

這將從您指定的 jdk 目錄將 java 的新版本安裝到 /usr/bin 中,並自動符號鏈接所有 java 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM