概念
?環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數
如:我們在編寫C/C++代碼的時候,在鏈接的時候,從來不知道我們的所鏈接的動態靜態庫在哪里,但是照樣可以鏈接成功,生成可執行程序,原因就是有相關環境變量幫助編譯器進行查找。
環境變量通常具有某些特殊用途,還有在系統當中通常具有全局特性
三個常見環境變量
PATH : 指定命令的搜索路徑
HOME : 指定用戶的主工作目錄(即用戶登陸到Linux系統中時,默認的目錄)
PWD:環境變量存儲當前工作目錄的路徑
PATH
眾所周知,命令的本質就是一個個可執行程序
那么都是可執行程序,為什么我們自己的可執行程序運行時需要加“./”呢?
因為運行可執行程序時系統會自動在PATH環境變量里面進行路徑搜索
自己的可執行程序:
系統的命令:
如果我們想要自己的可執行程序執行起來也不需要“./”改怎么做?
很簡單,只要讓環境變量里有我們可執行程序的路徑或者把我們的可執行程序放在PATH原有的路徑下即可
查看PATH的默認路徑:
把我們的命令的路徑追加到PATH環境變量中并運行:
路徑恢復(直接將原有路徑賦值給PATH):
當然,如果直接賦值一個空串,大部分命令就是用不了了
不過不用擔心,重啟xshell就行
但是有幾個命令卻依然可以使用
例:echo,export
Linux的命令分類:
1.常規命令,shell fork讓子進程成執行的
2.內建命令,shell命令行的一個函數,當然可以直接讀取shell內部定義的本地變量嘍!
默認更改環境變量,僅限于本次登錄,重新登錄,環境變量自動恢復(像網吧的機子)
如果我們把對應的可執行程序拷貝到PATH包含的路徑下也可以實現---這個行為也可以稱為---程序安裝(簡易版)相對的把對應可執行程序從PATH的路徑下刪除---這個行為可以稱為---程序卸載
which尋找路徑也是通過PATH去尋找的
HOME
會根據用戶名來初始化家目錄:
此時我是一個普通用戶:
此時我是root用戶:
cd $HOME直接返回家目錄
PWD
環境變量存儲當前工作目錄的路徑
pwd命令就是讀取PWD的值然后打印出來
本地/環境變量
本地變量
命令行直接定義 左側名稱=右側內容
本地變量只在bash進程內部有效,不會被子進程繼承下去

環境變量
通過繼承父進程bash的環境變量
具有全局性通過讓所有的子進程繼承的方式,實現自身的全局性!
系統環境變量通常具有全局屬性,會被所有的子進程繼承
查看/獲取環境變量
查看
1.env
2.set
set查看包含環境變量的其他本地變量,env只能查看環境變量
獲取
1.getenv
2.main傳參
main函數的三個參數
3.environ
環境變量的組織方式
每個程序都會收到一張環境表,環境表是一個字符指針數組,每個指針指向一個以’\0’結尾的環境字符串
設置環境變量
我們直接更改的是bash進程內部的環境變量信息!
每一次重新登陸,都會給我們形成新的bas解釋器并且新的bash解釋器自動從 讀取形成自己的環境變量表信息
父進程的環境變量信息又從哪里來??
環境變量信息是以腳本配置文件的形式存在的!
每一次登陸的時候,你的bash進程都會讀取vim .bash_profile
配置文件中的內容,為我們bash進程形成一張環境變量表信息!
shell的本地變量
export導出環境變量(只導出在父進程bash的上下文中,只導出在內存中,并不在配置中,重啟shell就會消失)
unset取消環境變量
在配置文件中配置環境變量并導出(重啟shell并不會消失)