Linux程式設計 12 (預設shell環境變數, PATH變數重要講解)
一 .概述
預設情況下, bash shell會用一些特定的環境變數來定義系統的環境。這些預設環境變數可以理解是上篇所講的系統全域性環境變數。
1.1 bash shell支援的Bourne變數
Bourne shell 是 UNIX 最初使用的 shell。下面例舉幾個常用的變數名。
變數名 |
描述 |
HOME |
當前使用者的主目錄 |
PATH |
Shell查詢命令的目錄列表,由冒號分隔 |
PS1 |
Shell命令列介面的主提示符 |
PS2 |
Shell命令列介面的次提示符 |
如下圖所示:使用echo 輸出該變數名$PATH的值。值給出了shell查詢命令會去的6個目錄。優先最高的是/usr/local/bin 目錄下。
下面是主提示符與次提示符:
1.2 bash shell 環境變數
下面只是隨意列出了幾個變數名。像BASH_SUBSHELL在介紹子shell中有講過。
變數名 |
描述 |
BASH_SUBSHELL |
當前子shell環境的巢狀級別。 |
BASH_VERSION |
當前執行的bash shell 版本號。 |
HOSTNAME |
當前主機名稱 |
PWD |
當前工作目錄,對應內部命令小寫pwd |
下面隨變演示一個,檢視bash shell版本號:
1.3 PATH環境變數
上面講到了PATH變數,它的作用是:當你在shell命令列中輸入一個外部命令時。Shell必須搜尋系統來找到對應的程式。 PATH環境變數定義了用於進行命令和程式查詢的目錄。上面列出了要查詢的6個目錄。如果命令或者程式的位置沒有包括在PATH變數中,那就必須使用絕對路徑來查詢,否則shell是無法找到的。找不到,它會產生一個錯誤資訊。
如下圖所示:mysqld服務之所以能找到,是因為它存在於/usr/sbin目錄下。Mysql的mssqldump工具包之所以能找到,是因為它存在於/usr/bin目錄下。這二個目錄都是存在於PATH全域性變數中。而nginx服務命令卻未找到。
下圖來查詢下nginx 服務是存放於哪個目錄下。通過下圖知道,nginx服務存在於/usr/local/nginx/sbin 目錄下。而PATH環境變數中沒有該路徑。所示“提示未找到命令…“。
如果想在虛擬目錄任意位置操作nginx服務,又不想每次都用cd絕對路徑定位。有二種方法:1是前面章節所學的軟連結,把nginx的絕對路徑能過軟連結指定到PATH環境下的一個目錄下。2是將nginx絕對路徑新增到PATH目錄中。
1.4 新增PATH環境變數
上面講到了nginx服務, 下面演示將nginx服務的絕對路徑,新增到PATH環境變數中。如下圖所示:已將nginxx服務路徑新增到了PATH環境變數中。
下面來試試,在任意的虛擬目錄下,執行nginx服務。下面是隨意在虛擬目錄的根目錄下檢視nginx服務, 重新載入nginx服務,該命令也找到了,下圖的錯誤是nginx程序沒有啟動,與要介紹的PATH沒有關係。 總結: 當初學linux的時候,每當安裝了一個服務時,在終端敲 bash執行該命令,經常提示未找到該命令。但有些服務又可以直接找到。現在明白了, shell查詢命令會去指定的PATH環境目錄下查詢。當有些服務安裝後,該服務的bin目錄並沒有在PATH環境目錄中。
注意:對於PATH變數的修改,當退出終端(exit)或重啟系統時會失效。後面介紹如何永久保持環境變數的修改效果。