Linux 命令大全(十三)——環境管理


十三、 環境管理
1 、環境變量
在 linux 系統下,如果你下載並安裝了應用程序,很有可能在鍵入它的名稱時出現“command not
found”的提示內容。如果每次都到安裝目標文件夾內,找到可執行文件來進行操作就太繁瑣了。這涉
及到環境變量 PATH 的設置問題,而 PATH 的設置也是在 linux 下定制環境變量的一個組成部分。
環境變量可以讓子程序繼續引用的原因,是因為:
1. 當啟動一個 shell ,操作系統分配一記憶區塊給 shell 使用,此區域之變量可以讓子程序存
取;
2. 利用 export 功能,可以讓變量的內容寫到上述的記憶區塊當中(環境變量);
當加載另一個 shell 時 (亦即啟動子程序,而離開原本的父程序了),子 shell 3. 可以將父
shell 的環境變量所在的記憶區塊導入自己的環境變量區塊當中。
所以環境變量是和 Shell 緊密相關的,用戶登錄系統后就啟動了一個 Shell。對於 Linux 來說一般
是 bash,但也可以重新設定或切換到其它的 Shell(使用 chsh 命令)。
根據發行版本的情況,bash 有兩個基本的系統級配置文件:/etc/bashrc 和/etc/profile。這些配
置文件包含兩組不同的變量:shell 變量和環境變量。前者只是在特定的 shell 中固定(如 bash),后
者在不同 shell 中固定。很明顯,shell 變量是局部的,而環境變量是全局的。環境變量是通過 Shell
命令來設置的,設置好的環境變量又可以被所有當前用戶所運行的程序所使用。對於 bash 這個 Shell
程序來說,可以通過變量名來訪問相應的環境變量,通過 export 來設置環境變量。
注:Linux 的環境變量名稱一般使用大寫字母
1.1 Linux 環境變量的種類
按環境變量的生存周期來划分,Linux 的環境變量可分為兩類:
1 永久的:需要修改配置文件,變量永久生效。
2 臨時的:使用export命令行聲明即可,變量在關閉shell時失效。
1.2 、設置變量的三種方法
1 在/etc/profile文件中添加變量對所有用戶生效(永久的)
用 VI 在文件/etc/profile 文件中增加變量,該變量將會對 Linux 下所有用戶有效,並且是“永久
生效”。
例如:編輯/etc/profile 文件,添加 CLASSPATH 變量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注 1:profile 文件在系統啟動時將被運行。大家可以在里面加入其他命令,但是一定要加正確,不然
的話系統會啟動不起來的。
2 在用戶目錄下的.bash_profile文件中增加變量對單一用戶生效(永久的)
用 VI 在用戶目錄下的.bash_profile 文件中增加變量,改變量僅會對當前用戶有效,並且是“永
久的”。
例如:編輯 guok 用戶目錄(/home/guok)下的.bash_profile
# vi /home/guok/.bash.profile 添加如下內容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注 2:如果修改了/etc/profile,那么編輯結束后執行 source profile 或 執行點命令 ./profile,PATH
的值就會立即生效了。這個方法的原理就是再執行一次/etc/profile shell 腳本,注意如果用 sh
/etc/profile 是不行的,因為 sh 是在子 shell 進程中執行的,即使 PATH 改變了也不會反應到當前環
境中,但是 source 是在當前 shell 進程中執行的,所以我們能看到 PATH 的改變。
注 3:變量重復定義時,以后面的設置為先。
例如:在 peofile 文件默認對 PATH 變量都有設置 PATH=¥¥¥¥¥¥¥,在以后可能在對 PATH 設
置,一般都加在 profile 文件的最后 PATH=······(打個比方)。而系統之中認定的
PATH=·······¥¥¥¥¥¥¥¥¥,也就是說相同名字的環境變量,后寫入的先起作用(通俗地講)。
注 4、特殊字符介紹。
例如在 profile 中有如下內容,通過以下內容說明特殊符號的用法。
export A=/q/jing:aaa/cc/ld
export B=.:/liheng/wang export A=/cd/cdr:$A
: 表示並列含義,例如 A 變量值有多個,用:符號進行分離。
. 表示你操作的當前目錄。例如 pap 命令會查找 B 環境變量。
在/home 鍵入 B 命令,系統首先在/home 目錄下(即當前路徑)查找關於 B 的內容,如果沒有在
/liheng/wang 目錄下查找關於 B 的內容。 $ 表示該變量本次定義之前的值,例如$A 代表
/q/jing:aaa/cc/ld。也就是說 A=/cd/cdr:/q/jing:aaa/cc/ld
注 5、常見的環境變量
PATH:決定了 shell 將到哪些目錄中尋找命令或程序
HOME:當前用戶主目錄
MAIL:是指當前用戶的郵件存放目錄。
SHELL:是指當前用戶用的是哪種 Shell。
HISTSIZE:是指保存歷史命令記錄的條數。
LOGNAME:是指當前用戶的登錄名。
HOSTNAME:是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。
LANG/LANGUGE:是和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。
PS1:是基本提示符,對於 root 用戶是#,對於普通用戶是$。
PS2:是附屬提示符,默認是“>”。可以通過修改此環境變量來修改當前的命令符,比如下列命令
會將提示符修改成字符串“Hello,My NewPrompt :) ”。
# PS1=" Hello,My NewPrompt :) "
3 直接運行export命令定義變量【只對當前shell(BASH)有效(臨時的)】
在 shell 的命令行下直接使用[export 變量名=變量值]定義變量,該變量只在當前的 shell(BASH)或
其子 shell(BASH)下是有效的,shell 關閉了,變量也就失效了,再打開新 shell 時就沒有這個變量,
需要使用的話還需要重新定義。
1.3 、環境變量設置命令
1 echo $ <變量名> //顯示某個環境變量
2 env
// environment (環境) 的簡寫,列出來所有的環境變量
3 set
//顯示所有本地定義的Shell變量,這個命令除了會將環境變量列出來之外,其它我們
的自定義的變量,都會被列出來。因此,想要觀察目前 shell 環境下的所有變量,就用 set 即可!
4 export 命令
功能說明:設置或顯示環境變量。
語 法:export [-fnp][變量名稱]=[變量設置值]
補充說明:在 shell 中執行程序時,shell 會提供一組環境變量。export 可新增,修改或刪除環
境變量,供后續執行的程序使用。export 的效力僅及於該此登陸操作。
參 數:
-f 代表[變量名稱]中為函數名稱。
-n 刪除指定的變量。變量實際上並未刪除,只是不會輸出到后續指令的執行環境中。
-p 列出所有的 shell 賦予程序的環境變量。
一個變量創建時,它不會自動 地為在它之后創建的 shell 進程所知。而命令 export 可以向后面
的 shell 傳遞變量的值。當一個 shell 腳本調用並執行時,它不會自動得到原為腳本(調用者)
里定義的變量的訪問權,除非這些變量已經被顯式地設置為可用。export 命令可以用於傳遞一
個或多個變量的值到任何后繼腳本。
5 unset清除環境變量,如果未指定值,則該變量值將被設為NULL
6 readonly設置只讀變量,只讀變量設置后不能用unset清除,除非重啟shell
7 declare 、typeset 這兩個命令是完全一樣的,他們允許指定變量的具體類型,在某些特定的語言
中,
這是一種指定類型的很弱的形式,declare 命令是在 Bash 版本 2 或之后的版本才被加入的,typeset
命令也可以工作在 ksh 腳本中。
[root@linux ~]# declare [-aixr] variable
參數:
-a :將后面的 variable 定義成為數組 (array)
-i :將后面接的 variable 定義成為整數數字 (integer)
-x :用法與 export 一樣,就是將后面的 variable 變成環境變量;
-r :將一個 variable 的變量設定成為 readonly ,該變量不可被更改內容,也不能 unset
范例一:讓變量 sum 進行 100+300+50 的加總結果
[root@linux ~]# sum=100+300+50
[root@linux ~]# echo $sum
100+300+50 <==咦!怎么沒有幫我計算加總?因為這是文字型態的變量屬性啊!
[root@linux ~]# declare -i sum=100+300+50
[root@linux ~]# echo $sum
450
范例二:將 sum 變成環境變量
[root@linux ~]# declare -x sum
范例三:讓 sum 變成只讀屬性,不可更動!
[root@linux ~]# declare -r sum
[root@linux ~]# sum=tesgting -bash: sum: readonly variable


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM