PATH 保存可執行文件程序路徑,我們命令行中每一句能運行的命令都是系統先通過PATH來找到命令執行文件所在的位置,再運行這個命令。
實驗:執行echo $PATH 能看到當前環境PATH都是配置了哪些路徑。
如果我需要在任何目錄下都能執行某個bin文件夾下的可執行文件,那只需要將這個bin路徑添加到PATH上即可。
設置:
方法一:export PATH=$PATH:xxx,但是登出后就失效。
方法二:修改~/.bashrc或系統級別的/etc/profile
1. 在其中添加例如export PATH=xxx:$PATH
2. source .bashrc (Source命令也稱為“點命令”,也就是一個點符號(.),source命令通常用於重新執行剛修改的初始化文件,使之立即生效,而不必注銷並重新登錄 。
即可。
LIBRARY_PATH是在程序編譯期間查找動態鏈接庫時指定的查找共享庫的路徑。
LD_LIBRARY_PATH環境變量主要是用於指定動態鏈接器(ld)查找ELF可執行文件運行時所依賴的動態庫(so)的路徑,其內容是以冒號分隔的路徑列表。
ld鏈接器將優先在該變量設置的路徑中查找,若未找到則在標准庫路徑/lib和/usr/lib中繼續搜索。
臨時設置LD_LIBRARY_PATH環境變量的最佳方式是:
在執行你的程序前,先在bash中通過命令行來設置,這樣你的特殊設置對系統的其它程序的運行而言是隔離的,不會影響其他程序對依賴庫的查找路徑,因為在bash中設置的環境變量只對本次會話有效。在你下次通過SSH工具連接到系統時,新會話的系統環境變量參數不受上次會話的設置影響。
如:
$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program
但是,你如果希望對LD_LIBRARY_PATH環境變量的設置永久生效,上面的方式就不適合了。
如果你的所有程序都鏈接到某個自定義的查找路徑指定的動態庫文件,若某次執行程序前你忘記了設置LD_LIBRARY_PATH環境變量,這樣你的程序會鏈接到其他動態庫,可能會導致詭異的結果或意外崩潰,而且在可能存在潛在的安全問題。
如果不考慮上述的各種情況,你可以通過修改home目錄下的 .bashrc 文件來設置LD_LIBRARY_PATH環境變量,這樣每次當你啟用一個會話連接到系統時,系統會自動執行該文件指定的命令,這樣免去了每次手動設置相關參數的麻煩。
export LIBRARY_PATH="/list/of/library/paths:/another/path"
或者為所有用戶修改這個值,修改/etc/profile文件即可。
一般情況下,只有當程序所需的依賴庫不是系統標准安裝的庫或對庫的版本特定要求時,可以指定 LD_LIBRARY_PATH環境變量實現。
通過下面的命令可以查看可執行文件或庫文件本身對所依賴的庫的情況:
$ ldd ~/myprogram
輸出類似:
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => not found
檢查結果表明, 鏈接器無法找到依賴的庫libmylib.so.1
我們假設存在這個庫 在~/yprogdir/lib/libmylib.so.1, 現在我們可能通過設置LD_LIBRARY_PATH環境變量以便鏈接器找到。
$ export LD_LIBRARY_PATH="~/myprogdir/lib/:$LD_LIBRARY_PATH"
$ ldd ~/myprogram
輸出如下:
librt.so.1 => /lib/librt.so.1 (0x00002b4eca08e000)
libc.so.6 => /lib/libc.so.6 (0x00002b4eca49f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b4eca7df000)
/lib64/ld-linux-x86-64.so.2 (0x00002b4ec9e72000)
libmylib.so.1 => ~/myprogdir/lib/libmylib.so.1 (0x00002b4eca9fa000)
這樣動態鏈接器就可能找到所有需要的庫文件 。
LIBRARY_PATH和LD_LIBRARY_PATH共同點都是庫的路徑,而PATH是可執行文件的路徑。
PATH是可執行文件路徑,是三個中我們最常接觸到的,因為我們命令行中的每句能運行的命令,如ls、top、ps等,都是系統通過PATH找到了這個命令執行文件的所在位置,再run這個命令(可執行文件)。
作者:煎魚不可能有BUG
鏈接:https://www.imooc.com/article/43747
來源:慕課網
本文原創發布於慕課網 ,轉載請注明出處,謝謝合作