在嵌入式開發中,小伙伴經常為配置開發環境頭疼,比如我們最常見的交叉編譯環境arm-linux-gcc工具鏈的搭建。我們經常會碰到命令無法找到,無法識別的錯誤提示。究其原因,其實大多數都是因為我們環境變量沒有配置好而已。為了讓大家更輕松更明了我們軟件運行的環境,在此向大家講一講linux中環境變量的一些小知識,幫助大家學習。
環境變量是什么呢?環境變量一般是指在操作系統中用來指定操作系統運行環境的一些參數,如:臨時文件夾位置和系統文件夾位置等。典型的像linux中的path環境變量,當要求系統運行一個程序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下面尋找此程序外,還應到path中指定的路徑去找。用戶通過設置環境變量,可實現在任何路徑下更好的運行進程。像我們在linux中運行的命令,還有交叉編譯工具arm-linux-gcc等。我們以交叉編譯工具arm-linux-gcc跟大家舉例講解,環境變量的配置方法。
交叉編譯工具arm-linux-gcc配置方法大家熟知的有兩種
第一種:編輯/etc/environment文件,加入相應的路徑。
$ sudo vim /etc/environment 我們在environment文件內容的末尾添上工具的所在的路徑。
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/farsight/gcc-4.6.4/bin"
注銷后重新登錄后生效。
第二種:使用命令:vim /home/ farsight /.bashrc 編輯.bashrc文件,添加環境變量。
在該文件中最后一行添加:
export PATH=$PATH: /home/farsight/gcc-4.6.4/bin
使用命令:source /home/ farsight /.bashrc 使環境變量生效
以上兩種方法本質上都是去修改PATH這個環境變量,在PATH這個變量中添加交叉編譯工具的路徑,這樣我們在任意路徑下去執行arm-linux-gcc時,系統都能通過PATH找到工具的路徑,從而順暢執行工具。可是小伙伴多半會疑惑,這兩種配置方式究竟有什么區別?為什么第一種需要注銷后重新登陸生效,而第二種不需要呢?我們接下來帶大家深入了解下環境變量相關的知識。
linux中環境變量包括系統級和用戶級,系統級的環境變量是每個登錄到系統的用戶都要讀取的系統變量,而用戶級的環境變量則是該用戶使用系統時加載的環境變量。所謂的環境變量配置文件,就是在shell登陸的時候自動加載的那些文件。而登陸分為兩種登陸卻分為兩種:
login shell登陸和interactive shell登陸。
所謂的login shell登陸,實際上就是指需要輸入密碼的登陸。具體的說,包括開機登陸、ssh登陸,或者是輸入bash --login這種“假裝自己輸入密碼登陸”的方式。 在這種登陸方式下,系統會先讀取/etc/profile文件,然后,系統會依次搜索~/.bash_profile、~/.bash_login、~/.profile 這三個文件,并運行只其中第一個存在的文件。Linux系統中/etc/environment是設置整個系統的環境,而/etc/profile是設置所有用戶的環境,前者與登錄用戶無關,后者與登錄用戶有關。login shell登陸時系統會先執行profile文件再讀取environment獲取用戶及系統的環境變量信息以為運行準備好環境。因此這些文件都是在登陸的時候就讀取生效了,如果改變以后需要重新登陸重新讀取生效。
所謂的interactive shell登陸,其實就是相對于login shell登陸而言的。我們平時在登陸后右鍵打開終端、或者CTRL+ALT+T打開終端都是interactive shell登陸。 在這種登陸方式下,系統會依次讀取/etc/bash.bashrc和~/.bashrc,并加以執行。 通常情況下,~/.bashrc文件里會默認記錄一些常量和一些別名,比如&PATH變量,該變量記錄著一些命令可執行文件的路徑等,當我們修改了文件,只需要source一下文件即可生效。
以上分析給我們的啟示是,當我們為服務器配置變量時,盡量配置到/etc/profile里或者~/.bash_profile里,因為用ssh登錄服務器是基本上用不到.bashrc文件的;當我們給自己的電腦配置環境變量時,盡量配置到.bashrc里,因為這樣我們只要打開終端就會讀入這個文件,這樣就可以不用注銷就能應用配置了(只有注銷重新登錄才會應用/etc/profile一類的配置文件)。
好了,讀到這小伙伴應該對環境變量的相關知識有一定了解了吧,應該知道環境變量有什么作用,怎么配置了吧。希望大家以后配置工具的環境變量不再迷惑了。