1. 程式人生 > >Linux程式設計 12 (預設shell環境變數, PATH變數重要講解)

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 服務是存放於哪個目錄下。通過下圖知道,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)或重啟系統時會失效。後面介紹如何永久保持環境變數的修改效果。