配置方法
環境變數即當前環境下的引數或者變數。在作業系統中用來設定作業系統的一些引數。
ubuntu下常配置的四個環境變數檔案/etc/bash.bashrc、/etc/profile、~/.bashrc、~/.profile。這四個檔案都用於配置環境變數,常常會搞不懂該配置哪乙個。
四個檔案有兩個存放位置:/etc/目錄和~/使用者家目錄。/etc/目錄主要存放系統配置檔案。而~/使用者家目錄則存放使用者個人的檔案。
顯然,不同的存放位置對應的配置檔案的作用域不同,對於/etc/bash.bashrc、/etc/profile存放在系統配置檔案目錄,則環境變數指定的內容作用於整個系統所有的使用者。而~/.bashrc、~/.profile則只作用於當前的使用者使用者。因此,如果想更改的內容對所用使用者有效,則更改的環境變數應是/etc/下的bash.bashrc和profile檔案,如果只想對個人使用者有效,則需更改的是當前使用者~/家目錄下的.bashrc和.profile檔案。
四個檔案又分為兩大類,bashrc類檔案和profile類檔案。不同檔案的作用方式又有不同,bashrc檔案主要作用於bash shell,用於設定與bash shell 相關的東西,而profile檔案則作用於整個系統環境,用於設定系統環境引數。
對於bashrc檔案,作用於bash shell(linux的shell有多種:sh\bash\csh\ksh),只要使用者執行bash命令,該檔案裡的內容就會起作用,當重新開啟乙個shell(開啟乙個新shell和開啟乙個新終端terminal不一樣,)時就會重新讀取bashrc檔案的內容,即更改的內容會隨著新的shell而生效,也可以使用sourse 來更新bashrc的內容。
對於profile檔案,作用於整個系統,它是在系統啟動,使用者第一次登入時被讀取執行的,因此一般情況下是需要重啟系統才能生效的。
互動式shell和非互動式shell:互動與非互動的定義是在於shell是否與終端(使用者)進行資料互動(即接受來自鍵盤的輸入,並將結果輸出到顯示器),互動式根據使用者輸入而產生輸出,而非互動式通常不直接接受使用者的輸入,也不直接在終端輸出結果。通常使用者寫的shell指令碼都是非互動式的,通過sh 直接執行該指令碼檔案。
login-shell和nonlogin-shell:login即登入的意思,因此這兩種shell的區別在於是否需要使用者登入login-shell是說在取得bash時需要完整的登陸流程。如tty1~tty6登入,需要輸入賬號和密碼,此時取得的bash就是login shell(ctl+alt+f1)。non-login shell就是取得bash不需要重複登入,終端啟動的shell輸入視窗就是non-login shell。在shell視窗直接su切換的使用者,也屬於non-login shell(ctl+alt+t)。
如何判斷乙個shell是login-shell還是nonlogin-shell:只需要在開啟的shell視窗輸入echo $0即可,返回的是shell型別,型別前面如果有"-"短橫線則表示是login-shell否則便是nonlogin-shell。
bashrc用於互動式non-loginshell,而profile用於互動式login shell。因此profile內容需要重啟才能更新,而bashrc內容不需要重啟,只需要source一下。
通常使用的配置方法有三種,一種是臨時設定,只作用於當前終端;一種是只作用於當前使用者的設定,還有一種是作用於所有使用者的設定。
#直接由終端命令列輸入,只作用於當前終端,關閉當前終端或開啟新的終端都會無效
export
path
=$path
《要加入的具體路徑》
#在使用者家目錄的.bashrc檔案中新增,只作用於當前使用者。
#切換至當前使用者的家目錄
cd ~
#開啟家目錄下的.bashrc檔案
vim ~
/.bashrc
#在檔案中的最末尾處新增要指定的環境變數路徑,先按i鍵進入insert模式
export
path
=《要加入的路徑》
:$path
#儲存退出,按esc退出insert模式,按shift+
:,然後按wq設定儲存退出模式,最後enter
#最後更新一下環境變數
source .bashrc
#在系統配置檔案profile檔案中新增,作用於所有使用者。
#開啟系統環境變數配置檔案,通常需要超級使用者許可權
sudo vim /etc/profile
#在檔案中的最末尾處新增要指定的環境變數路徑,先按i鍵進入insert模式
export
path
=《要加入的路徑》
:$path
#儲存退出,按esc退出insert模式,按shift+
:,然後按wq設定儲存退出模式,最後enter
#在終端命令列鍵入
echo $path
或者env
#這兩個命令輸出的不一樣
opencv安裝後進行的環境配置步驟:
1.opencv.conf檔案:為了被執行檔案找到
#首先將編譯好的庫檔案新增到鏈結路徑(建立opencv.conf檔案)
#在終端命令列輸入命令:
vim /etc/ld.so.conf.d/opencv.conf
#在opencv.conf檔案中新增opencv的動態庫路徑:
/usr/local/lib
#儲存並退出
#在終端執行更新配置命令,使其生效
#ldconfig動態鏈結庫管理命令,其目的為了讓動態鏈結庫為系統所共享
sudo ldconfig
2.更新環境變數/etc/bash.bashrc:為了被編譯器找到
#在終端開啟配置檔案
sudo vim /etc/bash.bashrc
#在檔案的末端新增:
pkg_config_path
=$pkg_config_path
:/usr/local/lib/pkgconfig
export
pkg_config_path
#儲存退出
#更新環境變數
source /etc/bash.bashrc
使用者登入後就會讀取/etc/bash.bashrc檔案的內容。
#opencv**編譯命令
g++ test.cpp -o test `pkg-config --cflags --libs opencv`
pkg-config:這個命令用於告訴編譯器程式編譯時從**找標頭檔案和庫相關資訊。
對於上面的命令,就是告訴編譯器所需要的庫檔案和標頭檔案資訊存放在opencv.pc檔案中。
編譯器預設的是在/usr/lib/pkgconfig/目錄下尋找該.pc檔案。如果找不到,則會在系統環境變數指定的pkg_config_path路徑下尋找。
系統登入時已經讀取了/etc/bash.bashrc的內容,即載入了乙個pkg_config_path路徑,指向/usr/local/lib/pkgconfig 。該路徑下有opencv編譯時產生的opencv.pc檔案。
而在opencv.pc檔案中則指明了標頭檔案和原始檔的搜尋路徑。因此編譯器可以根據該檔案找到程式中呼叫的庫檔案。
#opencv.pc檔案的內容
prefix=/usr/local#指定到安裝目錄
exec_prefix=
$includedir=
$/include#頭檔案目錄
libdir=
$/lib#源檔案目錄
name: opencv
description: the opencv library
version:4.3.0#版本號
cflags: -i$/opencv4#標頭檔案包含精確到opencv4,否則寫程式時要#include
libs: -l$ -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
~
這一部分是根據網上的講解外加個人理解,如有錯誤,請不吝賜教。 ubuntu環境變數
環境變數一般是指在作業系統中用來指定作業系統執行環境的一些引數,比如臨時資料夾位置和系統資料夾位置等 1 因為一些引數可以被當做系統預設的設定,如此以來,在執行某個程式的時候就不需要再指定這些引數了。比如你總是使用某個程式,在命令列中使用時,每次執行這個程式你都要進入程式所在的目錄啟動程式。如果你將...
Ubuntu環境變數
注 1.作者的系統是ubuntu 13.10,在其他linux發行版中環境變數的設定方式類似但會有不同 2.這裡以環境變數path為例,環境變數還可以有很多,也可以自己定義名稱。環境變數一般是指在作業系統中用來指定作業系統執行環境的一些引數,比如臨時資料夾位置和系統資料夾位置等 1 因為一些引數可以...
ubuntu環境變數
在ubuntu中有如下幾個檔案可以設定環境變數 etc profile 在登入時,作業系統定製使用者環境時使用的第乙個檔案,此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行.etc environment 在登入時作業系統使用的第二個檔案,系統在讀取你自己的profile前,...