Linux中《环境变量》详细介绍

目录

环境变量

基本概念

  • 环境变量(environment variables)**⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数。
  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进⾏查找
  • 环境变量通常具有某些特殊⽤途,还有在系统当中通常具有全局特性

命令行参数

查看环境变量方法

echo $NAME//NAME:你的环境变量名称
env//查看全部的环境便变量


为什么系统的命令不带"./",运行我们自己的代码要带"./"?

1.要运行一个变量,首先要找到它!我们自己的程序有"./",所以系统可以找到,倒是系统的命令呢?没错,就是环境变量的作用,环境变量里的PATH记录了一些指定的路径,系统默认会在指定的路径下查找,也就是说,PATH是系统中搜索指令的默认搜索路径。


如何理解环境变量?从存储的角度。

当用户登陆时,操作系统会给用户创建一个bash进程,bash进程会从操作系统的配置文件中读环境变量信息,并在bash内部创建一张环境变量表,一个指针数组的样子。

同时bash进程内部也会维护一张命令行参数表,用户输入命令后,是bash先拿到,bash先把命令行的一串字符,以空格为分隔符进行切分,把切分的内容放到一个字符数组中,利用PATH环境变量,找到对应的指令,进行执行。

环境变量是从哪里来的呢?

从系统的配置文件里来的!!!

还有什么方法可以不⽤带路径,直接就可以运行呢?

把当前路径添加到环境变量中,或者把程序移动到环境变量的搜索路径中。

常见环境变量

  • PATH : 指定命令的搜索路径。
  • HOME : 指定⽤⼾的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)。
  • SHELL : 当前Shell,它的值通常是/bin/bash。

和环境变量相关的命令

export :添加环境变量
unset + 名称:取消环境变量
echo $名称:显示一个环境变量
env:显示所有的环境变量
set:显示所有的环境变量和本能环境变量

获取环境变量

子进程可以继承父进程传给子进程的环境变量。

getenv(const char* name):获取某个环境变量的内容

环境变量被子进程继承,有什么好处呢?

这样的好处就是,子进程可以根据一些环境变量的值进行一些个性化操作。

environ:全局变量

libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头⽂件中,所以在使⽤时 要⽤extern声明。

每个程序都会收到⼀张环境表,环境表是⼀个字符指针数组,每个指针指向⼀个以'\0'结尾的环境字符串。

理解环境变量的特性

  • 环境变量具有全局特性。
  • 在命令行中定义本地变量,本地变量不会被子进程继承,只能在bash内部使用,同时env也看不到本地变量,se既可以看到本地变量,也可以看到环境变量。

为什么export明明是一个子进程,竟然能够将环境变量写入到父进程中?

注意:export是内建命令(built_in command),不需要创建子进程,而是让bash自己亲自执行,bash自己调用函数或者系统调用完成。

相关推荐
Evan芙11 分钟前
DNS服务器类型,解析答案,正反解析域,资源记录定义总结
运维·服务器
wanhengidc17 分钟前
巨椰 云手机办公便利性高
运维·服务器·安全·智能手机·云计算
Saniffer_SH26 分钟前
【每日一题】PCIe答疑 - 接大量 GPU 时主板不认设备或无法启动和MMIO的可能关系?
运维·服务器·网络·人工智能·驱动开发·fpga开发·硬件工程
爱宇阳37 分钟前
Linux 安全加固:禁用 IPv4 ICMP 重定向发送
linux·运维·安全
Saniffer_SH1 小时前
【每日一题】讲讲PCIe链路训练和枚举的前后关系
运维·服务器·网络·数据库·驱动开发·fpga开发·硬件工程
阿豪学编程1 小时前
动静态库制作与原理
linux·个人开发
2401_861786181 小时前
linux修改ip地址(有详细步骤)kali
linux·运维·服务器
颜子鱼1 小时前
Linux platform总线驱动框架
linux·驱动开发
徐子元竟然被占了!!1 小时前
Linux-top
linux·运维·windows
fufu03111 小时前
Linux环境下的C语言编程(四十二)
linux·c语言·算法