Linux---環境變量

基本概念

環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數,通常具有全局屬性。
例如:當我們在寫c/c++代碼時,我們並不知道所鏈接的動態靜態庫在哪裏,但照樣可以鏈接成功。這是因爲有相關環境變量幫助編譯器進行查找。

常見的環境變量

·PHAT*:指定命令的搜索路徑
·HOME*:指定用戶的主工作目錄(及用戶登陸到Linux系統中時,默認的目錄)
·HISTSIZE*:指保存歷史命令記錄的條數
·SHELL*:當前的Shell,它的值通常是/bin/bash

查看環境變量的方法

[admin@localhost test]$ echo $HOME  //HOME表示你要查看的環境變量名稱
/home/admin

測試PATH
先編寫一個hello.c文件

#include<stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}

執行代碼:
這裏寫圖片描述
我們發現我們自己編寫的代碼執行時要加 ./ ,而在命令行敲其他命令時並不需要。這是爲什麼呢?原因在於操作系統將那些我們常用的命令放在了一個指定的目錄下,我們需要時就可以直接執行。

通過查看和搜索路徑有關的環境變量:
這裏寫圖片描述
可以看出這些路徑以冒號隔開,那試想,我們可不可以將我們寫的代碼的路徑添加到PATH中,讓我們的代碼也可以執行運行。答案是可以的。
這裏寫圖片描述
從上圖可以看出通過修改PATH環境變量可以讓我們的代碼直接運行了。
還有一種方法,就是將我們的可執行程序拷到PATH的任意目錄下,看看可不可行:
這裏寫圖片描述
這種操作只能切換到root用戶纔可以,畢竟我們寫的代碼有可能有風險,隨意添加到系統目錄中可能會造成一定的危害。所以建議大家不要隨意往系統目錄中添加東西。

測試HOME
通過下面的例子來對比:
在普通用戶下查看HOME環境變量
這裏寫圖片描述
root用戶下查看
這裏寫圖片描述
普通用戶下進入家目錄
這裏寫圖片描述
切換到root用戶執行上述操作
這裏寫圖片描述
我們發現HOME環境變量就等同於 ~,它兩內容也一樣。

測試HISTSIZE
這裏寫圖片描述
說明當前保存歷史記錄命令條數最大爲1000條

和環境變量有關的命令

1.echo:顯示某個環境變量值
2.export :設置一個新的環境變量
3.env:相似所有環境變量
4.unset:清除環境變量
5.set:顯示本地定義的shell變量和環境變量

獲取環境變量的方法
1.通過命令行第三個參數

#include<stdio.h>

int main(int argc,char* argv[],char* env[])
{
    int i = 0;
    for( ;env[i];i++)
    {
        printf("%s\n",env[i]);
    }
    return 0;
}

2.通過第三方變量environ獲取

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

3.通過getpath系統調用獲取

#include<stdio.h>
#include<stdlib.h>
int main()
{
    printf("%s\n",getenv("PATH"));
    return 0;
}

環境變量通常具有全局屬性
環境變量通常具有全局屬性,可以被子進程繼承下去

#include<stdio.h>

#include<stdlib.h>
int main()
{
    char *env = getenv("MYENV");
    if(env)
    {
        printf("%s\n",env);
    }
    return 0;
}

運行,發現沒有結果,說明該環境變量不存在
這裏寫圖片描述
通過export 命令修改了環境變量,這下可以執行了。說明,環境變量可以被繼承。

想了解更多的,大家可以參考《UNIX環境高級編程》第7章進程環境來學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章