最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Linux環(huán)境變量與系統(tǒng)編程

 更新時(shí)間:2023年05月06日 11:06:28   作者:Apollon_krj  
本文主要介紹了淺談Linux環(huán)境變量與系統(tǒng)編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、基本概念:

環(huán)境變量(environment variables)一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù)。
系統(tǒng)環(huán)境變量有多種多樣,比如:

  • PATH:指定可執(zhí)行程序的搜索路徑(命令也屬于程序)
  • LD_LIBRARY_PATH:指定動(dòng)態(tài)庫的搜索路徑

舉個(gè)簡單的例子:

我們查看PATH這個(gè)變量,可以發(fā)現(xiàn)該目錄下有許多路徑(每個(gè)路徑用冒號(:)分隔),其中包括shell命令目錄。若果我們將/bin這個(gè)路徑從PATH中刪除掉,那么ls就不能直接使用了,而必須在命令行下輸入:/bin/ls,所以為了方便,將shell命令這種可執(zhí)行文件的路徑加入到PATH變量中來,就可以實(shí)現(xiàn)不帶路徑執(zhí)行。那么帶路徑也是同樣的效果,如下所示(雖然我們在根目錄下,但是依舊可執(zhí)行/bin目錄下的ls,就是因?yàn)镻ATH中存在/bin默認(rèn)路徑):

2、環(huán)境變量的操作:

(1)、對于環(huán)境變量的基本操作命令如下:

echo        //顯示某個(gè)環(huán)境變量值
export      //設(shè)置一個(gè)新的環(huán)境變量
env         //顯示所有環(huán)境變量
set         //顯示本地定義的shell變量
unset       //清除環(huán)境變量
readonly    //設(shè)置只讀環(huán)境變量

echo我們在上面用過了,而export則是為一個(gè)環(huán)境變量修改新的內(nèi)容,我們經(jīng)常在動(dòng)態(tài)庫制作時(shí)會(huì)這樣寫:export LD_LIBRARY_PATH=.,就是將當(dāng)前路徑設(shè)置為動(dòng)態(tài)庫的搜索路徑的環(huán)境變量中。注意:export只能在當(dāng)前shell下生效,登出重新啟動(dòng)shell就失效了。

舉例如下:

當(dāng)我們編寫一個(gè)“Hello PATH!”的打印程序時(shí),編譯完成,在運(yùn)行時(shí)需要加上./path_test,而不是直接像ls那樣不帶路徑運(yùn)行path_test,因?yàn)楫?dāng)前目錄不在PATH中,而當(dāng)我們將當(dāng)前目錄加到PATH變量中export PATH=. 時(shí)再運(yùn)行path_test就可以執(zhí)行了。

但是當(dāng)我們CTRL+D退出,再重新登錄時(shí),修改已經(jīng)不再生效了,如下:

并且,export有個(gè)缺點(diǎn):export為修改,而不是增加。它會(huì)將原有的路徑完全刪除,使得當(dāng)前shell下不能使用基本命令,如下:

(2)、如何使得修改長期有效,并且不會(huì)覆蓋原有路徑?

方法如下(修改配置文件.bashrc):

①回到當(dāng)前用戶家目錄/*cd或者cd ~都可以*/
②ls -a/*顯示所有文件,.bashrc為隱藏文件*/
③vim .bashrc/*編輯.bashrc,在文件最后加上一行"export PATH=$PATH:.",保存退出*/
④重啟shell后生效

注意:“export PATH=$PATH:.”千萬不能寫錯(cuò),寫錯(cuò)有可能導(dǎo)致基本的ls等命令不能使用,而且你的vim、vi都不能使用(其實(shí)是可以用的,下面再說)!!但是,只有出錯(cuò),才會(huì)使得記憶更加深刻,在我第一次修改時(shí),我就寫錯(cuò)了(←_←)。那怎樣解決呢?

方法一:重新設(shè)置PATH

PATH=/bin:/usr/bin /*vim在/usr/bin下,而vi在/bin下*/
cd
vim .bashrc        /*修改.bashrc文件即可*/

方法二

既然明白方法一,那么方法二就自然而然容易明白了:
操作如下:

cd
/usr/bin/vim .bashrc/*或者/bin/vi .bashrc*/
修改.bashrc文件即可

3、環(huán)境變量與環(huán)境表:

所有的環(huán)境變量在程序中通過環(huán)境表獲??;環(huán)境表是一個(gè)全局變量,類型為字符串?dāng)?shù)組指針(二級指針),以NULL結(jié)束,獲取方式為:

extern char ** environ;//envioron存儲環(huán)境表的首地址

舉例說明:

/*在主函數(shù)中通過extern char ** environ;來獲取環(huán)境表的首地址,由于環(huán)境表是一個(gè)指針數(shù)組,所以可以通過每個(gè)環(huán)境變量的首地址(數(shù)組的每個(gè)人元素)遍歷該變量內(nèi)容*/
# include<stdio.h>
# include<string.h>
int main(void)
{
    extern char ** environ;
    char ** p = environ;
    while(*p){
        printf("%s\n",*p);
        p++;
    }
    return 0;
}

那么如何取得某一個(gè)特定的環(huán)境變量,如PATH呢?

# include<stdio.h>
# include<string.h>
int main(void)
{
    extern char ** environ;
    char ** p = environ;
    while(*p){
        if(strncmp(*p,"PATH=",5) == 0){/*環(huán)境變量的格式是:變量名=具體內(nèi)容*/
            printf("%s\n",*p);
            break;
        }
        p++;
    }
}

我們還有一種方式來獲取環(huán)境表:

#include<stdio.h>
#include<stdlib.h>
/*第三個(gè)參數(shù)就是環(huán)境表的首地址*/
int main(int argc, char ** argv, char ** env)
{
    /*兩種方法基本相同,只不過char ** env這種方法只能在main函數(shù)中使用;而extern char ** environ這種方法可以再任何一個(gè)函數(shù)中使用*/
    extern char ** environ;
    printf("env=%p\nenviron=%p\n",env,environ);/*輸出結(jié)果顯示,兩個(gè)首地址為同一個(gè)地址,即都是環(huán)境表首地址*/
    return 0;
}

這幾個(gè)程序就不測試了,編譯運(yùn)行即可觀察

4、如何用函數(shù)來對環(huán)境變量修改?

函數(shù)如下:

#include<stdlib.h>
char * getenv(const char * name);
/*返回值為獲取的環(huán)境變量首地址,name為需要匹配的字符串,只會(huì)去除“name=”的內(nèi)容*/
int putenv(char * string);
/*string為創(chuàng)建的名字及內(nèi)容創(chuàng)建環(huán)境變量,存在就替換*/
int setenv(const char * name,const char *value,int overwrite);
/*設(shè)置一個(gè)環(huán)境變量,第一個(gè)參數(shù)是變量名,第二個(gè)是變量值(內(nèi)容),第三個(gè)參數(shù),新建或替換覆蓋(overwrite為0,不替換;非零替換)*/
int unsetenv(const char * name);/*取消設(shè)置*/
int clearenv(void);/*清空*/

基本測試:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    extern char ** environ;
    char * path_value = getenv("PATH");/*獲取PATH的內(nèi)容,返回值為PATH字符串的首地址,也就是環(huán)境表數(shù)組中的PATH這個(gè)元素的首地址*/
    printf("PATH=%s\n",path_value);
    /*創(chuàng)建一個(gè)自定義環(huán)境變量*/
    putenv("KANGRUOJIN=123456789");/*等號左邊是變量名,等號右邊是內(nèi)容(變量值),二者與等號共同組成這個(gè)字符串參數(shù)*/
    printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
    putenv("KANGRUOJIN=987654321");/*覆蓋原有內(nèi)容*/
    printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
    setenv("KANGRUOJIN","ABCDEFG",0);/*ovwrite為0不會(huì)覆蓋*/
    printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
    setenv("KANGRUOJIN","GFEDCBA",1);/*ovwrite為1會(huì)覆蓋*/
    printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
    return 0;
}

結(jié)果如下:

到此這篇關(guān)于淺談Linux環(huán)境變量與系統(tǒng)編程的文章就介紹到這了,更多相關(guān)Linux環(huán)境變量與系統(tǒng)編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決centos7 開機(jī)/etc/rc.local 不執(zhí)行的問題

    解決centos7 開機(jī)/etc/rc.local 不執(zhí)行的問題

    下面小編就為大家?guī)硪黄鉀Qcentos7 開機(jī)/etc/rc.local 不執(zhí)行的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 修改Apache配置指定php配置文件php.ini的位置方法

    修改Apache配置指定php配置文件php.ini的位置方法

    下面小編就為大家?guī)硪黄薷腁pache配置指定php配置文件php.ini的位置方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Linux使用curl訪問網(wǎng)頁和wget下載文件

    Linux使用curl訪問網(wǎng)頁和wget下載文件

    這篇文章介紹了Linux使用curl命令訪問網(wǎng)頁和wget下載文件的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • ubuntu下常用apt命令介紹

    ubuntu下常用apt命令介紹

    這篇文章介紹了ubuntu的常用apt命令,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • shell腳本實(shí)現(xiàn)實(shí)時(shí)檢測文件變更

    shell腳本實(shí)現(xiàn)實(shí)時(shí)檢測文件變更

    這篇文章主要介紹了shell腳本實(shí)現(xiàn)實(shí)時(shí)檢測文件變更,本文直接給出實(shí)現(xiàn)代碼和使用方法,以及svn下的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • Shell腳本實(shí)現(xiàn)批量替換文件內(nèi)容

    Shell腳本實(shí)現(xiàn)批量替換文件內(nèi)容

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)批量替換文件內(nèi)容,本文主要實(shí)現(xiàn)批量修改一個(gè)備份腳本里的備份路徑,其它批量替換也可以修改使用,需要的朋友可以參考下
    2014-12-12
  • Linux?shell中改文件名的方法總結(jié)

    Linux?shell中改文件名的方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Linux?shell中改文件名的方法,在Shell中有多種方法可以來修改文件名,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Linux下 rpm 命令查詢方法

    Linux下 rpm 命令查詢方法

    本文給大家介紹Linux下 rpm 命令查詢方法,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • shell腳本實(shí)現(xiàn)統(tǒng)計(jì)文件大小、批量創(chuàng)建用戶的示例

    shell腳本實(shí)現(xiàn)統(tǒng)計(jì)文件大小、批量創(chuàng)建用戶的示例

    這篇文章主要介紹了shell腳本實(shí)現(xiàn)統(tǒng)計(jì)文件大小、批量創(chuàng)建用戶的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • shell命令之mv的具體使用

    shell命令之mv的具體使用

    本文主要介紹了shell命令之mv的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

焉耆| 温州市| 桦川县| 瑞金市| 许昌市| 长顺县| 永新县| 成都市| 崇礼县| 韶山市| 延长县| 开鲁县| 嘉定区| 贵州省| 宜昌市| 北京市| 长垣县| 西乡县| 达日县| 邢台县| 丹东市| 东乡县| 白玉县| 双牌县| 恩平市| 利津县| 鸡东县| 蒙自县| 天门市| 昂仁县| 九龙坡区| 临高县| 齐齐哈尔市| 新密市| 宜黄县| 辽中县| 芦山县| 深水埗区| 德兴市| 庆城县| 六安市|