Linux下設置和查看環境變量
Linux的變量種類
按變量的生存週期來劃分,Linux變量可分爲兩類:
- 永久的:需要修改配置文件,變量永久生效。
- 臨時的:使用export命令聲明即可,變量在關閉shell時失效。
設置環境變量
- 在/etc/profile文件中添加變量【對所有用戶生效(永久的)】
用vi在文件/etc/profile文件中增加變量,該變量將會對Linux下所有用戶有效,並且是“永久的”。
示例:
編輯/etc/profile文件,添加CLASSPATH變量vi /etc/profile export CLASSPATH=$JAVA_HOME/jre/lib
注:修改文件後要想馬上生效還要運行source /etc/profile不然只能在下次重進此用戶時生效。
- 在用戶目錄下的.bash_profile文件中增加變量【對單一用戶生效(永久的)】
用vi在用戶目錄下的.bash_profile文件中增加變量,該變量僅會對當前用戶有效,並且是“永久的”。
示例:
編輯xueying用戶目錄(/home/xueying)下的.bash_profile
vi /home/xueying/.bash_profile 添加如下內容:vi /home/xueying/.bash_profile export CLASSPATH=$JAVA_HOME/jre/lib
注:修改文件後要想馬上生效還要運行source /home/xueying/.bash_profile不然只能在下次重進此用戶時生效。
- 直接運行export命令定義變量【只對當前shell(BASH)有效(臨時的)】
在shell的命令行下直接使用[export 變量名=變量值] 定義變量。該變量只在當前的shell(BASH)或其子shell(BASH)下是有效的,shell關閉了,變量也就失效了,再打開新shell時就沒有這個變量,需要使用的話還需要重新定義。
查看環境變量
- 使用echo命令查看單個環境變量。例如:
echo $PATH - 使用env查看所有環境變量。例如:
env - 使用set查看所有本地定義的環境變量。
使用unset刪除指定的環境變量
set可以設置某個環境變量的值。清除環境變量的值用unset命令。如果未指定值,則該變量值將被設爲NULL。
示例如下:
export TEST="Test..." #增加一個環境變量TEST env | grep TEST #此命令有輸入,證明環境變量TEST已經存在了 TEST=Test... unset TEST #刪除環境變量TEST env | grep TEST #此命令沒有輸出,證明環境變量TEST已經刪除
常用的環境變量
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當前用戶主目錄
HISTSIZE 歷史記錄數
LOGNAME 當前用戶的登錄名
HOSTNAME 指主機的名稱
SHELL 當前用戶Shell類型
LANGUGE 語言相關的環境變量,多語言可以修改此環境變量
MAIL 當前用戶的郵件存放目錄
PS1 基本提示符,對於root用戶是#,對於普通用戶是$
擴展閱讀一
set,env和export這三個命令都可以用來顯示shell變量,其區別?
set 用來顯示本地變量
env 用來顯示環境變量
export 用來顯示和設置環境變量
set 顯示當前shell的變量,包括當前用戶的變量
env 顯示當前用戶的變量
export 顯示當前導出成用戶變量的shell變量
每個shell有自己特有的變量(set)顯示的變量,這個和用戶變量是不同的,當前用戶變量和你用什麼shell無關,不管你用什麼shell都在,比如HOME,SHELL等這些變量;但shell自己的變量對於不同的shell是不同的,比如BASH_ARGC,BASH等,這些變量只有set纔會顯示,是bash特有的;export不加參數的時候,顯示哪些變量被導出成了用戶變量,因爲一個shell自己的變量可以通過export “導出”變成一個用戶變量。
[root@linux ~]# aaa=bbb
[root@linux ~]# echo $aaa
bbb
[root@linux ~]# set | grep aaa
aaa=bbb
[root@linux ~]# env | grep aaa
[root@linux ~]# export aaa
[root@linux ~]# env | grep aaa
aaa=bbb
擴展閱讀二
set、env、export — Linux中的環境變量命令
Linux是一個多用戶的操作系統。每個用戶登錄系統後,都會有一個專用的運行環境。通常每個用戶默認的環境都是相同的,這個默認環境實際上就是一組環境變量的定義。用戶可以對自己的運行環境進行定製,其方法就是修改相應的系統環境變量。
- 什麼是環境變量
環境變量是一個具有特定名字的對象,它包含了一個或者多個應用程序將使用到的信息。通過使用環境變量,你可以很容易的修改一個牽涉到一個或多個應用程序的配置信息。 - 常見的環境變量
- PATH 指定命令的搜索路徑。
- LIBRARY_PATH 用於在程序編譯期間查找動態鏈接庫時指定查找共享庫的路徑。
指定gcc編譯需要鏈接動態鏈接庫的目錄。
設置libtest1和libtest2目錄# export LIBRARY_PATH=libtest1:libtest2:$LIBRARY_PATH # gcc *.c -L./libtest1 -L./libtest2 -ltest1 -ltest2 // 編譯時分別鏈接libtest1目錄下的libtest1.so庫與libtest2目錄的libtest2.so庫。
- LD_LIBRARY_PATH 用於在程序運行期間查找動態鏈接庫時指定除了系統默認路徑(/usr/lib)之外的路徑。
可執行文件運行程序之前執行:
# export LD_LIBRARY_PATH=libtest1:libtest2:$LD_LIBRARY_PATH # ./program // 運行可執行程序
除此之外,還有下面一些常見環境變量。
HISTSIZE 保存歷史命令記錄的條數。
LOGNAME 當前用戶的登錄名。
HOSTNAME 主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。
SHELL 當前用戶用的是哪種Shell。
LANG/LANGUGE 和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。
MAIL 當前用戶的郵件存放目錄。
PS1 基本提示符,對於root用戶是#,對於普通用戶是$。PS2是附屬提示符,默認是“>”。可以通過修改此環境變量來修改當前的命令符,比如下列命令會將提示符修改成字符串“Hello,My NewPrompt”。
擴展閱讀三
關於 LIBRARY_PATH 和 LD_LIBRARY_PATH 的關係。
- Linux gcc編譯鏈接時的動態庫搜索路徑
GCC編譯、鏈接生成可執行文件時,動態庫的搜索路徑順序如下(注意不會遞歸性地在其子目錄下搜索):
1. gcc編譯、鏈接命令中的-L選項;
2. gcc的環境變量的LIBRARY_PATH(多個路徑用冒號分割);
3. gcc默認動態庫目錄:/lib:/usr/lib:usr/lib64:/usr/local/lib。
- 執行二進制文件時的動態庫搜索路徑
鏈接生成二進制可執行文件後,在運行程序加載動態庫文件時,搜索的路徑順序如下:
1. 編譯目標代碼時指定的動態庫搜索路徑:用選項-Wl, rpath和include指定的動態庫的搜索路徑,比如gcc -Wl, -rpath, include -L. -ltest hello.c,在執行文件時會搜索路徑`./include`;
2. 環境變量LD_LIBRARY_PATH(多個路徑用冒號分割);
3. 在 /etc/ld.so.conf.d/ 目錄下的配置文件指定的動態庫絕對路徑(通過ldconfig生效,一般是非root用戶時使用);
4. gcc默認動態庫目錄:/lib:/usr/lib:usr/lib64:/usr/local/lib等。