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自己调用函数或者系统调用完成。

相关推荐
conkl29 分钟前
构建 P2P 网络与分布式下载系统:从底层原理到安装和功能实现
linux·运维·网络·分布式·网络协议·算法·p2p
求知若渴,虚心若愚。2 小时前
Error reading config file (/home/ansible.cfg): ‘ACTION_WARNINGS(default) = True
linux·前端·ansible
π大星星️3 小时前
Nginx 四层(stream)反向代理 + DNS 负载均衡
运维·nginx·负载均衡
beyoundout3 小时前
HAproxy
linux·运维·服务器
qq_218753315 小时前
服务器查日志太慢,试试grep组合拳
运维·服务器
Jie_176 小时前
【linux】高可用集群Keepalived
linux·运维·服务器
思绪漂移6 小时前
阿里云【免费试用】Elasticsearch 智能运维 AI 助手
运维·elasticsearch·阿里云
aiprtem6 小时前
LVGL + ESP-Brookesia 嵌入式模拟桌面应用开发
linux·c语言·物联网
21号 17 小时前
4.应用层自定义协议与序列化
运维·服务器·网络
xx.ii8 小时前
4.Linux 应用程序的安装和管理
linux·服务器·网络