陳金蓮
(黃岡職業(yè)技術(shù)學(xué)院 電子信息學(xué)院,湖北 黃岡 438002)
Linux中環(huán)境變量所導(dǎo)致的問題分析及解決
陳金蓮
(黃岡職業(yè)技術(shù)學(xué)院 電子信息學(xué)院,湖北 黃岡 438002)
摘要:Linux操作系統(tǒng)在當(dāng)前的網(wǎng)絡(luò)服務(wù)平臺中占有相當(dāng)重要的地位,但由于版本過于繁雜,在使用的過程中經(jīng)常會出現(xiàn)這樣或者那樣意想不到的問題,以普通帳號登錄,經(jīng)過su命令提權(quán)后仍然無法運(yùn)行管理類命令便是其中一種。本文分析了導(dǎo)致這種問題的原因,提出了解決這個問題的方法。
關(guān)鍵詞:普通帳號;root帳號;提權(quán);環(huán)境變量;/sbin
Linux操作系統(tǒng)因其開源在當(dāng)今IT行業(yè)中舉足輕重的地位,人所共知,它在智能安防、嵌入式開發(fā)、服務(wù)器運(yùn)維,包括現(xiàn)在大行其道的物聯(lián)網(wǎng)、大數(shù)據(jù)、云計算中都是基石,因此學(xué)習(xí)linux成為現(xiàn)在IT人的必修課了。但任何事物都是有兩面性的,linux不同于windows的直觀的圖形操作界面,它艱澀的字符界面就象上世紀(jì)90年代以前的dos系統(tǒng)一樣,讓很多人望而生畏。還有,開源的內(nèi)核使得linux發(fā)行版如百花齊放,雖然大同小異,但總有不同。這些都便使得學(xué)習(xí)者在學(xué)習(xí)進(jìn)程中頭痛不已。
1問題提出——命令找不到
Redhat enterprise Linux 5初始安裝后,以普通帳號登錄,用su命令提升權(quán)限后,仍無法運(yùn)行管理類的命令,系統(tǒng)提示“command not found”,如圖1所示。
圖1 命令找不到
而以root帳號登錄則所有的命令都可運(yùn)行。
原因會是什么?如果是執(zhí)行權(quán)限的問題,系統(tǒng)的提示應(yīng)該會是“權(quán)限不夠”;如果是命令程序本身的問題,則用root帳號登錄后相應(yīng)的命令也會不能正常運(yùn)行。那么就真是如提示所說,在當(dāng)前登錄用戶下的環(huán)境下無法找到相應(yīng)的命令文件?
2問題分析——命令找不到的原因
命令文件真實存在,只是執(zhí)行用戶找不到,那么應(yīng)該是執(zhí)行用戶的查找路徑的問題了。管理類命令文件位于/sbin之下,既然提示命令找不到,應(yīng)該是當(dāng)前帳號默認(rèn)未在該路徑下搜索命令。執(zhí)行用戶會到除了當(dāng)前登錄目錄之外的哪些路徑下查找命令文件呢?這個由當(dāng)前用戶的環(huán)境變量中的$PATH變量決定。
環(huán)境變量是給系統(tǒng)或用戶應(yīng)用程序設(shè)置的一些參數(shù),具體的作用與具體的環(huán)境變量相關(guān)。比如path,是告訴系統(tǒng),當(dāng)要求系統(tǒng)運(yùn)行一個程序而沒有告訴它程序所在的完整路徑時,系統(tǒng)除了在當(dāng)前目錄下面尋找此程序外,還應(yīng)到哪些目錄下去尋找。
于是,在執(zhí)行命令的前面嘗試添加/sbin路徑,如/sbin/ifconfig,則命令可成功運(yùn)行,如圖2所示。
圖2 命令成功執(zhí)行
這說明確實是環(huán)境變量導(dǎo)致的問題。同時用echo命令顯示當(dāng)前帳號的環(huán)境變量$PATH,得到的結(jié)果如圖3所示,用戶的環(huán)境變量中確實沒有包含系統(tǒng)管理類命令的路徑/sbin。
圖3顯示path環(huán)境變更
找到了問題的癥結(jié),解決起來就有的放矢了。
3解決方案——修改環(huán)境變量
根據(jù)用戶需求不同,解決方法有以下幾種
(1)如果只想在本次開機(jī)過程中臨時性地修改系統(tǒng)變量,下次開機(jī)就無效的話,可以輸入export PATH=$PATH:/sbin,即在當(dāng)前登錄帳號的bash環(huán)境中臨時增加一個搜索路徑。
(2)如果只給當(dāng)前登錄用戶永久修改環(huán)境變量,則通過修改用戶的bash配置文件來解決。
用vi編輯器打開當(dāng)前登錄用戶主目錄下的隱藏文件.bash_profile,內(nèi)容如圖4中所示。
圖4 修改環(huán)境變量的配置文件
在PATH=$PATH:$HOME/bin行后添加:/sbin,就變成PATH=$PATH:$HOME/bin:/sbin,文件修改并保存完以后,運(yùn)行source ~/.bash_profile命令即可使修改操作對當(dāng)前bash立即生效。
(3)如果給系統(tǒng)中所有的用戶都永久修改搜索路徑的環(huán)境變量,則通過修改/etc/profile文件來實現(xiàn)。
末尾添加export PATH=$PATH:/sbin
文件修改并保持完以后,運(yùn)行source etc/profile命令即可使修改操作立即生效。
(4)還有一種簡單而直接解決的辦法,即直接在被執(zhí)行的命令前帶上管理命令所在的路徑,如:[root@cjl]# /sbin/ifconfig的形式。或者用vi編輯器來修改 /etc/profile 文件。配置文件的原相關(guān)內(nèi)容如下:
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
把其中的if 語句注釋掉,修改為:
# Path manipulation
#if["$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
#fi
保存文件,重新啟動系統(tǒng)即可。
4小結(jié)
其實,不管是哪種解決方案,其核心內(nèi)容只有一個,就是在登錄用戶的環(huán)境變量PATH中增加/sbin的搜索路徑,讓用戶能在/sbin路徑下找到相應(yīng)的管理命令去執(zhí)行。不同的是,不同修改方法的作用范圍不同而已。
參考文獻(xiàn):
[1]Bovet.深入理解Linux內(nèi)核[M].北京:中國電力出版社,2008.
[2]劉曉輝.網(wǎng)管天下[M].北京:電子工業(yè)出版社,2011.
[3]Matt Welsh & Lar Kaufman.Linux權(quán)威指南[M].北京:中國電力出版社,2000.
[4]余柏山.Linux系統(tǒng)管理與網(wǎng)絡(luò)管理[M].北京:清華大學(xué)出版社,2010.
[5]趙炯.Linux內(nèi)核完全剖析[M].北京:機(jī)械工業(yè)出版社,2006.
[責(zé)任編輯:羅幼平]
* 收稿日期:2016-05-17
作者簡介:陳金蓮,女,湖北紅安人,計算機(jī)科學(xué)專業(yè)碩士,高級工程師。研究方向:網(wǎng)絡(luò)工程、網(wǎng)絡(luò)安全。
中圖分類號:TP391
文獻(xiàn)標(biāo)識碼:A
文章編號:1672-1047(2016)03-0097-02
DOI:10.3969/j.issn.1672-1047.2016.03.26