基本概念:
環境變量(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章進程環境來學習。