简单讲讲 Linux 操作系统中的环境变量,其实它和 Windows 中的环境变量定义都一样,还不了解的小伙伴一起看看~环境变量是用于存储系统或用户特定的配置信息和状态信息的动态命名值。这些变量在系统运行期间可以被多个程序访问,用于影响程序的行为、配置应用程序、保存用户信息等。环境变量是一组键值对,包含在用户的环境中,用于提供运行时信息。例如,它们可以指定系统路径、语言设置、临时目录等。- 临时的:用户利用 export 命令,在当前终端下声明环境变量,关闭Shell终端失效。
HOME: 当前用户的主目录路径。USER: 当前登录的用户名。PATH: 系统查找可执行文件的目录列表。SHELL: 当前用户的默认命令行解释器的路径。LANG: 系统的语言设置。TERM: 终端类型。PWD: 当前工作目录。
举个例子,当我们在终端上要去执行一个指令时,就要去找对应的二进制文件。那怎么找呢?呵呵,PATH 帮助命令解释器(Shell)去找~比如当我们执行: ls -l 指令,解释器其实不知道 ls 存放在哪个目录,但是它会按 PATH 环境变量设置的值(存放路径),顺序遍历所有以冒号分隔的目录去找对应的文件。usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
环境变量是如何产生的呢?在用户的主目录中,通常会有两个配置文件:.bash_profile 和 .bashrc。当 Bash 进程启动时,它会根据不同的情况加载这些配置文件:- 在登录 Shell 启动时,会加载 .bash_profile 文件。
- 在交互式非登录 Shell 启动时,会加载 .bashrc 文件。
通过这些配置文件,系统会生成相应的环境变量表,从而为当前会话配置所需的环境变量。可以使用 printenv 或 env 命令显示当前所有环境变量:如果要查看某个特定的环境变量,可以使用 echo 命令:或者写个代码使用 main 函数的第三个参数也可以获取,例如:#include<stdio.h>intmain(int argc, char *argv[], char *env[]){ for(int i = 0; env[i]; i++) { printf("%s\n", env[i]); } return0;}
或者使用 C 语言的全局变量,用于直接访问进程的所有环境变量。#include<stdio.h>intmain(){ externchar **environ; //全局变量 for(int i = 0; environ[i]; i++) printf("%s\n", environ[i]); return0; }
#include<stdlib.h>intmain(){ char *r1 = getenv("PATH"); printf("%s\n", r1); return0; }
在 Linux 中,可以通过两种主要方式设置环境变量:临时设置和永久设置。临时环境变量在当前 shell 会话中有效,关闭终端后失效。可以使用 export 命令设置:export MY_VAR="Hello, My env!"
要永久设置环境变量,通常需要将其添加到用户的 shell 配置文件中,如 .bashrc、.bash_profile 或 .profile 文件(取决于使用的 shell)。例如,使用以下步骤设置:打开 .bashrc 文件(或其他相应的配置文件):export MY_VAR="Hello, My env!"
如果需要删除一个环境变量,可以使用 unset 命令:当多个环境变量具有相同名称时,Linux 系统会根据优先级规则来决定使用哪个值。一般规则如下:- 在 shell 启动期间,配置文件中的变量会覆盖系统级的变量。
- 子进程继承父进程的环境变量,但对变量的修改不会影响父进程。
在编写 shell 脚本时,环境变量非常有用。可以在脚本中使用这些变量,或者通过引入外部变量来控制脚本的行为。#!/bin/bashecho"当前用户: $USER"echo"主目录: $HOME"echo"当前Shell: $SHELL"# 设置一个新的环境变量export GREETING="Hello, $USER!"echo$GREETING
将上述内容保存为 greeting.sh,然后给它执行权限并运行:sudo chmod +x greeting.sh./greeting.sh
环境变量在 Linux 系统中地位很关键哈,影响着系统和应用程序的行为。通过正确地查看、设置和管理环境变量,咱们可以提升系统的灵活性和可配置性。