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

相关推荐
Java.熵减码农5 小时前
解决Linux修改环境变量后导致登录循环进不去系统的问题
linux·运维·服务器
明天好,会的6 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
天骄t6 小时前
嵌入式系统与51单片机核心原理
linux·单片机·51单片机
猫头虎6 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕6 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
阿部多瑞 ABU7 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
徐同保7 小时前
nginx转发,指向一个可以正常访问的网站
linux·服务器·nginx
HIT_Weston7 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿8 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin8 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维