Linux 和 Windows 系統相似,在安裝許多軟件的時候是需要去配置環境變量。同樣,在 Linux 裏也是需要去配置相應的環境變量。而在 Linux 中的環境變量主要是系統級和用戶級,系統級的環境變量是每個登錄到系統的用戶都要讀取的系統變量,而用戶級的環境變量則是用戶使用系統時加載的環境變量。
系統級
/etc/profile
文件:當用戶登錄時,操作系統爲用戶定製的用於登錄到系統的每個用戶的第一個文件,通常是調用/etc/bash.bashrc
文件。/etc/environment
文件:在登錄時操作系統調用的第二個文件,在讀取profile
之前,系統用於設置環境文件的環境變量。用戶級(文件主要是在
/home
目錄下)~/.profile
:每個用戶都可以調用來輸入自己使用的shell
信息,不過在用戶登錄時,該文件只執行一次。~/.bashrc
: 包含登錄用戶的專用bash shell
的bash
信息。也就是說每開一個shell
,該文件都會被讀取一次。臨時的
針對當前
shell
的環境變量。
簡單來說,環境變量就是指定一個目錄,軟件在運行的時候,相關程序會按照該目錄來查找相關文件。
前面是從系統和用戶級來劃分環境變量。 若按照變量的生存週期來劃分,那麼變量就可以分爲:
永久的:需要修改配置文件,變量永久生效。
臨時的:使用
export
命令來聲明就行,變量在關閉shell
的時候失效。
若按照環境變量自身的信息來劃分,則可以分爲:
當前
shell
進程私有用戶自定義變量。此時變量只在當前shell
中有效shell
自身的內建變量從自定義變量導出的環境變量
變量的設置方法:
/etc/profile 文件中添加變量(永久的)
用 vim 編輯器編輯 /etc/profile
文件來增加變量,將作用於 Linux 下所有用戶,且具有永久性。(此方法謹慎使用!)
修改 ~/.profile 文件(對單一用戶生效(永久的))
這種方法較爲安全,可以把使用這些環境變量的權限控制到用戶級別,主要是針對某一特定的用戶,如果需要給某個用戶權限使用這些環境變量,只需要修改其個人用戶主目錄下的 .profile
文件就可以了。
eg:編輯shiaynlou
用戶目錄(/home/shiyanlou)下的 .profile
,即 /home/shiyanlou/.profile
文件。
5.2.3 直接運行export
命令定義環境變量(臨時的)
在控制檯中設置,不贊成這種方式,這種設置只對當前的 shell 起作用,換一個 shell 設置就無效了。 在 shell 的命令行下直接使用 [export 變量名=變量值] 來定義變量。
在每個用戶的 home
目錄中有一個 Shell 每次啓動時會默認執行一個配置腳本,以初始化環境,包括添加一些用戶自定義環境變量等等。zsh
的配置文件是 .zshrc
,相應 Bash
的配置文件爲 .bashrc
。它們在 etc 下還都有一個或多個全局的配置文件,不過我們一般只修改用戶目錄下的配置文件。因此在退出當前 shell
後,臨時的自定義環境變量不會在新打開的 shell
中出現。
添加一個自定義的變量
$ export shiyanlou="shiyanlou001"$ echo $shiyanlou
注:使用 echo
輸出變量時需要在變量名前面加 $
符號
export shiyanlou="shiyanlou001"
echo $shiyanlou
export 命令查看
可以用來顯示從 Shell 中導出成環境變量的變量,也能通過它將自定義變量導出爲環境變量。
可以簡單體會一下,先在 Shell 中設置一個變量 temp=shiyanlou
,然後再新創建一個子 Shell 查看 temp
變量的值:
$ ~ $ $ $ zsh # 創建子進程,實驗樓環境使用的是 zsh ,ubuntu 默認的 shell 爲bash $ $ $ temp $ $
echo 命令
例如,我們查看 PATH
環境變量
env 命令查看所有的環境變量
可以用來顯示與當前用戶相關的環境變量,還可以讓命令在指定環境中運行。
set 命令查看本地定義的環境變量
可以用來顯示當前 Shell所有變量,包括其內建環境變量(與 Shell 外觀等相關),用戶自定義變量及導出的環境變量。
使用vimdiff
直觀查看環境變量
對於剛纔講到的三種環境變量的查看 :export
、env
、set
我們還可以通過 vimdiff
工具來直觀的比較它們之間的差別:
$ temp=shiyanlou $ temp_env=shiyanlou $ env|sort>env.txt $ |sort>export.txt $ |sort>set.txt
命令的輸出是用到了管道|
和用sort
命令來排序,將文本文件重定向。