Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 環境變量完全指南:Shell 操作與 C 語言編程訪問

編輯:Linux 教學

環境變量是進程運行上下文的核心組成部分,贯穿於 Shell 交互、腳本執行、系統服務啟動及應用程序開發全生命周期。本文系統梳理 Linux 下環境變量的查看、設置、刪除、持久化操作,並展示如何在 C 語言程序中調用系統 API 進行讀寫。

一、 Shell 下環境變量操作

1. 查看變量

# 查看單個變量
echo $HOME

# 查看所有環境變量
env
# 或
printenv

# 查看所有 Shell 變量(含局部變量、函數等)
set

2. 設置與導出變量

# 定義局部 Shell 變量(僅當前 Shell 有效)
MYDIR="/usr/local/include"

# 導出為環境變量(子進程可繼承)
export MYDIR

# 一步到位
export MYDIR="/usr/local/include"

3. 刪除變量

unset MYDIR

4. 修改 PATH 路徑(持久化生效)

編輯用戶級配置文件 ~/.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 語言程序訪問環境變量

C 標準庫提供三個核心函數(需包含 <stdlib.h>):

函數原型說明
getenvchar *getenv(const char *name);獲取變量值,不存在返回 NULL。
setenvint setenv(const char *name, const char *value, int overwrite);設置變量,overwrite=1 強制覆蓋。
unsetenvint 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 創建的子進程將繼承修改後的環境。若需永久修改系統環境,必須寫入配置文件。

四、 最佳實踐建議

  1. 變量命名採用大寫加下劃線(如 APP_CONFIG_PATH)。
  2. 避免在腳本中硬編碼路徑,改用環境變量提高可移植性。
  3. 敏感信息(密鑰、密碼)勿寫入環境變量,建議使用密鑰管理服務或加密文件。
  4. 容器化部署時,通過 Docker ENV 或 Kubernetes ConfigMap/Secret 注入環境變量。
Copyright © Windows教程網 All Rights Reserved