欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年05月06日 11:06:28   作者:Apollon_krj  
本文主要介紹了淺談Linux環(huán)境變量與系統(tǒng)編程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(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è)路徑用冒號(hào)(:)分隔),其中包括shell命令目錄。若果我們將/bin這個(gè)路徑從PATH中刪除掉,那么ls就不能直接使用了,而必須在命令行下輸入:/bin/ls,所以為了方便,將shell命令這種可執(zhí)行文件的路徑加入到PATH變量中來,就可以實(shí)現(xiàn)不帶路徑執(zhí)行。那么帶路徑也是同樣的效果,如下所示(雖然我們?cè)诟夸浵拢且琅f可執(zhí)行/bin目錄下的ls,就是因?yàn)镻ATH中存在/bin默認(rèn)路徑):

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

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

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

echo我們?cè)谏厦嬗眠^了,而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ù)組指針(二級(jí)指針),以NULL結(jié)束,獲取方式為:

extern char ** environ;//envioron存儲(chǔ)環(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ù)來對(duì)環(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");/*等號(hào)左邊是變量名,等號(hào)右邊是內(nèi)容(變量值),二者與等號(hào)共同組成這個(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Ubuntu中的sudo和su命令介紹

    Ubuntu中的sudo和su命令介紹

    這篇文章介紹了Ubuntu中的sudo和su命令,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Shell命令批量修改圖片文件名

    Shell命令批量修改圖片文件名

    這篇文章主要介紹了Shell命令批量修改圖片文件名,本文使用for循環(huán)、awk、sed等命令實(shí)現(xiàn)批量修改圖片文件名,需要的朋友可以參考下
    2014-12-12
  • Linux文件的歸檔和壓縮命令

    Linux文件的歸檔和壓縮命令

    文件歸檔命令tar,文件歸檔有好多好處,方便使用易于管理,接下來通過本文給大家分享linux文件的歸檔和壓縮命令,感興趣的朋友一起看看吧
    2017-08-08
  • Shell退出狀態(tài)碼及其應(yīng)用詳解

    Shell退出狀態(tài)碼及其應(yīng)用詳解

    這篇文章主要介紹了Shell退出狀態(tài)碼及其應(yīng)用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • crontab設(shè)置每分鐘、每小時(shí)、每天、每周、每月、每年定時(shí)執(zhí)行的腳本

    crontab設(shè)置每分鐘、每小時(shí)、每天、每周、每月、每年定時(shí)執(zhí)行的腳本

    這篇文章主要介紹了crontab設(shè)置每分鐘、每小時(shí)、每天、每周、每月、每年定時(shí)執(zhí)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 淺談安裝ORACLE時(shí)在Linux上設(shè)置內(nèi)核參數(shù)的含義

    淺談安裝ORACLE時(shí)在Linux上設(shè)置內(nèi)核參數(shù)的含義

    下面小編就為大家?guī)硪黄獪\談安裝ORACLE時(shí)在Linux上設(shè)置內(nèi)核參數(shù)的含義。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 利用Shell腳本循環(huán)讀取文件中每一行的方法詳解

    利用Shell腳本循環(huán)讀取文件中每一行的方法詳解

    讀取文件是我們?cè)谌粘9ぷ髦薪?jīng)常遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于利用Shell腳本循環(huán)讀取文件中每一行的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • Shell中使用scp命令實(shí)現(xiàn)文件上傳代碼

    Shell中使用scp命令實(shí)現(xiàn)文件上傳代碼

    這篇文章主要介紹了Shell中使用scp命令實(shí)現(xiàn)文件上傳代碼,本文講解使用scp命令實(shí)現(xiàn)名登錄上傳文件,需要的朋友可以參考下
    2015-04-04
  • Django中shell命令的使用

    Django中shell命令的使用

    Django的manage工具提供了shell命令,本文主要介紹了Django中shell命令的使用,方便直接在終端中執(zhí)行測試python語句,有需要的小伙伴可以參考下
    2021-05-05
  • Shell腳本實(shí)現(xiàn)批量生成nagios配置文件

    Shell腳本實(shí)現(xiàn)批量生成nagios配置文件

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)批量生成nagios配置文件,本文使用配置文件模板加上文件替換的方法實(shí)現(xiàn)批量生成配置文件,需要的朋友可以參考下
    2015-07-07

最新評(píng)論