1. 程式人生 > 其它 >Linux系統下解決:tar (child):XXX: Cannot open: No such file or directory問題

Linux系統下解決:tar (child):XXX: Cannot open: No such file or directory問題

技術標籤:linux

本來用的Linux的Centos系統,想用Linux 的Ubuntu系統,於是就把阿里雲更換系統盤一切重新開始了。

問題描述:

在安裝jdk的時候遇到了問題

我是這樣操作的

sudo tar -xvzf jdk-8u201-linux-x64.tar.gz

結果:
在這裡插入圖片描述

報錯翻譯:

tar(child):jdk-8u201-linux-x64.tar.gz:無法開啟:沒有這樣的檔案或目錄
tar(child):錯誤無法恢復:現在退出 tar:孩子返回狀態2
tar:錯誤無法恢復:現在退出

原因是告訴我們找不到jdk檔案,但是我明明已經把jdk放在了/opt路徑下。

解決辦法:

嘗試了很多的解決辦法都無法解決,直到我意識到會不會是安裝包存放的位置也有講究。

通過查詢,果然瞭解到這個問題:

預設的linux共享庫搜尋路徑為/lib和/usr/lib目錄,若共享庫不在這兩個路徑,程序執行時不能自動連結(比如安裝程式後共享庫在/usr/local/bin),此時一般有下面4種方法解決:

1.連結時使用靜態庫,編譯指令碼或者命令中指明jdk檔案的完整路徑;
2.修改LD_LIBRARY_PATH環境變數;
3.庫檔案直接複製到可搜錯的路徑cp -f xxx/*.so xxx;
4.新增搜錯路徑,使用ldconfig。

我的解決辦法:
採用第一種新增完整路徑的辦法

sudo tar -xvzf /opt/jdk-8u201-linux-x64.tar.gz

但是個人認為使用第四種方法比較好(雖然我是用第一個方法解決的),應該這樣可以一勞永逸,步驟如下

1.根據提示獲得找不到路徑的共享庫的安裝路徑,使用locate命令,先用updatedb更新locate的索引庫“/var/lib/mlocate/mlocate.db”,然後locate xxx.so查詢,比如自動編譯安裝的庫檔案放在/usr/local/lib;
2.修改/etc/ld.so.conf,在文字結尾新增路徑即可,比如加一行/usr/local/lib。
3.使用ldconfig更新記錄系統中so檔案的快取檔案“/etc/ld.so.cache”。