W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
變量是計(jì)算機(jī)系統(tǒng)用于保存可變值的數(shù)據(jù)類型。在Linux系統(tǒng)中,變量名稱一般都是大寫的,這是一種約定俗成的規(guī)范。我們可以直接通過變量名稱來(lái)提取到對(duì)應(yīng)的變量值。Linux系統(tǒng)中的環(huán)境變量是用來(lái)定義系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),比如每個(gè)用戶不同的家目錄、郵件存放位置等。
細(xì)心的讀者應(yīng)該發(fā)現(xiàn)了,本節(jié)和上一節(jié)的標(biāo)題名都分別加了形容詞—重要的、常見的。原因其實(shí)不言而喻—要想讓Linux系統(tǒng)能夠正常運(yùn)行并且為用戶提供服務(wù),需要數(shù)百個(gè)環(huán)境變量來(lái)協(xié)同工作,我們沒有必要逐一查看、學(xué)習(xí)每一個(gè)變量,而是應(yīng)該在有限的篇幅中精講最重要的內(nèi)容。
為了通過環(huán)境變量幫助Linux系統(tǒng)構(gòu)建起能夠?yàn)橛脩籼峁┓?wù)的工作運(yùn)行環(huán)境,需要數(shù)百個(gè)變量協(xié)同工作才能完成。您當(dāng)然沒有必要去把每一個(gè)變量都看一遍,而應(yīng)該在最寶貴的書籍中為讀者精講最重要的內(nèi)容。為了更好地幫助大家理解變量的作用,劉遄老師給大家舉個(gè)例子。前文中曾經(jīng)講到,在Linux系統(tǒng)中一切都是文件,Linux命令也不例外。那么,在用戶執(zhí)行了一條命令之后,Linux系統(tǒng)中到底發(fā)生了什么事情呢?簡(jiǎn)單來(lái)說,命令在Linux中的執(zhí)行分為4個(gè)步驟。
第1步:判斷用戶是否以絕對(duì)路徑或相對(duì)路徑的方式輸入命令(如/bin/ls),如果是的話則直接執(zhí)行。
第2步:Linux系統(tǒng)檢查用戶輸入的命令是否為“別名命令”,即用一個(gè)自定義的命令名稱來(lái)替換原本的命令名稱??梢杂胊lias命令來(lái)創(chuàng)建一個(gè)屬于自己的命令別名,格式為“alias 別名=命令”。若要取消一個(gè)命令別名,則是用unalias命令,格式為“unalias 別名”。我們之前在使用rm命令刪除文件時(shí),Linux系統(tǒng)都會(huì)要求我們?cè)俅_認(rèn)是否執(zhí)行刪除操作,其實(shí)這就是Linux系統(tǒng)為了防止用戶誤刪除文件而特意設(shè)置的rm別名命令,接下來(lái)我們把它取消掉:
[root@linuxprobe ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[root@linuxprobe ~]# rm anaconda-ks.cfg
rm: remove regular file ‘a(chǎn)naconda-ks.cfg’? y
[root@linuxprobe~]# alias rm
alias rm='rm -i'
[root@linuxprobe ~]# unalias rm
[root@linuxprobe ~]# rm initial-setup-ks.cfg
[root@linuxprobe ~]#
第3步:Bash解釋器判斷用戶輸入的是內(nèi)部命令還是外部命令。內(nèi)部命令是解釋器內(nèi)部的指令,會(huì)被直接執(zhí)行;而用戶在絕大部分時(shí)間輸入的是外部命令,這些命令交由步驟4繼續(xù)處理。可以使用“type命令名稱”來(lái)判斷用戶輸入的命令是內(nèi)部命令還是外部命令。
第4步:系統(tǒng)在多個(gè)路徑中查找用戶輸入的命令文件,而定義這些路徑的變量叫作PATH,可以簡(jiǎn)單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執(zhí)行的命令可能存放的位置,然后Bash解釋器就會(huì)乖乖地在這些位置中逐個(gè)查找。PATH是由多個(gè)路徑值組成的變量,每個(gè)路徑值之間用冒號(hào)間隔,對(duì)這些路徑的增加和刪除操作將影響到Bash解釋器對(duì)Linux命令的查找。
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
[root@linuxprobe ~]# PATH=$PATH:/root/bin
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
這里有比較經(jīng)典的問題:“為什么不能將當(dāng)前目錄(.)添加到PATH中呢? ” 原因是,盡管可以將當(dāng)前目錄(.)添加到PATH變量中,從而在某些情況下可以讓用戶免去輸入命令所在路徑的麻煩。但是,如果黑客在比較常用的公共目錄/tmp中存放了一個(gè)與ls或cd命令同名的木馬文件,而用戶又恰巧在公共目錄中執(zhí)行了這些命令,那么就極有可能中招了。
所以,作為一名態(tài)度謹(jǐn)慎、有經(jīng)驗(yàn)的運(yùn)維人員,在接手了一臺(tái)Linux系統(tǒng)后一定會(huì)在執(zhí)行命令前先檢查PATH變量中是否有可疑的目錄,另外讀者從前面的PATH變量示例中是否也感覺到環(huán)境變量特別有用呢。我們可以使用env命令來(lái)查看到Linux系統(tǒng)中所有的環(huán)境變量,而劉遄老師為您精挑細(xì)選出了最重要的10個(gè)環(huán)境變量,如表3-3所示。
表3-3 Linux系統(tǒng)中最重要的10個(gè)環(huán)境變量
變量名稱 | 作用 |
---|---|
HOME | 用戶的主目錄(即家目錄) |
SHELL | 用戶在使用的Shell解釋器名稱 |
HISTSIZE | 輸出的歷史命令記錄條數(shù) |
HISTFILESIZE | 保存的歷史命令記錄條數(shù) |
郵件保存路徑 | |
LANG | 系統(tǒng)語(yǔ)言、語(yǔ)系名稱 |
RANDOM | 生成一個(gè)隨機(jī)數(shù)字 |
PS1 | Bash解釋器的提示符 |
PATH | 定義解釋器搜索用戶執(zhí)行命令的路徑 |
EDITOR | 用戶默認(rèn)的文本編輯器 |
Linux作為一個(gè)多用戶多任務(wù)的操作系統(tǒng),能夠?yàn)槊總€(gè)用戶提供獨(dú)立的、合適的工作運(yùn)行環(huán)境,因此,一個(gè)相同的變量會(huì)因?yàn)橛脩羯矸莸牟煌哂胁煌闹?。例如,我們使用下述命令?lái)查看HOME變量在不同用戶身份下都有哪些值(su是用于切換用戶身份的命令,將在第5章跟大家見面):
[root@linuxprobe ~]# echo $HOME
/root
[root@linuxprobe ~]# su - linuxprobe
Last login: Fri Feb 27 19:49:57 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ echo $HOME
/home/linuxprobe
其實(shí)變量是由固定的變量名與用戶或系統(tǒng)設(shè)置的變量值兩部分組成的,我們完全可以自行創(chuàng)建變量,來(lái)滿足工作需求。例如設(shè)置一個(gè)名稱為WORKDIR的變量,方便用戶更輕松地進(jìn)入一個(gè)層次較深的目錄:
[root@linuxprobe ~]# mkdir /home/workdir
[root@linuxprobe ~]# WORKDIR=/home/workdir
[root@linuxprobe ~]# cd $WORKDIR
[root@linuxprobe workdir]# pwd
/home/workdir
但是,這樣的變量不具有全局性,作用范圍也有限,默認(rèn)情況下不能被其他用戶使用。如果工作需要,可以使用export命令將其提升為全局變量,這樣其他用戶也就可以使用它了:
[root@linuxprobe workdir]# su linuxprobe
Last login: Fri Mar 20 20:52:10 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ cd $WORKDIR
[linuxprobe@linuxprobe ~]$ echo $WORKDIR
[linuxprobe@linuxprobe ~]$ exit
[root@linuxprobe ~]# export WORKDIR
[root@linuxprobe ~]# su linuxprobe
Last login: Fri Mar 20 21:52:10 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ cd $WORKDIR
[linuxprobe@linuxprobe workdir]$ pwd
/home/workdir
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: