一、問題產生
配置JDK時,按照搜索到的一篇文章中的做法,修改了/etc/profile文件里的內容。在原內容保持不變的基礎上,大致添加了以下內容:
export JAVA_HOME=....
export PATH=....
然而,重啟再次試圖登錄X windows時,發生錯誤。輸入密碼后沒有反應,仍然停留在Login界面。圖形界面登錄不進去,只好Ctrl+Alt+F1進入CLI試試。
二、定位問題
進入命令行界面,暫時還不知道問題的原因。與平時不同的是,登錄命令行系統返回歡迎信息的后面,還報了很多錯誤,如圖所示:

很自然的目光首先停留在最長的那些行上面:
The command could not be located because '/usr/bin:/bin' is not included in the PATH environment variable.
意思是:找不到命令,因為'/usr/bin:/bin'沒有被包含在環境變量PATH中。
這就是問題產生的原因:環境變量PATH錯誤。聯想到修改/etc/profile文件時確實對PATH進行過操作,所以解決問題的最簡單的方法就是讓/etc/profile恢復到修改之前的狀態。
看完錯誤信息,打算清屏進行下一步工作,輸入:clear。同樣報錯:
Command 'clear' is available in '/usr/bin/clear'
The command could not be located because '/usr/bin' in not included in the PATH environment variable.
clear:command not found
又試了幾個其他常用的命令:ls, vim,cat等,錯誤原因相同,均指向環境變量PATH.
三、PATH作用
Linux有PATH,在windows下配置過JDK的也肯定注意到windows也有path,這個PATH到底是做什么用的呢? 下面解釋一下:
當我們在命令行(Linux下的terminal或者tty1~6,windows下的cmd中)輸入一個命令時,實際上執行的是一個程序。比如使用 ls 命令,實際上是運行 ls 這個程序,它的功能是列出當前目錄下的內容。但是,默認情況下搜尋要運行的程序時,僅是在當前目錄下尋找的。而我們平時使用的命令不論在哪個目錄下都能執行,難道是每個目錄下都有這些命令的拷貝?當然不是,這樣對空間的浪費太嚴重了。
現在操作系統采取的普遍做法是,通過PATH變量指定命令存放的位置。一旦使用某個命令時,按照PATH中制定目錄的順序去搜尋指令對應的程序。所以正常情況下,使用echo $PATH查看環境變量PATH的內容如下:
分號 ":" 表示分隔符,分隔各個目錄。
由於PATH錯誤,我在使用指令時系統不能正常到存放指令的目錄中去尋找,因此會提示:Command not found.
四、解決方法
很人性化的是,系統會提示我們要使用的指令存放的正確位置,比如使用clear時提示的:Command 'clear' is available in '/usr/bin/clear'。clear命令是存放在'/usr/bin'目錄下的。
要編輯/etc/profile,正常情況下使用的命令是:sudo vim /etc/profile
現在,系統找不到sudo 命令,也找不到vim命令,所以只能人工指定它們的絕對路徑了。sudo 和 vim 都是存放在'/usr/bin'目錄下的,所以sudo和vim的絕對路徑分別是:/usr/bin/sudo /usr/bin/vim
因此要編輯/etc/profile要使用的命令應該這樣寫: /usr/bin/sudo /usr/bin/vim /etc/profile
只需要把自己之前添加的內容刪除掉就可以了(最好是能修改成正確的,搞不定也要至少恢復原狀吧),然后保存重啟系統。
正常狀態下重啟使用:sudo reboot
當然現在也不行,要使用 /usr/bin/sudo /sbin/reboot