亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Linux中常見環(huán)境變量的特點與設(shè)置

 更新時間:2025年06月10日 11:59:34   作者:什么半島鐵盒  
環(huán)境變量是操作系統(tǒng)和用戶設(shè)置的一些動態(tài)鍵值對,為運行的程序提供配置信息,理解環(huán)境變量對于系統(tǒng)管理、軟件開發(fā)都很重要,下面小編就為大家詳細介紹一下吧

前言

環(huán)境變量是操作系統(tǒng)和用戶設(shè)置的一些動態(tài)鍵值對,為運行的程序提供配置信息。理解環(huán)境變量對于系統(tǒng)管理、軟件開發(fā)都很重要。

一、環(huán)境變量的概念

環(huán)境變量是操作系統(tǒng)用來存儲和傳遞與系統(tǒng)環(huán)境相關(guān)信息的一種機制,是以鍵值對形式定義的全局變量,供操作系統(tǒng)和應(yīng)用程序讀取和使用。
通常格式為:

當VALUE為多個時,以‘:’符號隔開

KEY=VALUE
  • KEY:變量名
  • VALUE:對應(yīng)值

那么它究竟有什么作用呢?我們來看這個例子:

從上面我們可以看到存在一個可執(zhí)行程序test,第一次我們執(zhí)行它,程序并沒有正常運行,當然都知道因為沒有指定程序所在路徑,所以程序不能正常運行,第二次指定了不就運行成功了,那么我們的指令在執(zhí)行時為什么不用指定路徑呢?在指令篇我們就介紹過,指令的本質(zhì)就是一個寫好的可執(zhí)行程序,當時我們說,如果我們想要讓自己寫的,可執(zhí)行程序,像指令一樣直接運行,我們可以將程序拷貝到指令所在路徑下:/usr/bin

那還是沒有解釋為什么指令可以直接運行,或者說bash是如何找到指令的可執(zhí)行程序的呢?還有沒有其他方法可以使我們的可執(zhí)行程序像指令一樣運行呢?接下來我們來認識一下本篇第一個環(huán)境變量:PATH

PATH是操作系統(tǒng)中最核心的環(huán)境變量之一,當我們在命令行輸入一個命令時,操作系統(tǒng)會按照PATH中定義的目錄依次搜索該命令對應(yīng)的可執(zhí)行文件,若未找到該命令對應(yīng)的可執(zhí)行文件就會提示:command not found。

查看PATH:

echo $PATH

PATH環(huán)境變量對應(yīng)多個值,使用“:"隔離開

所以當我們將自己寫的可執(zhí)行文件,拷貝到/usr/bin路徑下,系統(tǒng)在PATH對應(yīng)的目中就可以找到。

還有什么方法可以解決這里的問題呢?只需要將我們自己寫的可執(zhí)行程序所在路徑添加到PATH環(huán)境變量中,不就也可以完成搜索了

PATH=$PATH:/home/ltn/dir

剛才的test于前面路徑存在的,可執(zhí)行程序重名了,所以又換了個程序給大家演示,但這恰恰說明了系統(tǒng)是從第一個路徑向后搜索程序的。

我們使用which查找指令時,就是在PATH環(huán)境變量中搜索的,所以現(xiàn)在我們就可以像查找指令一樣查找我們自己的可執(zhí)行程序了。

二、常見的環(huán)境變量

環(huán)境變量… 作用對應(yīng)VALUE
HOME當前用戶的主目錄路徑/home/ltn
USER當前登錄用戶名ltn
PWD當前工作目錄路徑/home/ltn
HISTSIZE記錄歷史指令最大數(shù)10000

查看環(huán)境變量:

查看所有環(huán)境變量:

env

查看指定環(huán)境變量:

echo $環(huán)境變量名

僅是截取的一部分

三、環(huán)境變量特點及其相關(guān)指令

為了方便接下來的講解,我先帶大家認識一個關(guān)于環(huán)境變量的系統(tǒng)調(diào)用接口:

頭文件:#include<stdlib.h>

參數(shù):環(huán)境變量名

返回值:如果存在則返回一個指向環(huán)境變量名的指針,否則返回NULL

3.1 環(huán)境變量的全局性

環(huán)境變量最開始是在我們登錄xshell時,操作系統(tǒng)給bash形成的,當我們執(zhí)行某些指令時,bash會創(chuàng)建子進程,并且將環(huán)境變量繼承下來(當然會做某些修改),簡單來說:環(huán)境變量是子進程從父進程那里繼承下來的。

接下來我們驗證一下!!!

創(chuàng)建我們自己的環(huán)境變量:

export ltn =”1234“

我們在當前bash進程定義了一個環(huán)境變量,如果子進程會繼承父進程的環(huán)境變量,則可以打印出結(jié)果,否則程序什么都不輸出。

   #include<stdio.h>  
   #include<unistd.h>  
   #include<stdlib.h>  
   int main()  
   {  
     printf("子進程的ltn->%s\n",getenv("ltn"));                                                                                      
     return 0;                                           
   }

可以看到程序成功打印,所以子進程會繼承父進程的環(huán)境變量。

3.2、環(huán)境變量的生命周期

  • 環(huán)境變量的生命周期與進程綁定
  • 進程終止時,環(huán)境變量也會被回收

正是有了繼承的這種形式,我們之前所提到的權(quán)限概念,才會被每條指令遵守。

刪除環(huán)境變量:

unset ltn

四、環(huán)境變量的組織方式

我們之前在學(xué)習(xí)的C語言,不知道你有沒有聽過main函數(shù)的參數(shù):

int main(int argc, char *argv[], char *env[])

第三個參數(shù)我們先不驗證

   #include<stdio.h>
   #include<unistd.h>
   #include<stdlib.h>
   int main(int argc, char *argv[], char *env[])
   {
     int i=0;
     for(;i<argc;i++)
     {
       printf("argv[%d]->%s\n",i,argv[i]);                                                                                           
    }
    return 0;
  }    

這樣一段代碼,當我們執(zhí)行它時,結(jié)果會怎么樣呢?

可以看到我們以上面兩種不同的方式執(zhí)行,程序打印出了兩種不同的結(jié)果,要知道怎么會這樣,我們還是要知道參數(shù)是什么意思:

參數(shù)一 argc

作用:記錄命令行參數(shù)的數(shù)量

規(guī)則:

1、argc的值至少為1,因為第一個參數(shù)始終是程序自身的名稱。

2、用戶輸入的每個參數(shù)(以空格分隔)都會增加argc的值。

參數(shù)二 argv

作用:存儲命令行參數(shù)的具體值(用空格分開的代表不同參數(shù)),以字符串數(shù)組的形式表示

規(guī)則:

1、argv[0] 是程序名稱(可能包含路徑,取決于調(diào)用方式)。

2 、argv[1] 到 argv[argc-1] 是用戶輸入的參數(shù)。

3、 argv[argc] 是一個空指針(NULL),表示數(shù)組結(jié)束。

參數(shù)三、env

作用:指向系統(tǒng)的環(huán)境變量數(shù)組(從bash那繼承的),每個元素是 KEY=VALUE 格式的字符串。

規(guī)則:

1、 環(huán)境變量數(shù)組以 NULL 結(jié)尾。

2、可以通過 getenv() 函數(shù)更安全地獲取特定環(huán)境變量。

當知道了main函數(shù)的這些參數(shù),我們就可以理解,為什么同一個指令加上不同的選項會有不同的功能了:當你在執(zhí)行指令是帶上不同參數(shù),它就會存入到argv數(shù)組中,然后通過if else語句匹配不同代碼塊。實現(xiàn)不同功能。

五、C語言對環(huán)境變量的操作

5.1 設(shè)置環(huán)境變量:setenv

頭文件:#include<stdlib.h>

參數(shù):

name:設(shè)置的環(huán)境變量名

value:設(shè)置的環(huán)境變量值

overwrite:是否覆蓋已有值(非零表示覆蓋)

示例:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     int main(int argc, char *argv[], char *env[])
     {
       if(setenv("ltn","Hell Linux",0)==0);
       {
         printf("ltn set to->%s\n",getenv("ltn"));                                                                                   
     
      }
      return 0;
    }

5.2 刪除環(huán)境變量:unsetenv

頭文件:#include<stdlib.h>

參數(shù):

name:環(huán)境變量名

示例:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     int main(int argc, char *argv[], char *env[])
     {
       if(setenv("ltn","Hell Linux",0)==0);
       {
         printf("ltn set to->%s\n",getenv("ltn"));
     
      }
      unsetenv("ltn");                                                                                                              
      printf("ltn->%s\n",getenv("ltn"));                                                                       
      return 0;                                                                                                
    }  

創(chuàng)建好,并刪除

5.3 遍歷所有環(huán)境變量:environ

environ是一個全局變量,內(nèi)部存有所有環(huán)境變量的指針,,末尾指針指向NULL,具體介紹太長,不方便展示,大家可以自己看。

示例:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     extern char**environ;
     int main(int argc, char *argv[], char *env[])
     {
       char **env1=environ;
       while(*env1)
       {
        printf("%s",*env1);
        env1++;                                                                                                                     
      }
    
      return 0;
    }

僅截取部分打印結(jié)果

下面我們來說一下第三給參數(shù),第三參數(shù),是一個環(huán)境變量數(shù)組,也就是說,我們可以通過直接變量得到全部環(huán)境變量:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     extern char**environ;
     int main(int argc, char *argv[], char *env[])
     {
       int i=0;
       while(env[i])
       {
        printf("%s\n",env[i]);
        i++;                                                                                                                        
      }
    
      return 0;
    }

以上就是詳解Linux中常見環(huán)境變量的特點與設(shè)置的詳細內(nèi)容,更多關(guān)于Linux環(huán)境變量的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • ubuntu 16.04 64位兼容32位程序三步曲

    ubuntu 16.04 64位兼容32位程序三步曲

    這篇文章主要介紹了ubuntu 16.04 64位兼容32位程序的三步,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-06-06
  • Linux系統(tǒng)下快速配置HugePages的完整步驟

    Linux系統(tǒng)下快速配置HugePages的完整步驟

    這篇文章主要給大家介紹了關(guān)于如何在Linux系統(tǒng)下快速配置HugePages的完整步驟,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Linux tr命令的使用

    Linux tr命令的使用

    這篇文章主要介紹了Linux tr命令的使用,幫助大家更好的理解和學(xué)習(xí)Linux,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Linux time 命令的使用

    詳解Linux time 命令的使用

    這篇文章主要介紹了詳解Linux time 命令的使用,幫助大家更好的理解和學(xué)習(xí)linux,感興趣的朋友可以了解下
    2020-08-08
  • linux expect 自動登錄交換機保存配置的方法

    linux expect 自動登錄交換機保存配置的方法

    今天小編就為大家分享一篇linux expect 自動登錄交換機保存配置的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Linux下配置IP的三種實現(xiàn)方式

    Linux下配置IP的三種實現(xiàn)方式

    本文介紹了Linux系統(tǒng)中配置IP的三種方法:使用nmcli命令、ip命令以及通過ifcfg文件,nmcli命令是NetworkManager的命令行工具,配置后不會丟失;ip命令配置后重啟系統(tǒng)會丟失;ifcfg文件配置需手動激活
    2024-11-11
  • centos 6.5 oracle開機自啟動的環(huán)境配置詳解

    centos 6.5 oracle開機自啟動的環(huán)境配置詳解

    這篇文章主要介紹了centos 6.5 oracle開機自啟動的環(huán)境配置詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實現(xiàn)方式

    關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實現(xiàn)方式

    這篇文章主要介紹了關(guān)閉linux終端還讓程序繼續(xù)執(zhí)行的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 不允許錯過的Linux常用命令集合

    不允許錯過的Linux常用命令集合

    不允許錯過的Linux常用命令集合,實用的Linux常用命令,很全面,感興趣的小伙伴們可以參考一下
    2016-01-01
  • linux命令行之linux快速搜索歷史命令方式

    linux命令行之linux快速搜索歷史命令方式

    這篇文章主要介紹了linux命令行之linux快速搜索歷史命令方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論