环境变量的秘密武器:让您的命令行效率倍增(环境变量图文详解)

Linux中的环境变量(图文详解)

  • [1. 基本概念](#1. 基本概念)
  • [2. 常见环境变量](#2. 常见环境变量)
    • [PATH : 指定命令的搜索路径](#PATH : 指定命令的搜索路径)
    • [HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)](#HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录))
    • [SHELL : 当前Shell,它的值通常是/bin/bash](#SHELL : 当前Shell,它的值通常是/bin/bash)
  • [3. 查看环境变量方法](#3. 查看环境变量方法)
  • [4. 测试PATH](#4. 测试PATH)
  • [5. HOME](#5. HOME)
  • [6. 和环境变量相关的命令](#6. 和环境变量相关的命令)
  • [7. 环境变量的组织方式](#7. 环境变量的组织方式)
  • [8. 通过代码如何获取环境变量](#8. 通过代码如何获取环境变量)
  • [9. 通过系统调用获取或设置环境变量](#9. 通过系统调用获取或设置环境变量)
  • [10. 环境变量通常是具有全局属性的](#10. 环境变量通常是具有全局属性的)

1. 基本概念

环境变量 (environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

如:我们在编写C/C++代码的时候,在链接 的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序 ,原因就是有相关环境变量帮助编译器进行查找。

环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

2. 常见环境变量

PATH : 指定命令的搜索路径


可以使用echo $PATH命令来查看PATH环境变量的值,如下所示:

它会输出系统中设置的路径列表,用于搜索可执行文件的位置。


HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

可以使用echo $HOME命令来查看HOME环境变量的值,如下所示:

它会输出当前登录用户的主工作目录路径。


SHELL : 当前Shell,它的值通常是/bin/bash

可以使用echo $SHELL命令来查看SHELL环境变量的值,如下所示:

它会输出当前使用的Shell的路径。

3. 查看环境变量方法

clike 复制代码
echo $NAME //NAME:你的环境变量名称

4. 测试PATH

  1. 创建hello.c文件
clike 复制代码
#include <stdio.h>
int main()
{
 	printf("hello world!\n");
 	return 0;
}
  1. 对比./hello执行和之间hello执行

  2. 为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序需要带路径才能执行?

    在Linux系统中,有一些指令可以直接执行而不需要带路径,这是由于操作系统的环境变量 PATH 的设置。
    环境变量 PATH 包含了一系列的目录路径,当在终端输入一个命令时,系统会按照 PATH 中指定的路径顺序去查找可执行文件。如果找到了命令对应的可执行文件,就可以直接执行。

  3. 将我们的程序所在路径加入环境变量PATH当中, export PATH=$PATH:hello程序所在路径

例如hello 这个可执行文件,我们将它的路径配置到PATH环境变量当中去,就能直接用"hello"执行:

5. HOME

  1. root和普通用户 ,分别执行 echo $HOME ,对比差异
    . 执行 cd ~; pwd ,对应 ~ 和 HOME 的关系
clike 复制代码
echo $HOME

普通用户:

root:


clike 复制代码
cd ~;pwd

普通用户:

root:

综上所述:

  • 当用root用户执行echo $HOME时,输出的结果是/root,表示root用户的主目录是/root。

  • 当用普通用户执行echo $HOME时,输出的结果是普通用户的主目录路径

6. 和环境变量相关的命令

  1. echo: 显示某个环境变量值
  2. env: 显示所有环境变量
  3. export: 设置一个新的环境变量
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量
clike 复制代码
set//命令行直接输入就能查看到

7. 环境变量的组织方式

8. 通过代码如何获取环境变量

  • 命令行第三个参数
clike 复制代码
#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;
}
  • 通过第三方变量environ获取
    (注:libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。)
clike 复制代码
#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;
}

9. 通过系统调用获取或设置环境变量

常用getenv函数来访问特定的环境变量。

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

10. 环境变量通常是具有全局属性的

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

直接查看,发现没有结果,说明该环境变量根本不存在:

导出环境变量

clike 复制代码
export MYENV="66666666666"

再次运行程序,发现结果有了!

说明:环境变量是可以被子进程继承下去的!

(本章完)

相关推荐
A小辣椒14 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒18 小时前
TShark:基础知识
linux
AlfredZhao20 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式