一 .概述 預設情況下, bash shell會用一些特定的環境變數來定義系統的環境。這些預設環境變數可以理解是上篇所講的系統全局環境變數。 1.1 bash shell支持的Bourne變數 Bourne shell 是 UNIX 最初使用的 shell。下麵例舉幾個常用的變數名。 變數名 描述 ...
一 .概述
預設情況下, 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 服務是存放於哪個目錄下。通過下圖知道,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)或重啟系統時會失效。後面介紹如何永久保持環境變數的修改效果。