環境變量是進程運行上下文的核心組成部分,贯穿於 Shell 交互、腳本執行、系統服務啟動及應用程序開發全生命周期。本文系統梳理 Linux 下環境變量的查看、設置、刪除、持久化操作,並展示如何在 C 語言程序中調用系統 API 進行讀寫。
# 查看單個變量
echo $HOME
# 查看所有環境變量
env
# 或
printenv
# 查看所有 Shell 變量(含局部變量、函數等)
set
# 定義局部 Shell 變量(僅當前 Shell 有效)
MYDIR="/usr/local/include"
# 導出為環境變量(子進程可繼承)
export MYDIR
# 一步到位
export MYDIR="/usr/local/include"
unset MYDIR
編輯用戶級配置文件 ~/.bash_profile 或 ~/.bashrc:
# 追加新路徑,冒號分隔
PATH=$PATH:/opt/myapp/bin:/usr/local/custom/bin
# 立即生效
source ~/.bash_profile
注意:.bash_profile 登錄 Shell 讀取,.bashrc 交互式非登錄 Shell 讀取,通常在前者中 source 後者。
/etc/profile:所有用戶登錄時讀取,設置全局環境變量。/etc/bashrc / /etc/bash.bashrc:所有用戶交互式 Shell 讀取。/etc/environment:PAM 環境變量,靜態定義,不支持變量引用。C 標準庫提供三個核心函數(需包含 <stdlib.h>):
| 函數 | 原型 | 說明 |
|---|---|---|
| getenv | char *getenv(const char *name); | 獲取變量值,不存在返回 NULL。 |
| setenv | int setenv(const char *name, const char *value, int overwrite); | 設置變量,overwrite=1 強制覆蓋。 |
| unsetenv | int unsetenv(const char *name); | 刪除變量。 |
#include <stdio.h>
extern char **environ; // 內核維护的環境變量指針數組
int main() {
char **var;
for (var = environ; *var != NULL; ++var) {
printf("%s\n", *var);
}
return 0;
}
setenv/unsetenv 修改的是當前進程的環境表,後續 fork/exec 創建的子進程將繼承修改後的環境。若需永久修改系統環境,必須寫入配置文件。
APP_CONFIG_PATH)。ENV 或 Kubernetes ConfigMap/Secret 注入環境變量。